java - 页面对象模型中的 WebDriver 显式等待

标签 java selenium selenium-webdriver automated-tests pageobjects

我们目前有一个使用页面对象模型的大型 selenium junit 项目。我们使用 @FindBy 注释来声明我们的 WebElements。现在当我们运行测试时,我们随机得到 NoSuchelementException,这意味着页面可能没有完成加载。我们不想使用隐式等待,因为那不会提供完整的解决方案(元素可能存在于 DOM 中但尚不可交互)。显式等待可能会解决此问题。但是,我们如何在这个页面模型架构中使用它而不必去掉 @FindBy 注解呢?以前可能有人问过这个问题,但我似乎还没有找到任何解决方案。

最佳答案

我看到有 4 种方法可以做到这一点。它们都不是有趣的,但是,随着您的进行,它们会变得更好(并且编程更复杂)

  1. 将您的选择器复制到显式等待中

  2. 输入您的 @FindByList<WebElement> 上并等待大小不为 0。

  3. 创建一个接受 WebElement 并调用 isDisplayed() 的函数(或其他一些非操作函数)直到它不抛出异常

  4. 您可以实现的最终解决方案是围绕 WebElement 使用装饰器模式。这意味着您需要创建自己的 FieldDecorator ,然后在初始化装饰器时使用该装饰器 WebElements .装饰的 webelement 将有一个 exists() 函数,它基本上是一个围绕 NoSuchElementExceptions 的 try/catch。 .

如果您对这些解决方案中的任何一个感到困惑,我可以为它们提供代码,但我认为学习如何做是一个很好的实践 WebElementWait和页面对象确实有效(通过实现您选择的解决方案),所以我现在不会发布它。

关于java - 页面对象模型中的 WebDriver 显式等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940247/

相关文章:

python - 你如何看待使用 selenium 的 Chrome webdriver

c# - geckodriver.exe 不在当前目录或路径变量中,Selenium 2.53.1 + Firefox 48 + Selenium 3 Beta

java - Selenium 无法使用 xpath 定位元素,但 firebug 可以

java - 如何通过使用 Selenium WebDriver 和 Java 从此 HTML 代码获取文本

java - OpenCV 2.4.4 Java - 抓取网络摄像头图片/流 (OSX)

java - 如何中断 Hibernate session ?

java - 了解 Apache HTTP 客户端中由 PoolingHttpClientConnectionManager 管理的连接的生命周期

java - 警告 :Dependency org. apache.httpcomponents :httpclient:4. 0.1 被忽略

java - Selenium (Java) 消息 "Unable to locate element"但元素和 XPath 存在

java - 通过selenium java下载验证码