等待多个元素变得不可见 Selenium Java

Posted

技术标签:

【中文标题】等待多个元素变得不可见 Selenium Java【英文标题】:Wait for multiple elements to become invisible Selenium Java 【发布时间】:2017-08-07 05:38:36 【问题描述】:

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

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

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

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

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

【问题讨论】:

你有 3 个具有相同 xpath 的 webelement 吗? 是的,问题不是很清楚吗? 【参考方案1】:

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;
        
    );

【讨论】:

看起来可能有效,但调试时遇到问题。请修复“没有类型参数”和“方法没有从超类覆盖”错误 在我的机器上编译得很好。你使用的是哪个版本的 java 和 selenium? Java 1.8、Selenium 3.0.1 好的,我刚刚导入了 ExpectedCondition。我的坏 花了我一段时间来测试它。工作得很好谢谢。虽然我需要在加载网页之前让您的代码正常工作。

以上是关于等待多个元素变得不可见 Selenium Java的主要内容,如果未能解决你的问题,请参考以下文章

java selenium怎么等待元素出现并设置一定时间

python selenium 三种等待方式详解

如何在 Selenium 4 中使用 ExpectedConditions?

selenium05-等待web元素的出现

Selenium + Java 错误监听器 ext.js

Selenium3自动化测试25强制等待&隐式等待