#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 или нет, как только это будет сделано, нажмите на ваше обязательное поле.