我们目前有一个使用页面对象模型的大型selenium junit项目。我们使用@FindBy
注释来声明我们的WebElements。现在,当我们运行测试时,我们会随机获取NoSuchelementException
,这意味着页面可能没有完成加载。我们不想使用隐式等待,因为它不能提供完整的解决方案(一个元素可能存在于DOM但尚未可交互)。显式等待可能会解决此问题。但是,我们如何在此页面模型体系结构中使用它而不必删除@FindBy
注释?以前可能会问过这个问题,但我似乎还没有找到任何解决方案。
答案 0 :(得分:1)
我有4种方式可以看到你可以做到这一点。它们都不是很有趣,但是,随着你的进展,它们会变得更好(并且编程更复杂)
将您的选择器复制到显式等待
将@FindBy
放在List<WebElement>
上,等待大小不为0.
创建一个接受WebElement并调用isDisplayed()
(或其他一些非动作函数)的函数,直到它不会抛出异常
您可以实现的最终解决方案是在WebElement周围使用Decorator模式。这意味着您需要创建自己的FieldDecorator
,然后在初始化装饰的WebElements
时使用该装饰器。装饰的webelement将有一个exists()函数,它基本上是NoSuchElementExceptions
周围的try / catch。
如果您对这些解决方案感到困惑,我可以为他们提供代码,但我认为了解WebElementWait
和Page Objects如何真正起作用(通过实施您选择的解决方案)是非常好的做法,所以我现在没有发布。