等待多个元素成为不可见的Selenium Java

时间:2017-03-16 07:09:34

标签: java selenium selenium-webdriver

我正在使用此代码检查隐身:

WebDriverWait wait = new WebDriverWait(driver,40);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(<some xpath>)));

如果只有 一个 元素对应于网页中的xpath,则此功能非常有效。

我在网页中有 ,我正在尝试编写脚本,我需要selenium来等待这三个。

注意:我没有使用绝对xpath。

1 个答案:

答案 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;
        }
    });
}