尝试使用@FindBy
注释时,我的感觉是没有完美的方法来检查元素的存在。
这里或这里也有类似的讨论,但我只看到了变通办法,没有什么比更好的了
@FindBy (id = "abc")
private WebElement TestElement;
if (TestElement.isPresent) {...};
我找到了@FindBys
的解决方案,但通过这种方式,我必须为每个元素实现一个额外的@FindBys
,我将检查DOM中的存在性?不是很好。
每个使用ExpectedConditions.presenceOf...
或任何使用FindElement
的替代解决方案都需要一个定位器作为参数,而不是WebElement,对吗?
当然,我可以在try/catch中使用例如ExpectedConditions.elementToBeClickable(WebElement)
构建解决方案,并引发org.junit.jupiter.api.Assertions.fail
,但这不是真正的DOM检查。
对我来说,我似乎更灵活地使用页面对象的经典By
定义(例如private By searchInput = By.xpath("\input[@class='input_search']");
(,而不是使用@FindBy
。使用@FindBy,我总是处理WebElement本身,以前没有机会检查它的存在,对吧?
使用@FindBy
检查页面对象上下文中元素的DOM存在的最佳实践解决方案是什么?或者为了安全起见,我应该和By
呆在一起。
这可能不是最好的解决方案,但您可以使用findBy并返回列表:
List<WebElement> TestElement = driver.findElements(By.id(...));
并每次检查列表元素的大小(在while循环中(以查看它是否为空。