我正在使用此代码检查隐身:
WebDriverWait wait = new WebDriverWait(driver,40);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(<some xpath>)));
如果只有 一个 元素对应于网页中的xpath,则此功能非常有效。
我在网页中有 三 ,我正在尝试编写脚本,我需要selenium来等待这三个。
注意:我没有使用绝对xpath。
答案 0 :(得分:3)
ExpectedConditions.invisibilityOfElementLocated
检查第一个元素。在您的情况下,您可以编写自己的ExpectedCondition
实现,您必须检查是否为找到的每个元素显示了对象。
例如(未测试):
private static void waitTillAllVisible(WebDriverWait wait, By locator) {
wait.until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
Iterator<WebElement> eleIterator = driver.findElements(locator).iterator();
while (eleIterator.hasNext()) {
boolean displayed = false;
try {
displayed = eleIterator.next().isDisplayed();
}
catch (NoSuchElementException | StaleElementReferenceException e) {
// 'No such element' or 'Stale' means element is not available on the page
displayed = false;
}
if (displayed) {
// return false even if one of them is displayed.
return false;
}
}
// this means all are not displayed/invisible
return true;
}
});
}