Тип Function не является универсальным; он не может быть параметризован с помощью аргументов <WebDriver, WebElement>
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"));
}
});
Попытался поработать над реализацией Fluent wait с Selenium 3.141.59, но получил указанную ошибку времени компиляции. В основном меня интересует "новый метод Function"
Тип FluentWait не является универсальным; это не может быть параметризовано с аргументами
Я не верю, что это дубликат. Вопрос может звучать одинаково, но ни одно из решений не сработало для меня.
Показана ошибка:
The type Function is not generic; it cannot be parameterized with arguments <WebDriver, WebElement>
1 ответ
Что вы на самом деле пытаетесь сделать с этим явным ожиданием?
Вы можете использовать предварительно определенное ожидаемое условие:
wait.until(ExpectedConditions.presenceOfElementLocated(By.name("q")));
Причина, по которой у вас возникают проблемы, заключается в том, что вы пытаетесь создать новый экземпляр функции, который является интерфейсом, вы не можете этого сделать. Вы можете рефакторировать вышеупомянутое Expected Condition в:
wait.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
return driver.findElement(By.name("q"));
}
});
Это выглядит довольно близко к вашей попытке, но это не очень читабельно или многоразово. Я бы посоветовал вам создать свой собственный вспомогательный класс с вашими собственными ожидаемыми условиями, которые выглядят как стандартный класс Expected Conditions, предоставляемый Selenium.