WebDriver在页面对象模型中显式等待

时间:2013-11-12 21:26:09

标签: java selenium selenium-webdriver automated-tests pageobjects

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

1 个答案:

答案 0 :(得分:1)

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

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

  2. @FindBy放在List<WebElement>上,等待大小不为0.

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

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

  5. 如果您对这些解决方案感到困惑,我可以为他们提供代码,但我认为了解WebElementWait和Page Objects如何真正起作用(通过实施您选择的解决方案)是非常好的做法,所以我现在没有发布。