我正在使用 ExpectedConditions.invisibilityOf
来检查其中一个元素的不可见性,但每次它都会抛出超时异常:
wait.until(ExpectedConditions.invisibilityOf(elementTobeInvisible));
错误消息:
org.openqa.selenium.TimeoutException: Expected condition failed: waiting for invisibility of Proxy element for: DefaultElementLocator 'By.xpath: //button[text()='button text']' (tried for 30 second(s) with 500 MILLISECONDS interval)
我使用 element.isDisplayed()
检查了同一元素的可见性,它正确返回“false”。
最近我从2.53.0升级了selenium
- 网络驱动程序:3.7.1 或 3.6.0
- Chrome:62.0.3202.94(官方版本)(64 位)
- 操作系统:Windows 7
最佳答案
调查了这个问题,看起来是错误的实现:
对于版本2.53.0和3.7.0,隐形方法存在实现差异。
2.53实现:
public static ExpectedCondition<Boolean> invisibilityOfAllElements(final List<WebElement> elements) {
return new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver webDriver) {
Iterator var2 = elements.iterator();
while(var2.hasNext()) {
WebElement element = (WebElement)var2.next();
try {
if (element.isDisplayed()) {
return false;
}
} catch (Exception var5) {
;
}
}
return true;
}
public String toString() {
return "invisibility of all elements " + elements;
}
};
}
观察:查看“catch (Exception var5)”行。在这里,我们将所有内容捕获为异常
用于3.7.1实现
public static ExpectedCondition<Boolean> invisibilityOfAllElements(final List<WebElement> elements) {
return new ExpectedCondition() {
public Boolean apply(WebDriver webDriver) {
return Boolean.valueOf(elements.stream().allMatch((x$0) -> {
return ExpectedConditions.isInvisible(x$0);
}));
}
public String toString() {
return "invisibility of all elements " + elements;
}
};
}
private static boolean isInvisible(WebElement element) {
try {
return !element.isDisplayed();
} catch (StaleElementReferenceException var2) {
return true;
}
}
观察:我们只捕获StaleElementReferenceException,因此在使用该方法时会抛出TimeoutException,但未捕获
关于java - Webdriver : ExpectedConditions. invisibilityOf 不起作用。总是抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47346518/