为什么我的等待方法不等到30秒?
我的方法应该在30秒后超时,如果方法找不到元素,当前返回true或false而没有任何超时,是否有任何想法?
public boolean WaitUntilWebElementIsVisiblePredicate(WebElement element) {
FluentWait<WebElement> wait = new FluentWait<WebElement>(element)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(100, TimeUnit.MILLISECONDS)
.ignoring(NoSuchFieldException.class);
Function<WebElement, Boolean> f = new Function<WebElement, Boolean>() {
@Override
public Boolean apply(WebElement element) {
if (!element.isDisplayed()) {
System.out.println("Method failed: WaitUntilWebElementIsVisiblepPredicate, using locator: " + element.toString());
return false;
}
System.out.println("Element visible, using method: WaitUntilWebElementIsVisiblepPredicate, Locator: " + element.toString());
return true;
}
};
return wait.until(f);
}
答案 0 :(得分:0)
一旦apply(WebElement element)
中的条件返回false,代码就会等待pollingEvery
中定义的时间。然后,将实际开始时间(由FluentWait开始捕获)与当前时间进行比较。如果wait
开始时间与当前时间的差异小于withTimeout(30, TimeUnit.SECONDS)
中设置的时间,则f
或{{timeout expires
再次执行函数condition becomes true
1}}。
所以IMO,如果它早于超时时间返回,则apply(WebElement element)
似乎已返回true
。
查看方法签名here。