【发布时间】:2014-05-05 19:46:48
【问题描述】:
我正在尝试点击页面上的一个元素;该元素在屏幕上清晰可见。有一个烤面包机可能会弹出,所以我正在尝试编写防御:如果烤面包机在屏幕上,请先关闭烤面包机,然后继续点击进入下一页。我正在使用 PageFactory,所以我有一个包含烤面包机的元素和一个用于烤面包机的关闭按钮的元素。我的“处理烤面包机”方法如下:
if (driver.findElements(By.cssSelector("#toaster")).size() > 0
&& toaster.isDisplayed()) {
toasterClose.click();
}
但是,当我在 chrome 中执行此操作时,我收到了 org.openqa.selenium.WebDriverException: unknown error: Element is not clickable at point (994, 758)
暂停测试执行,我在屏幕上看不到烤面包机。我认为开发人员必须通过使其呈现在一个遥远的、不可滚动的位置来隐藏它。所以作为权宜之计,我加了一个条件,如果x坐标大于800,就不要点击。有了这个,我得到:
org.openqa.selenium.WebDriverException: unknown error: Element is not clickable at point (547, 725). Other element would receive the click: <div id="toaster">...</div>
发生了什么事?烤面包机怎么可能无法点击,但无论如何都会收到点击? Firefox 可以很好地处理测试,不管有没有 800 像素的解决方法;只有 Chrome 有这个问题。
澄清:测试的目的不是点击烤面包机。目标是单击页面上的另一个元素。测试报告说烤面包机挡住了路,所以我尝试编写一个步骤来关闭烤面包机(如果显示)。我还没有看到这个烤面包机,所以我不确定它是什么,但是 chrome 一直报告它在路上。我们站点范围内的所有烤面包机都使用包含关闭按钮的基本模板,以便用户可以关闭烤面包机,这就是我要单击的内容。 Firefox 从来没有这个问题,也没有报告任何烤面包机的存在。
我之所以称它为烤面包机,是因为我们的网站就是这样称呼它的,因为无论我们从哪个框架(jQuery UI?Backbone?)中获取它,它都是这样称呼的。如果我暂停执行,此时在测试中我看不到任何烤面包机,但 jQuery 告诉我它存在并且可见。但是,使用 jQuery 找到的元素只有我们的烤面包机设置的默认部分:一个 div、一个空的 div,其中应该是消息,以及关闭按钮。显然,此时它不应该被渲染,但 Chrome 认为它会妨碍它。
【问题讨论】:
-
有趣。
toasterClose.isDisplayed()说什么?烤面包机是否以某种方式滑入屏幕,还是立即(消失)出现?我们在一个框架内吗?一些较旧的 Webdriver 在计算 iframe 中的正确点击坐标时遇到问题。 -
有什么更新吗?我的以下任何建议有帮助吗?
-
@Kache 对不起,我病了,等我明天再回到系统前面再说