我正在尝试使用WebDriver的fluentAPI,并且与可用选项略有混淆。我想等待元素变得可见。我不认为有很多方法可以做到这一点,但我想具体理解以下两种方法之间的区别:
(1)new FluentWait<WebElement>(webElement).
withTimeout(timeoutSeconds, TimeUnit.SECONDS).
pollingEvery(pollingTime, TimeUnit.MILLISECONDS).
untilwait.until(ExpectedConditions.visibilityOf(element));
(2) public void waitForWebElementFluently(WebElement webElement) {
new FluentWait<WebElement>(webElement).
withTimeout(timeoutSeconds, TimeUnit.SECONDS).
pollingEvery(pollingTime, TimeUnit.MILLISECONDS).
until(new Predicate<WebElement>() {
@Override
public boolean apply(WebElement element) {
return element.isDisplayed();
}
}
);
}
使用isDisplayed和visibilityOf?
之间有什么区别?答案 0 :(得分:8)
isDisplayed
:
是否显示此元素?此方法避免了必须解析元素的“样式”属性的问题。 Source
visibilityOf
期望检查已知在页面的DOM上存在的元素是否可见。可见性意味着元素不仅会显示,而且高度和宽度也会大于0。 Source
因此,可见性涵盖了正在显示的元素的条件。
答案 1 :(得分:0)
Amey已经说了最多的话,但是我想补充一点,第一种方法返回你在轮询可见的元素,第二种方法是返回布尔值。 无论如何,我建议使用第一个,因为它已经在处理陈旧,如果你看一下来源:
public static ExpectedCondition<WebElement> visibilityOfElementLocated(
final By locator) {
return new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
try {
return elementIfVisible(findElement(locator, driver));
} catch (StaleElementReferenceException e) {
return null;
}
}