Как сделать тип возвращаемого метода как Callable <Boolean> - PullRequest
0 голосов
/ 01 августа 2020

В одном из моих методов:

public void pageIsReady()

реализация:

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

Здесь метод isPageLoaded() возвращает логическое значение, но я хочу, чтобы он возвращал Callable логического значения, потому что метод until() в Awaitility ожидает Callable<Boolean>.

Пожалуйста, помогите мне сделать метод isPageLoaded() return 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;
}

Ответы [ 2 ]

0 голосов
/ 01 августа 2020

Самый простой способ сделать это - использовать ссылку на метод Callable<Boolean> isPageLoaded = this::isPageLoaded или использовать ее явно как лямбда Callable<Boolean> isPageLoaded = () -> isPageLoaded();

Это будет выглядеть как

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

Другой способ было бы определить ваш метод как возвращающий Callable<Boolean> с последующим использованием лямбда-синтаксиса () -> {} для записи вызываемого объекта.

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;
    };
}

Лямбда-выражения и ссылки на методы могут быть довольно мощными инструментами.

0 голосов
/ 01 августа 2020

Просто определите свой isPageLoaded() метод следующим образом:

protected Callable<Boolean> isPageLoaded() {
    //code..
}
...