我正在使用Webdriver来驱动浏览器来测试我们的网站。
但是,我遇到了Webdriver无法对页面元素执行操作的问题,除非我使用driver.findElement(By.id("myElementId")).sendKeys(Keys.ARROW_DOWN);
我的问题是,是否始终必须在页面上显示WebElement
以执行任何操作(例如click()
)?页面加载后,元素是否存在于DOM中是不是足够了?
答案 0 :(得分:3)
来自Click()
的{{3}}
点击元素有一些先决条件。元素必须是可见的,其高度和宽度必须大于0。
Selenium WebDriver模拟用户与网页的互动,因此如果没有显示该元素,它就无法点击该元素(尽管"存在于DOM"足以定位元素并提取文本等数据。单击不可见元素可能会导致错误,例如
ElementNotVisibleException
或者
元素在点(411,675)处无法点击。其他元素将收到点击
或者意外的行为,因为另一个元素确实收到了没有任何错误的点击。
这就是为什么硒为解决这个问题提供了许多解决方案的原因。例如:
moveToElement
方法滚动到您要与之互动的元素
visibilityOfElementLocated
答案 1 :(得分:2)
Selenium WebDriver旨在模仿真实用户的行为,并因此与应用程序的HTML进行交互。要与元素交互,元素是可见的很重要。根据WebDriver W3C规范,元素的可见性由人眼感知可见的东西引导。 所以答案是肯定的!
但是,为了避免向下滚动页面,您可以尝试使用JavascriptExecutor。即使元素不在视野中,它也应该有效。
答案 2 :(得分:0)
要清除一些关于“可见性”的混淆,一般来说,不根本不需要元素滚动到视图&#39 ;即,在人类可以看到的打开的窗户或框架的范围内。除非相关元素具有自定义侦听器,或使用Page Visibility API(请参阅https://stackoverflow.com/a/1060034/954442)来控制其对人眼的可见性。
毕竟,您的页面可以通过无头浏览器,PhantomJS,Slimer等在内存中显示在内存中。您仍然希望并希望您的测试以这种方式工作,例如:所以你可以连续运行它们,过夜等。
但是正如其他人所说的那样,如果所讨论的元素没有大小,或者已经明确标记为不可见,或者确实已被其他元素覆盖,则许多操作将失败ElementNotVisibleException
。