[英]Method until(Function) in the type FluentWait is not applicable for the arguments
[英]The method until(Function<? super WebDriver,V>) in the type FluentWait is not applicable for the arguments (boolean, ExpectedCondition<WebElement>)
我已经获得了两个条件,基于这些条件,webdriver 在继续执行之前需要等待其中一个条件满足。 为此,我将 Explicit wait 与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
s 作为参数。 当您将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"))
)
);
jsReturnsValue()
的ExpectedConditions返回一个Object并定义为:
public static ExpectedCondition<java.lang.Object> jsReturnsValue(java.lang.String javaScript)
An expectation for String value from javascript
Parameters:
javaScript - as executable js line
Returns:
true once js return string
visibilityOfElementLocated()
的ExpectedConditions返回WebElement并定义为:
public static ExpectedCondition<WebElement> visibilityOfElementLocated(By locator)
An expectation for checking that an element is present on the DOM of a page and visible. Visibility means that the element is not only displayed but also has a height and width that is greater than 0.
Parameters:
locator - used to find the element
Returns:
the WebElement once it is located and visible
此错误消息...
The method until(Function<? super WebDriver,V>) in the type FluentWait<WebDriver> is not applicable for the arguments (boolean, ExpectedCondition<WebElement>)
...暗示until()
不适用于多种返回类型boolean
和WebElement
。
在您的用例中,
jsReturnsValue()
返回一个Object 。visibilityOfElementLocated()
返回一个WebElement 。如果您的用例与某个WebElement的可见性有关,您可以放心地忽略对“document.readyState”等于“完成”的担忧,因为这将是一种开销。 您可以在Selenium IE WebDriver only works while debugging中找到相关讨论。
但是,要将until()
用于visibilityOfElementLocated()
用于类似类型数据类型的多个元素,您可以按照以下示例进行操作:
等待By.xpath("//span[@id='id1']")
或By.xpath("//span[@id='id2']")
中的任何一个元素如下:
new WebDriverWait(driver, 10).until(ExpectedConditions.or( ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@id='id1']")), ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@id='id2']")) ));
您可以在中找到一些相关的详细讨论
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.