Не удалось перейти к https://www.google.ca. Это обычно означает, что вызов COM-метода IWebBrowser2 :: Navigate2 () с Python Unittest Selenium - PullRequest
0 голосов
/ 14 июля 2020
 from selenium import webdriver
 import unittest
 from selenium.webdriver.support.ui import WebDriverWait
 from selenium.webdriver.support import expected_conditions as EC
 from selenium.webdriver.common.by import By
 from time import sleep


 class MyTestCase(unittest.TestCase):
    def setUp(self) -> None:
       self.driver = webdriver.Ie(executable_path="C:\\webdriver\\IEDriverServer.exe")
       self.driver.maximize_window()
       self.driver.get("https://www.google.ca")

   def test_googletest(self):
       element = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.NAME, "q")))
       element.send_keys("System")
       sleep(3)

  def tearDown(self):
      self.driver.close()


 if __name__ == '__main__':
     unittest.main()

Код успешно открывает браузер IE, но не может перейти на веб-сайт Google. Он застревает на локальном хосте в адресной строке и через некоторое время выходит из строя. См. Изображение ниже введите описание изображения здесь

Ниже приведена ошибка, которую я получаю:

Error
Traceback (most recent call last):
  File "C:\Users\mahalr\AppData\Local\Programs\Python\Python38-32\lib\unittest\case.py", line 60, in testPartExecutor
    yield
  File "C:\Users\mahalr\AppData\Local\Programs\Python\Python38-32\lib\unittest\case.py", line 672, in run
    self._callSetUp()
  File "C:\Users\mahalr\AppData\Local\Programs\Python\Python38-32\lib\unittest\case.py", line 630, in _callSetUp
    self.setUp()
  File "C:\Users\mahalr\PycharmProjects\TestAutomation\TestAutomation.py", line 13, in setUp
    self.driver.get("https://www.google.ca")
  File "C:\Users\mahalr\PycharmProjects\TestAutomation\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 333, in get
    self.execute(Command.GET, {'url': url})
  File "C:\Users\mahalr\PycharmProjects\TestAutomation\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\mahalr\PycharmProjects\TestAutomation\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Failed to navigate to https://www.google.ca. This usually means that a call to the COM method IWebBrowser2::Navigate2() failed. The error returned is: Received error: 0x80004005 ['Unspecified error']

Вот мои предварительные настройки:

  1. Windows 10 64-битный ноутбук
  2. IE Server.exe 32-разрядный
  3. IE11
  4. Ключ DWORD создан в папке Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ Inte rnet Explorer \ Main \ FeatureControl с именем FEATURE_BFCACHE value = 0
  5. Флажок Включить защищенный режим установлен для всех зон в Inte rnet Параметры -> вкладка Безопасность
  6. Включить 64-битные процессы для расширенного защищенного режима (отмечено) - Этот параметр отключен и отмечен, поскольку это ноутбук моей компании

Может ли кто-нибудь помочь мне, поскольку я столкнулся с проблемой из-за этой проблемы и не могу найти решение?

1 Ответ

0 голосов
/ 14 июля 2020

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

selenium.common.exceptions.WebDriverException: Message: Failed to navigate to https://www.google.ca. This usually means that a call to the COM method IWebBrowser2::Navigate2() failed. The error returned is: Received error: 0x80004005 ['Unspecified error']

... подразумевает, что структура для управления не смогла создать экземпляр браузера как COM-объект.

История настроек защищенного режима для Inte rnet Explorer

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

Сеанс браузера был представлен одним экземпляром исполняемого файла iexplore.exe. Фреймворк для управления IE может создать экземпляр браузера как COM-объект, используя CoCreateInstance () , или может легко передать COM-интерфейсы в работающий экземпляр, используя наличие ActiveAccessibility и отправив сообщение WM_HTML_GETOBJECT к соответствующему дескриптору окна IE. Как только у инфраструктуры будет указатель на COM-интерфейсы, вы можете быть уверены, что они будут действительны в течение всего срока службы браузера. Это также означало, что вы могли легко присоединяться к событиям, запускаемым браузером через DWebBrowserEvents2 COM-интерфейс.

Затем появилась комбинация IE 7 и Windows Vista. В целях уменьшения поверхности атаки, представленной вредоносными веб-сайтами, IE 7 представил так называемый Защищенный режим , который использовал обязательный контроль целостности в Windows Vista для предотвращения инициируемых действий IE, обычно инициируемых на JavaScript, благодаря возможности доступа к операционной системе, как это было в предыдущих выпусках. Хотя в целом это приветствовалось большинством пользователей IE, оно создало всевозможные проблемы для автоматизации IE.

Когда вы переходите в защищенный режим или выходите из него с помощью, скажем, переход от внутреннего веб-сайта intr anet к веб-сайту на inte rnet, IE должен создать новый процесс, поскольку он не может изменить уровень обязательного контроля целостности существующего процесса. Более того, в версиях IE после 7 не всегда очевидно, что граница защищенного режима была пересечена, поскольку IE пытается представить лучший пользовательский интерфейс, плавно объединяя окно браузера нового процесса с уже открытым окном браузера. . Это скрытое переключение процессов также означает, что любые ссылки, указывающие на COM-объекты IE до пересечения границы защищенного режима, остаются указывающими на объекты, которые больше не используются IE после пересечения границы.

Более того, если вы посмотрите на Требуемая конфигурация из Inte rnet Драйвер проводника , здесь четко указано:

Настройки защищенного режима

В Inte rnet Explorer 7 или выше в Windows Vista или Windows 7 вы должны установить Защищенный режим для каждой зоны, чтобы одинаковое значение . Значение может быть on или off, если оно одинаково для каждой зоны. Чтобы установить параметры Защищенного режима , вы должны выбрать Internet Options в меню Tools, а затем щелкнуть Security tab. Для каждой зоны будет установлен флажок в нижней части вкладки с надписью Enable Protected Mode.

ProtectedModeSettings


Solution

You need to ensure that the Protected Mode settings for each zone to be the same value.


References

You can find a couple of relevant discussions in:

...