Webdriver是否需要DOM元素才能执行操作?

时间:2016-01-22 19:04:03

标签: java selenium selenium-webdriver webdriver

我正在使用Webdriver来驱动浏览器来测试我们的网站。 但是,我遇到了Webdriver无法对页面元素执行操作的问题,除非我使用driver.findElement(By.id("myElementId")).sendKeys(Keys.ARROW_DOWN);

之类的内容向下滚动页面

我的问题是,是否始终必须在页面上显示WebElement以执行任何操作(例如click())?页面加载后,元素是否存在于DOM中是不是足够了?

3 个答案:

答案 0 :(得分:3)

来自Click()的{​​{3}}

  

点击元素有一些先决条件。元素必须是可见的,其高度和宽度必须大于0。

Selenium WebDriver模拟用户与网页的互动,因此如果没有显示该元素,它就无法点击该元素(尽管"存在于DOM"足以定位元素并提取文本等数据。单击不可见元素可能会导致错误,例如

  

ElementNotVisibleException

或者

  

元素在点(411,675)处无法点击。其他元素将收到点击

或者意外的行为,因为另一个元素确实收到了没有任何错误的点击。

这就是为什么硒为解决这个问题提供了许多解决方案的原因。例如:

  • 在测试开始时最大化窗口
  • 使用WebElement documentation
  • 中的moveToElement方法滚动到您要与之互动的元素
  • 明确等待Actions,例如visibilityOfElementLocated

答案 1 :(得分:2)

Selenium WebDriver旨在模仿真实用户的行为,并因此与应用程序的HTML进行交互。要与元素交互,元素是可见的很重要。根据WebDriver W3C规范,元素的可见性由人眼感知可见的东西引导。 所以答案是肯定的!

但是,为了避免向下滚动页面,您可以尝试使用JavascriptExecutor。即使元素不在视野中,它也应该有效。

答案 2 :(得分:0)

要清除一些关于“可见性”的混淆,一般来说,根本不需要元素滚动到视图&#39 ;即,在人类可以看到的打开的窗户或框架的范围内。除非相关元素具有自定义侦听器,或使用Page Visibility API(请参阅https://stackoverflow.com/a/1060034/954442)来控制其对人眼的可见性。

毕竟,您的页面可以通过无头浏览器,PhantomJS,Slimer等在内存中显示在内存中。您仍然希望并希望您的测试以这种方式工作,例如:所以你可以连续运行它们,过夜等。

但是正如其他人所说的那样,如果所讨论的元素没有大小,或者已经明确标记为不可见,或者确实已被其他元素覆盖,则许多操作将失败ElementNotVisibleException