Дождитесь загрузки страницы с помощью HtmlUnitDriver - PullRequest
0 голосов
/ 07 мая 2018

У меня есть несколько тестов, которые работают с Selenium и HtmlUnitDriver. Иногда, когда я запускаю их и хочу нажать на элемент или прочитать текст, элементы не могут быть найдены. Каждый раз, когда выдается исключение, я сохраняю код страницы для целей отладки. Но когда я проверяю код, там есть элемент, и когда я снова запускаю тест, все работает нормально. Я предполагаю, что страница была загружена не полностью, когда я пытаюсь получить доступ к элементу. Поэтому я хотел бы подождать, пока Selenium завершит загрузку страницы, прежде чем я попытаюсь получить доступ к элементам.

Мне нравятся два способа добиться этого:

  1. Выполните Javascript (например, window.initComplete) и дождитесь, пока результат будет истинным. Проблема: в Selenium у меня должен быть экземпляр JavascriptExecuter, но HtmlUnitDriver не является производным от этого класса, и я не могу переключиться на FirefoxDriver (который реализует интерфейс JavascriptExecuter), потому что мы запускаем тесты без головы.

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

Есть предложения о том, как подойти к проблеме?

1 Ответ

0 голосов
/ 07 мая 2018

Вы можете создать пользовательское ожидаемое условие:

public static ExpectedCondition<Boolean> waitForLoad() {
    return new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver driver) {
            return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
        }
    };
}
...