为什么我的等待方法不等到30秒?

时间:2017-06-05 14:05:06

标签: java selenium selenium-webdriver webdriver

为什么我的等待方法不等到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);
}

1 个答案:

答案 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