В IE: org.openqa.selenium.WebDriverException: обычно это означает, что вызов COM-метода IWebBrowser2::Navigate2() завершился неудачно
Я использую Selenium для написания тестовых случаев для своего веб-приложения. Когда я запускаю тест из Firefox, он работает нормально, но когда я пытаюсь запустить его из IE, я не могу его запустить и получаю сообщение об ошибке:
Обычно это означает, что при вызове метода COM IWebBrowser2::Navigate2() возникла исключительная ситуация.
System.setProperty("webdriver.ie.driver", "browserdrivers/IEDriverServer.exe");
WebDriver web = new InternetExplorerDriver();
web.get("URL");
Я могу видеть экран IE, но он не переходит по этому URL, и я получаю исключение выше. Как я могу решить это?
3 ответа
Необходимо настроить параметры защищенного режима для каждой зоны на одно и то же значение в Internet Explorer. Надеюсь, что ссылка ниже может быть полезной для вас.
NoSuchElementException происходит во время реализации InternetExplorerDriver в Selenium WebDriver
С Уважением,
Вигнеш
Я только что столкнулся с этой проблемой сам. Для меня проблема была в том, что мое приложение использует базовую аутентификацию HTTP, и я пытался установить комбинацию имени пользователя и пароля через URL страницы, например: http://username:password@host/path
Проблема в том, что по умолчанию IE не позволяет вам задавать имя пользователя и пароль таким образом (это функция безопасности), и это вызывает вышеуказанную ошибку.
Чтобы это исправить, мне пришлось добавить значение реестра в regedit. В ключе: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
добавить новый DWORD
значение с именем iexplore.exe
и значение 0
, как описано в этом другом ответе /questions/7495605/obyichnaya-proverka-podlinnosti-s-pomoschyu-selenium-v-internet-explorer-10/7495614#7495614
Я решил эту проблему, запустив Internet Explorer вручную. Когда браузер загрузился, мне было предложено диалоговое окно "Настройка Internet Explorer 11". Я выбрал "Использовать рекомендуемые параметры безопасности, конфиденциальности и совместимости" и нажал "ОК".
После закрытия диалогового окна в моем браузере отображалась страница конфигурации под названием "Внимание. Конфигурация усиленной безопасности Internet Explorer не включена" - я проигнорировал это и закрыл браузер и снова попытался успешно запустить тест автоматизации.
Это сообщение об ошибке...
org.openqa.selenium.WebDriverException: This usually means that a call to the COM method IWebBrowser2::Navigate2() failed
... означает, что IEDriverServer не смог инициировать / создать новый контекст просмотра, то есть сеанс браузера Internet Explorer в качестве COM-объекта.
Настройки защищенного режима для Internet Explorer
@JimEvans в статье " Вы делаете это неправильно: IE Protected Mode" и "WebDriver" упоминаются при автоматизации Internet-Explorer через iedriverserver:
Сеанс браузера был представлен одним экземпляром исполняемого файла iexplore.exe. Фреймворк для управления IE может создать экземпляр браузера как COM-объекта с помощью CoCreateInstance() или может легко передать COM-интерфейсы в работающий экземпляр, используя наличие ActiveAccessibility и отправив
WM_HTML_GETOBJECT
сообщение соответствующему дескриптору окна IE. Как только у инфраструктуры будет указатель на COM-интерфейсы, вы можете быть уверены, что они будут действительны в течение всего срока службы браузера. Это также означало, что вы могли легко присоединяться к событиям, запускаемым браузером через COM-интерфейс DWebBrowserEvents2. Затем появилась комбинация IE 7 и Windows Vista. Чтобы уменьшить поверхность атаки, представляемую вредоносными веб-сайтами, IE 7 представил так называемый защищенный режим., который использовал обязательный контроль целостности в Windows Vista для предотвращения доступа IE, инициированного действиями, обычно инициированными JavaScript, к операционной системе, как это было в предыдущих выпусках. Хотя это в целом было долгожданным событием для большинства пользователей IE, оно создало всевозможные проблемы для автоматизации IE. Когда вы переходите в защищенный режим или выходите из него, например, переходя с внутреннего веб-сайта интрасети на веб-сайт в Интернете, IE должен создать новый процесс, поскольку он не может изменить уровень обязательного контроля целостности существующего процесса. Более того, в версиях IE после 7 не всегда очевидно, что граница защищенного режима была пересечена, поскольку IE пытается представить лучший пользовательский интерфейс, плавно объединяя окно браузера нового процесса с уже открытым окном браузера.Это скрытое переключение процессов также означает, что любые ссылки, указывающие на COM-объекты IE до пересечения границы защищенного режима, остаются указывающими на объекты, которые больше не используются IE после пересечения границы.
Кроме того, необходимо настроить конфигурацию в Internet Explorer Driver четко говорится:
- В
IEDriverServer
Exectuable должен быть загружен и помещен в ваш PATH. - В IE 7 или более поздних версиях в Windows Vista или Windows 7 необходимо установить одинаковые значения параметров защищенного режима для каждой зоны. Значение может быть включено или выключено, если оно одинаково для каждой зоны. Чтобы установить параметры защищенного режима, выберите "Свойства обозревателя..." в меню "Инструменты" и щелкните вкладку "Безопасность". Для каждой зоны внизу вкладки будет установлен флажок "Включить защищенный режим".
- Кроме того, для IE 10 и более поздних версий необходимо отключить расширенный защищенный режим. Эта опция находится в
Advanced
вкладка диалогового окна "Свойства обозревателя". - Уровень масштабирования браузера должен быть установлен на
100%
так что собственные события мыши могут быть установлены в правильные координаты. - Для Windows 10 вам также необходимо установить для параметра Изменить размер текста, приложений и других элементов значение
100%
в настройках дисплея. - Только для IE 11 вам нужно будет установить запись в реестре на целевом компьютере, чтобы драйвер мог поддерживать соединение с экземпляром Internet Explorer, который он создает.
- Для 32-битных установок Windows ключ, который вы должны проверить в редакторе реестра, это
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE
. - Для 64-битных установок Windows ключ
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE
. - Обратите внимание, что
FEATURE_BFCACHE
Подключ может присутствовать или отсутствовать, и должен быть создан, если он отсутствует. Внутри этого ключа создайтеDWORD
названное значениеiexplore.exe
со значением 0`.
Решение
Во-первых, вам нужно убедиться, что настройки защищенного режима для каждой зоны имеют одинаковое значение. Кроме того, вам также необходимо обеспечить необходимую конфигурацию для драйвера Internet Explorer.
Ссылки
Вы можете найти пару соответствующих обсуждений в:
- Настройка защитного режима Internet Explorer и уровни масштабирования
- Как запись реестра HKEY_LOCAL_MACHINE\ â € ¦ \FEATURE_BFCACHE для InternetExplorerDriver решает проблему с Internet Explorer 11?
- Как игнорировать настройку масштабирования
- Selenium InternetExplorerDriver не фокусируется на окне
- Как игнорировать настройки защищенного режима для Internet Explorer с помощью setCapability() через Selenium и Java?