如果使用FindBy注释,Selenium将检查元素是否存在



尝试使用@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循环中(以查看它是否为空。

最新更新