- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们目前有一个使用页面对象模型的大型 selenium junit 项目。我们使用 @FindBy
注释来声明我们的 WebElements。现在当我们运行测试时,我们随机得到 NoSuchelementException
,这意味着页面可能没有完成加载。我们不想使用隐式等待,因为那不会提供完整的解决方案(元素可能存在于 DOM 中但尚不可交互)。显式等待可能会解决此问题。但是,我们如何在这个页面模型架构中使用它而不必去掉 @FindBy
注解呢?以前可能有人问过这个问题,但我似乎还没有找到任何解决方案。
最佳答案
我看到有 4 种方法可以做到这一点。它们都不是有趣的,但是,随着您的进行,它们会变得更好(并且编程更复杂)
将您的选择器复制到显式等待中
输入您的 @FindBy
在 List<WebElement>
上并等待大小不为 0。
创建一个接受 WebElement 并调用 isDisplayed()
的函数(或其他一些非操作函数)直到它不抛出异常
您可以实现的最终解决方案是围绕 WebElement 使用装饰器模式。这意味着您需要创建自己的 FieldDecorator
,然后在初始化装饰器时使用该装饰器 WebElements
.装饰的 webelement 将有一个 exists() 函数,它基本上是一个围绕 NoSuchElementExceptions
的 try/catch。 .
如果您对这些解决方案中的任何一个感到困惑,我可以为它们提供代码,但我认为学习如何做是一个很好的实践 WebElementWait
和页面对象确实有效(通过实现您选择的解决方案),所以我现在不会发布它。
关于java - 页面对象模型中的 WebDriver 显式等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940247/
我是一名优秀的程序员,十分优秀!