Java Selenium с Angular 5

Я пытаюсь работать с Selenium на Java с веб-сайтом на основе Angular 5. Selenium не поддерживает его напрямую, но JavascriptExecutor может помочь в проверке завершения загрузки компонентов страницы.

Проблема в том, что я не знаю, как реализовать JavaScript для проверки этого.

Я использую:

return window.getAngularTestability === undefined

чтобы проверить, что Angular 5 существует на текущей странице, но следующая часть реализации для меня загадка.

Я знаю, что мне нужно как-то использовать return window.getAngularTestability.

Можете ли вы обновить вопрос с помощью как, который вы используете сейчас return window.getAngularTestability === undefined, и насколько по-другому вы этого хотите?

DebanjanB 25.04.2018 14:15

Возможный дубликат Как использовать JavaScript с Selenium WebDriver Java

JeffC 25.04.2018 14:49

@JeffC это не имеет отношения к моему вопросу, а не дубликату проблемы, которую вы связали. спасибо за ваш вклад

Leon Proskurov 01.05.2018 09:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
983
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете создать общий java-метод для запуска любого javascript в вашем Java-коде. См. Ниже блок кода: -

 public void executeJavascript(String script) {
        ((JavascriptExecutor) driver).executeScript(script);
    }

Вы можете передать операторы javascript return как параметры этому методу.

Ответ принят как подходящий

Я нашел ответ после долгих исследований и поиска в Интернете.

Решение не мое, поэтому я не заслуживаю похвалы.

ExpectedCondition<Boolean> expectation = driver -> ((JavascriptExecutor) driver).executeAsyncScript(
            "var callback = arguments[arguments.length - 1];" +
                    "if (document.readyState !== 'complete') {" +
                    "  callback('document not ready');" +
                    "} else {" +
                    "  try {" +
                    "    var testabilities = window.getAllAngularTestabilities();" +
                    "    var count = testabilities.length;" +
                    "    var decrement = function() {" +
                    "      count--;" +
                    "      if (count === 0) {" +
                    "        callback('complete');" +
                    "      }" +
                    "    };" +
                    "    testabilities.forEach(function(testability) {" +
                    "      testability.whenStable(decrement);" +
                    "    });" +
                    "  } catch (err) {" +
                    "    callback(err.message);" +
                    "  }" +
                    "}"
    ).toString().equals("complete");
    try {
        WebDriverWait wait = new WebDriverWait(webDriver(), 15);
        wait.until(expectation);
    } catch (Throwable error) {
        new Exception("Timeout waiting for Page Load Request to complete.");
    }

Если решение не ваше, вы должны хотя бы указать, где вы его взяли, чтобы отдать им должное.

JeffC 01.05.2018 14:56

К сожалению, это была поздняя ночь и долгое исследование, поэтому я не могу найти его сейчас.

Leon Proskurov 01.05.2018 17:09

Скорее всего это источник: stackoverflow.com/a/49410819

Radu Damian 07.03.2021 03:38

Другие вопросы по теме