Я пытаюсь работать с Selenium на Java с веб-сайтом на основе Angular 5.
Selenium не поддерживает его напрямую, но JavascriptExecutor может помочь в проверке завершения загрузки компонентов страницы.
Проблема в том, что я не знаю, как реализовать JavaScript для проверки этого.
Я использую:
return window.getAngularTestability === undefined
чтобы проверить, что Angular 5 существует на текущей странице, но следующая часть реализации для меня загадка.
Я знаю, что мне нужно как-то использовать return window.getAngularTestability.
Возможный дубликат Как использовать JavaScript с Selenium WebDriver Java
@JeffC это не имеет отношения к моему вопросу, а не дубликату проблемы, которую вы связали. спасибо за ваш вклад




Вы можете создать общий 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.");
}
Если решение не ваше, вы должны хотя бы указать, где вы его взяли, чтобы отдать им должное.
К сожалению, это была поздняя ночь и долгое исследование, поэтому я не могу найти его сейчас.
Скорее всего это источник: stackoverflow.com/a/49410819
Можете ли вы обновить вопрос с помощью как, который вы используете сейчас
return window.getAngularTestability === undefined, и насколько по-другому вы этого хотите?