首页 > 解决方案 > 如果使用 FindBy 注释,Selenium 检查元素是否存在

问题描述

尝试使用@FindBy注释我的感觉是没有完美的方法来检查元素的存在。

这里这里有类似的讨论,但我只看到解决方法,没有类似的

@FindBy (id = "abc")
private WebElement TestElement;

if (TestElement.isPresent) {...};

我找到了解决方案@FindBys,但是这样我必须@FindBys为每个要检查 DOM 中存在的元素实现一个附加功能?不是很好。

每个使用ExpectedConditions.presenceOf...或任何使用的替代解决方案都FindElement需要定位器作为参数而不是 WebElement,对吗?

ExpectedConditions.elementToBeClickable(WebElement)当然,我可以使用例如在 try/catch中构建变通方法并引发org.junit.jupiter.api.Assertions.fail,但这不是真正的 DOM 检查。

对我来说,我似乎更灵活地使用By页面对象的经典定义(例如private By searchInput = By.xpath("\\input[@class='input_search']");)而不是使用@FindBy. 使用@FindBy 我总是处理 WebElement 本身,之前没有机会检查存在,对吧?

使用 DOM 检查页面对象上下文中元素的 DOM 存在的最佳实践解决方案是什么@FindBy?或者我应该留下By来以确保安全。

标签: seleniumfindby

解决方案


这可能不是最好的解决方案,但您可以使用 findBy 并返回一个列表:

List<WebElement> TestElement = driver.findElements(By.id(...));

并每次检查列表 elelement 的大小(在 while 循环中),看它是否不为空。


推荐阅读