函数类型不是通用的;不能使用参数<webdriver,webelement =“”>

时间:2019-05-29 11:45:38

标签: java selenium-webdriver fluentwait

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
    .withTimeout(Duration.ofSeconds(30))
    .pollingEvery(Duration.ofMillis(500))
    .ignoring(NoSuchElementException.class);

WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
    public WebElement apply(WebDriver driver) {
        return driver.findElement(By.name("q"));
    }
});

试图使用Selenium 3.141.59进行Fluent等待实现,但遇到指定的编译时错误。我主要关注“新功能方法”

The type FluentWait is not generic; it cannot be parameterized with arguments <WebDriver> error for FluentWait Class through Selenium and Java

我不认为这是重复的。问题听起来似乎相同,但没有一种解决方案对我有用。

显示的错误:

The type Function is not generic; it cannot be parameterized with arguments <WebDriver, WebElement>

1 个答案:

答案 0 :(得分:1)

此显式等待实际上是在做什么?

您可以使用预定义的预期条件:

wait.until(ExpectedConditions.presenceOfElementLocated(By.name("q")));

出现问题的原因是您试图创建作为接口的Function的新实例,但您不能这样做。您可以将上述ExpectedCondition重构为:

wait.until(new ExpectedCondition<WebElement>() {
    @Override
    public WebElement apply(WebDriver driver) {
        return driver.findElement(By.name("q"));
    }
});

它看起来很接近您的尝试,但是它不是很可读或可重用。我建议您按照自己的预期条件(类似于标准ExpectedConditions class supplied by Selenium)创建自己的帮助器类。