Есть ли способ с python-selenium, чтобы дождаться загрузки всех элементов страницы?

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

В конкретном примере есть страница, я нажимаю на какую-то кнопку, а затем мне нужно подождать, пока я не нажму на кнопку "Далее". Тем не менее, эта кнопка "Далее" доступна, выбирается и кликается ВСЕ ВРЕМЯ. Итак, как проверить селеном это "состояние" (?) Страницы?

Как напоминание: это вопрос о селене, а не о качестве рассматриваемой веб-страницы....

3 ответа

Так как ваш вопрос о том, есть ли способ с python-selenium, чтобы ждать, пока все элементы страницы загрузятся, Ответ - Нет.

Альтернативный подход:

По сути, вы можете написать строку кода (или реализовать ее через функцию), чтобы проверить наличие 'document.readyState' == "complete" следующее:

self.driver.execute_script("return document.readyState").equals("complete"))

Но у этого подхода есть недостаток: он не учитывает JavaScript / AJAX Calls должен быть завершен.

Почему бы и нет:

Написание вышеупомянутой строки, чтобы ждать Page Loading по умолчанию реализовано через Selenium, Так что переписать тоже самое overhead, Клиент (т.е. веб-браузер) никогда не вернет элемент управления обратно экземпляру WebDriver до тех пор, пока 'document.readyState' равно "complete", Как только это условие выполнено, Selenium выполняет следующую строку кода.

Стоит отметить, что хотя Клиент (т.е. веб-браузер) может вернуть элемент управления обратно экземпляру WebDriver один раз 'document.readyState' equal to "complete" достигается, это не гарантирует, что все веб-элементы на новом HTML DOM являются present, visible, interactable а также clickable,

Итак, согласно нашему требованию, если следующий WebElement с которым приходится взаимодействовать не interactable тем временем 'document.readyState' equal to "complete" достигается, вы должны побудить WebDriverWait с соответствием expected_conditions по отношению к человеку WebElement, Вот несколько наиболее используемых expected_conditions:

  • element_to_be_clickable(locator)
  • presence_of_element_located(locator)
  • visibility_of(element)

Вот ссылка на обсуждение 'document.readyState' == "complete"

Надежно определить, была ли страница полностью загружена, может быть непросто. Нет никакого способа узнать, все ли элементы были загружены именно так. Вы должны определить несколько "опорных" точек на каждой странице, чтобы, насколько вам известно, если эти элементы были загружены, было бы справедливо предположить, что вся страница была загружена. Обычно это включает в себя комбинацию тестов. Например, вы можете определить, что если приведенная ниже комбинация тестов пройдёт, страница считается загруженной:

  • JavaScript document.readyState === 'complete'
  • "Якорные" элементы
  • Все виды "прядильщиков", если они существуют, исчезли.

Есть то, что называется document.readyState которую вы можете получить, выполнив скрипт JavaScript через Selenium. Это не работает для динамически загружаемого контента. Возвращает одно из этих трех состояний:

Загрузка Документ все еще загружается, нет доступных CSS или других ресурсов.

Интерактивный Документ загружен, CSS или другие ресурсы недоступны

Завершено И документ, и CSS / другие ресурсы загружены

Вы ищете хотя бы Интерактивный. Вы можете получить состояние, позвонив execute_script:

driver.execute_script("return document.readyState")
Другие вопросы по тегам