我得到了两个条件,根据这些条件,网络驱动程序需要等待其中一个条件满足,然后才能继续执行。为此,我将显式等待与 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/