0

在我的一种方法中:

public void pageIsReady()

实施是

Awaitility.await().atMost(5, TimeUnit.SECONDS).until(isPageLoaded());

在这里,isPageLoaded()方法返回布尔值,但我希望它返回布尔值 Callable,因为期望中的until()方法。AwaitilityCallable<Boolean>

请帮我让方法isPageLoaded()返回Callable<Boolean>

下面是isPageLoaded()方法的实现:

protected Boolean isPageLoaded() {
    String jsQuery = "function pageLoaded() "
            + "{var loadingStatus=(document.readyState=='complete');"
            + "return loadingStatus;};"
            + "return pageLoaded()";

    boolean isSuccess = false;
    try {
        isSuccess = (Boolean) evaluateJavascript(jsQuery);
    } catch (Exception exp) {
        exp.printStackTrace();
    }
    return isSuccess;
}
4

2 回答 2

1

最简单的方法是使用方法引用Callable<Boolean> isPageLoaded = this::isPageLoaded,或者将其显式用作 lambdaCallable<Boolean> isPageLoaded = () -> isPageLoaded();

这看起来像

Awaitility.await().atMost(5, TimeUnit.SECONDS).until(this::isPageLoaded);
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() -> isPageLoaded());

另一种方法是将您的方法定义为返回 aCallable<Boolean>然后使用 lambda 语法() -> {}编写可调用对象。

protected Callable<Boolean> isPageLoaded() {
    return () -> {
        String jsQuery = "function pageLoaded() "
            + "{var loadingStatus=(document.readyState=='complete');"
            + "return loadingStatus;};"
            + "return pageLoaded()";

        boolean isSuccess = false;
        try {
            isSuccess = (Boolean) evaluateJavascript(jsQuery);
        } catch (Exception exp) {
            exp.printStackTrace();
        }
        return isSuccess;
    };
}

Lambda 表达式和方法引用是非常强大的工具。

于 2020-08-01T08:36:11.820 回答
0

只需isPageLoaded()按如下方式定义您的方法:

protected Callable<Boolean> isPageLoaded() {
    //code..
}
于 2020-08-01T08:33:39.560 回答