Selenium (Java) ожидает загрузки JavaScript / Vue / Angular - PullRequest
0 голосов
/ 12 марта 2019

Я пишу инструмент автоматизации для веб-сайта.Поэтому я использую Selenium в Java.В реальных целях автоматизации я в основном использую JavaScript через JavascriptExecutor.В большинстве случаев все работает нормально, но иногда происходит сбой (например, 1 из 10 раз).У меня сложилось впечатление, что тогда код был слишком быстрым.Я использую неявное ожидание и явное ожидание от класса WebdriverWait.Я думаю, что это просто ожидание dom или элементов внутри, но они не ждут, пока все сценарии не будут выполнены.Поэтому мне нужна функция или фрагмент.Как уже упоминалось, сайт использует vue и angular.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вы можете добавить явное ожидание, которое будет ждать, пока angular завершит обработку любых ожидающих запросов:

public static ExpectedCondition angularHasFinishedProcessing() {
    return new ExpectedCondition() {
        @Override
        public Boolean apply(WebDriver driver) {
            JavascriptExecutor jsexec = ((JavascriptExecutor) driver)
            String result = jsexec.executeScript("return (window.angular != null) && (angular.element(document).injector() != null) && (angular.element(document).injector().get('$http').pendingRequests.length === 0)")
            return Boolean.valueOf(result);
        }
    };
}

Чтобы использовать его, вы должны сделать:

WebDriverWait wait = new WebDriverWait(driver, 15, 100);
wait.until(angularHasFinishedProcessing());

Это используется дляУдалите много ошибок в автоматизации Angular для меня.

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

0 голосов
/ 12 марта 2019

В вашем случае есть вероятность, что ваш скрипт потерпел неудачу при переходе на другую HTML-страницу, нажав ссылку или кнопку.Если ваше приложение дает сбой / сбой в этих сценариях, включите время загрузки страницы и при неявном ожидании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...