selenium.common.exceptions.TimeoutException: Сообщение: Истекло время ожидания загрузки страницы с помощью IEDriverServer и Internet Explorer через Selenium

Учитывая этот код:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
# import org.openqa.selenium.Keys
import datetime
import time
import unittest

cap = DesiredCapabilities().INTERNETEXPLORER
cap['ignoreProtectedModeSettings'] = True
cap['IntroduceInstabilityByIgnoringProtectedModeSettings'] = True
cap['nativeEvents'] = True
cap['ignoreZoomSetting'] = True
cap['requireWindowFocus'] = True
cap['INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS'] = True
browser = webdriver.Ie(capabilities=cap, executable_path=r'C:\IEDriverServer_x64_3.150.1\IEDriverServer.exe')
browser.get("https://www.google.ro/?safe=active&ssui=on")
search_form = browser.find_element_by_xpath('/html[1]/body[1]/div[1]/div[1]/div[3]/div[1]/button[1]')
search_form.click()

Когда я запускаю его, при каждой попытке на любом веб-сайте возвращается эта ошибка:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: Timed out waiting for page to load.

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

Процесс застрял на

browser.get("https://www.google.ro/?safe=active&ssui=on")

как если бы страница не загрузилась должным образом.

Я использую драйвер селена python 3.8.0 IEDriverServer_x64_3.150.1


person Henry-G    schedule 25.07.2020    source источник


Ответы (1)


Это сообщение об ошибке ...

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: Timed out waiting for page to load.

... означает, что исполняемый двоичный файл IEDriverServer не смог инициировать / создать новый контекст просмотра, то есть сеанс просмотра Internet Explorer.


Согласно Требуемой конфигурации Драйвер Internet Explorer:

Защищенный режим

В Internet Explorer 7 или более поздних версиях в Windows Vista или Windows 7 необходимо установить одинаковое значение для настроек Защищенного режима для каждой зоны. Значение может быть включено или выключено, если оно одинаково для каждой зоны. Чтобы установить настройки защищенного режима, выберите «Свойства обозревателя» в меню «Инструменты», а затем щелкните вкладку Безопасность. Для каждой зоны внизу вкладки будет установлен флажок Включить защищенный режим.

ProtectedModeSettings

Кроме того, @JimEvans в своей статье Вы делаете это неправильно: в защищенном режиме IE и WebDriver четко упоминается:

Однако использование этой возможности не решает основной проблемы. Если граница защищенного режима нарушена, это может привести к очень неожиданному поведению, в том числе зависанию, неработающему расположению элемента и нераспространению щелчков. Чтобы предупредить людей об этой потенциальной проблеме, возможности были присвоены громкие пугающие имена, например INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS в Java и IntroduceInstabilityByIgnoringProtectedModeSettings в .NET. Мы действительно думали, что сообщение пользователю о том, что использование этого параметра внесет потенциальную опасность в его код, будет препятствовать его использованию, но оказалось, что это не так.


Решение

Чтобы получить доступ к URL-адресу https://www.google.ro/?safe=active&ssui=on с помощью Selenium на основе selenium-iedriver, инициированные internet-explorer Контекст просмотра вы можете использовать следующий минимальный блок кода:

from selenium import webdriver

driver = webdriver.Ie(executable_path=r'C:\WebDrivers\IEDriverServer.exe')
driver.get('https://www.google.ro/?safe=active&ssui=on')

Дополнительные соображения

Выполните следующие шаги:

Примечание. Согласно передовым методам, поскольку Selenium Client и InternetExplorerDriver выпускаются синхронно, и вы должны попытаться использовать оба двоичные файлы из того же основного выпуска.

  • Очистите свою рабочую область проекта с помощью IDE и перестройте свой проект только с использованием необходимых зависимостей.
  • Выполните свой @Test.
  • Всегда вызывайте driver.quit() в методе tearDown(){}, чтобы корректно закрыть и уничтожить экземпляры WebDriver и Web Client.

использованная литература

Вы можете найти пару соответствующих подробных обсуждений в:

person DebanjanB    schedule 25.07.2020