在尝试使用FluentWait .until方法时,在等待类型不适用时抛出的方法

时间:2018-02-15 05:48:09

标签: java selenium selenium-webdriver

我正在尝试在Selenium Java自动化中使用FluentWait。

当我使用until方法时,我收到以下错误 方法直到(Wait类型中的函数不适用于参数(new Function(){}

public WebElement fluentWaitForElement() {
    Wait<WebDriver> fluentWait = new FluentWait<WebDriver>(driver)  
        .withTimeout(30, TimeUnit.SECONDS)  
        .pollingEvery(5, TimeUnit.SECONDS) 
        .ignoring(NoSuchElementException.class);
    WebElement waitingElement = fluentWait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
    return driver.findElement(By.id("ButtonID"));
    }
   }
 );
}

我也在另一篇文章中试过这个解决方案。但是,我仍然得到同样的错误

fluentWaitwait.until(new Function<WebDriver, Boolean>() {
    @Override public Boolean apply(WebDriver driver) {
        return driver.findElement(By.ID("ButtonID"));
        }
    }
);

有谁知道如何解决这个问题?感谢

1 个答案:

答案 0 :(得分:0)

你真的不必使用new Function<WebDriver, Boolean>()

您可以使用ExpectedCondtion<T>或使用extends Function<WebDriver, T>;的{​​{1}}课程。

预期条件:

lambda expression

Lambda Expression:

.until(new ExpectedCondition<Boolean>() {

            @Override
            public Boolean apply(WebDriver driver) {
                //return Boolean value
                return null;
            }

        });

附加&#34;缺陷&#34;在你的代码中是:

.until(driver -> {
    return null; 
//return any type parameter you want. Lambda Expression takes care of what type you return
}

Wait<WebDriver> fluentWait = new FluentWait<WebDriver>(driver) .withTimeout(30, TimeUnit.SECONDS) .pollingEvery(5, TimeUnit.SECONDS) .ignoring(NoSuchElementException.class); 无法使用Wait进行参数化,因为它不是通用的。将其更改为WebDriver