【发布时间】:2021-12-19 15:07:23
【问题描述】:
我发现将ExpectedConditions 作为方法中的参数传递给wait.until() 时遇到问题。 wait.until() 期望传入一个函数。我对 Java 比较陌生,希望能得到帮助。
违规代码:
public void waitUntil(WebElement element, long seconds, String errorMessage, ExpectedConditions expectedConditions) {
if (seconds == 0 || errorMessage.isEmpty()) throw new IllegalArgumentException();
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(seconds));
wait.withMessage(errorMessage);
// this throws a compiler error.
wait.until(expectedConditions);
}
wait.until() 期望传入一个函数,类似于 ExpectedConditions.urlToBe("http://www.test.com")。
我正在尝试创建一个可以在任何 ExpectedCondition (即 urlToBe、alertIsPresent 等)可以被传入的地方调用的方法。
谢谢。
【问题讨论】:
-
编译器错误说明了什么?
-
Required type: Function <? super org.openqa.selenium.WebDriver, V> Provided: ExpectedConditions reason: no instance(s) of type variable(s) V exist so that ExpectedConditions conforms to Function<? super WebDriver, V> -
如果把第4个参数改成:
ExpectedCondition<?> expectedConditions呢? -
> 应该是什么类型?
-
只需将其保留为
?即可。它被称为通配符:docs.oracle.com/javase/tutorial/java/generics/wildcards.html