【发布时间】:2020-02-18 14:09:07
【问题描述】:
尝试使用@FindBy 注释我的感觉是没有完美的方法来检查元素的存在。
here 或 here 也有类似的讨论,但我只看到解决方法,没有类似
@FindBy (id = "abc")
private WebElement TestElement;
if (TestElement.isPresent) {...};
我找到了@FindBys 的解决方案,但是这样我必须为每个要检查DOM 中存在的元素实现一个额外的@FindBys?不是很好。
每个使用 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 本身,之前没有机会检查存在,对吧?
使用@FindBy 检查页面对象上下文中元素的DOM 存在的最佳实践解决方案是什么?还是为了安全起见,我应该留在By。
【问题讨论】:
-
我不知道为什么
ExpectedConditions.presenceOf...不起作用。无论如何,您都需要一个定位器来检查您要检查的元素。我知道我遗漏了一些东西,但问题并不清楚。