3

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

4

1 回答 1

1

我看到有 4 种方法可以做到这一点。它们都不好玩,尽管随着你的进步它们会变得更好(并且编程更复杂)

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

  2. 穿上@FindByaList<WebElement>并等到大小不为 0。

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

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

如果您对这些解决方案中的任何一个感到困惑,我可以为它们提供代码,但我认为了解WebElementWait页面对象如何真正工作(通过实现您选择的解决方案)是非常好的做法,所以我现在不会发布它。

于 2013-11-12T22:36:33.960 回答