Пользовательское ожидание selenium для приложения angular7

#java #selenium #angular7

#java #selenium #angular7

Вопрос:

Мы автоматизируем приложение Angular 7 с помощью Selenium Webdriver. Мне нужны пользовательские ожидания с использованием Javascript или jQuery, которые будут ждать рендеринга страницы и ждать завершения ответа $ http.

Я пробовал явные ожидания, но они не работают, поскольку элементы загружаются на страницу, но все равно загружаются, и попробовал ng Webdriver, но это также не удается.

Комментарии:

1. Вы пробовали ждать загрузки элемента, указывающего, когда страница полностью загружена? IE: если вам нужно взаимодействовать с кнопкой, попробуйте дождаться этой кнопки.

2. На самом деле я пробовал, проблема с приложениями angular заключается в том, что страница загружается, но все равно отображается знак загрузки, пока не будет получен соответствующий ответ

3. Вы пробовали ждать, пока загрузочный счетчик не станет видимым?

4. Это то, что я ищу, когда страница получает соответствующий ответ (может быть, вызовы $ https), страница загружается, но я не уверен, как это проверить, используя java и selenium. Следовательно, ищем подходящие решения для этого для приложений angular 5 и angular 7. Я пробовал ngwebdriver, но он не работает, поскольку он несовместим с angular 2, и у нас есть собственный фреймворк, созданный нами, и транспортир не является возможным вариантом, поскольку у нас нет подходящего времени для повышения квалификации команды до javascript protractor.

Ответ №1:

Это может быть полезно для вас. Перед доступом к любому элементу проверьте, выполнен ли Jquery / Angular или нет.

   public static boolean isJQueryDone() {
            Object jsResponse = tryJavascript("return jQuery.active;");
            if (jsResponse instanceof Long) {
                return ((Long) jsResponse) == 0;
            } else if (jsResponse instanceof String) {
                String response = (String) jsResponse;
                return (response.startsWith("{"hCode"") || response.isEmpty());
            } else {
                return true;
            }
        }

        public static boolean isAngularDone() {
            Object jsResponse = tryJavascript("return window.getAllAngularTestabilities().filter(x=>!x.isStable()).length;");
            if (jsResponse instanceof Long) {
                return ((Long) jsResponse) == 0;
            } else if (jsResponse instanceof String) {
                String response = (String) jsResponse;
                return response.isEmpty();
            } else {
                return true;
            }
        }
        public static synchronized Object tryJavascript(String script, Object... args) {
            try {
                return execJavascript(script, args);
            } catch (Exception ignore) {
                return "";
            }
        }
  

Комментарии:

1. execJavascript (script, args); выдает ошибку, что я могу использовать для выполнения сценариев

2. Если в вашем приложении есть функции jQuery / Angular, используйте методы isJQueryDone() / isAngularDone(), чтобы проверить, выполнена ли функция jQuery / Angular или нет. Методы JQueryDone() / isAngularDone() внутренне вызывают метод tryJavascript() нет необходимости предоставлять какие-либо сценарии / аргументы, потому что для него уже заданы статические значения. Создайте метод, чтобы проверить, выполнен ли jQuery / Angular или нет, как только это будет сделано, нажмите на ваше обязательное поле.