java - Webdriver : ExpectedConditions. invisibilityOf 不起作用。总是抛出异常

标签 java selenium-webdriver

我正在使用 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/

相关文章:

java - 父类(super class)方法和接口(interface)默认方法冲突解决

java - JAVA中类是对象吗?

java - 我们可以在代码中不使用 Webdriver 接口(interface)的情况下运行 selenium 测试吗?

java - Selenium:- 无法在文本框中写入

java - 使用 selenium java 单击 Facebook 'share' 按钮

用于处理具有多个 XML 模式的消息的 Java 模式

java - 为什么我不能在 Java 中用 $ 分割字符串

java - 如何处理 - 在缓存中找不到元素 - 也许页面自从在 Selenium WebDriver Java 测试中查找以来已经发生了变化

java - 无法指定 JMS 队列的目标,因此可能会得到

python - 访问第一个元素后无法通过 xpaths 循环访问剩余元素 - Webscraping Selenium Python