2016-01-22 73 views
0

我使用Webdriver驱动浏览器来测试我们的网站。 不过,我遇到了在那里的webdriver是无法一个页面元素上执行操作,除非我向下滚动使用的东西的页面类似driver.findElement(By.id("myElementId")).sendKeys(Keys.ARROW_DOWN);Webdriver是否需要DOM元素来执行操作?

我的问题是问题,请问WebElement总是在页面上显示任何操作(如click())都要执行?在加载页面之后,元素是否存在于DOM中还不够?

回答

2

WebElement documentationClick()

有一些前提条件被点击的元素。元素必须是可见的,它必须有一个高度和宽度大于0

硒的webdriver模拟用户交互与网页,所以如果它没有显示它不能在元件上单击(虽然“存在在DOM中“足够用于定位元素和提取数据,如文本)。点击不可见元素可能导致错误如

ElementNotVisibleException

或者

元件没有在点(411,675)点击。其他元素将收到点击

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

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

  • 最大化窗口在测试
  • 滚动元素要在Actions
  • 显式的等待用moveToElement方法进行互动与expected conditionsvisibilityOfElementLocated
2

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

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

0

要的开始清理一些关于“可见性”的混淆,一般而言,它是而不是对于元素被“滚动到视图中”所必需的,即在边界内一个人类可以看到的开放式窗口或框架。除非有问题的元素具有自定义侦听器,或者使用页面可见性API(请参阅https://stackoverflow.com/a/1060034/954442)来控制其对人眼的可见性。

毕竟,您的页面可以通过PhantomJS,Slimer等无头浏览器呈现在屏幕外,内存中,您仍然希望并希望您的测试能够以这种方式工作。所以你可以连续运行它们,过夜等。

但正如其他人已经正确地说过,如果有问题的元素没有大小,或者被明确标记为不可见,许多操作将会失败,ElementNotVisibleException,或者确实已被其他元素所覆盖。

相关问题