我们目前有一个使用页面对象模型的大型 selenium junit 项目。我们使用@FindBy
注解来声明我们的 WebElements。现在,当我们运行测试时,我们随机得到NoSuchelementException
,这意味着页面可能还没有完成加载。我们不想使用隐式等待,因为这不会提供完整的解决方案(一个元素可能存在于 DOM 中但还不能交互)。显式等待可能会解决此问题。但是,我们如何在这个页面模型架构中使用它而不用@FindBy
去掉注解呢?以前可能有人问过这个问题,但我似乎还没有找到任何解决方案。
问问题
2601 次
1 回答
1
我看到有 4 种方法可以做到这一点。它们都不好玩,尽管随着你的进步它们会变得更好(并且编程更复杂)
将您的选择器复制到显式等待中
穿上
@FindBy
aList<WebElement>
并等到大小不为 0。创建一个接受 WebElement 并调用
isDisplayed()
(或其他一些非操作函数)的函数,直到它不抛出异常您可以实现的最终解决方案是在 WebElement 周围使用装饰器模式。这意味着您将需要创建自己的
FieldDecorator
装饰器,然后在初始化您的装饰器时使用该装饰器WebElements
。装饰的 webelement 将有一个 exists() 函数,它基本上是一个 try/catch aroundNoSuchElementExceptions
。
如果您对这些解决方案中的任何一个感到困惑,我可以为它们提供代码,但我认为了解WebElementWait
页面对象如何真正工作(通过实现您选择的解决方案)是非常好的做法,所以我现在不会发布它。
于 2013-11-12T22:36:33.960 回答