java - FluentWait 类型中的直到(Function<? super WebDriver,V>) 方法不适用于参数 (boolean, ExpectedCondition<WebElement>)

标签 java selenium selenium-webdriver webdriver webdriverwait

我得到了两个条件,根据这些条件,网络驱动程序需要等待其中一个条件满足,然后才能继续执行。为此,我将显式等待与 ExpectedConditions.or 一起使用。

我尝试使用以下代码:

new WebDriverWait(driver.getDriver(),30).until(
    ExpectedConditions.or(
        ExpectedConditions.jsReturnsValue("return document.ReadyState")).equals("complete"),    
        ExpectedConditions.visibilityOfElementLocated(driver.findElement(By.Id("name"))
    )
);

我收到错误:

The method until(Function<? super WebDriver,V>) in the type FluentWait<WebDriver> is not applicable for the arguments (boolean, ExpectedCondition<WebElement>)

请注意,我使用的是 Guava 23.0,它已作为依赖项添加到我的 pom.xml 中

最佳答案

ExpectedConditions.or 接收 ExpectedCondition 作为参数。当您将 ExpectedConditions.jsReturnsValue 的结果与字符串进行比较时,您会将 all 表达式更改为 boolean

您可以创建自定义ExpectedCondition来扭曲它

public static ExpectedCondition<Object> customeJsReturnsValue(final String javaScript) {
    return new ExpectedCondition<Object>() {
        @Override
        public Object apply(WebDriver driver) {
            return ExpectedConditions.jsReturnsValue("return Spotfire.Busy.idle()")).equals("true")
        }
    }
}

用途:

new WebDriverWait(driver.getDriver(),30).until(
    ExpectedConditions.or(
        customeJsReturnsValue("return document.ReadyState")).equals("complete"),
        ExpectedConditions.visibilityOfElementLocated(driver.findElement(By.Id("name"))
    )
);

关于java - FluentWait 类型中的直到(Function<? super WebDriver,V>) 方法不适用于参数 (boolean, ExpectedCondition<WebElement>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58114356/

相关文章:

java - Selenium 重复元素标记为 ==$0

python - 使用 selenium python 截取整个页面截图

google-chrome - Selenium - codeception - Chrome 问题

java - 静态同步方法中的 ConcurrentModificationError

java - Dozer:将单个字段映射到 Set

vba - 无法摆脱脚本中的硬编码延迟

c# - 如何在 Selenium 中查找页面上的多个元素?

javascript - Protractor-加载主页后无法定位元素

java - 如何在 Java(和其他)中确定 "FI"的连字

java - 使用函数输入 Hibernate 参数