Каким образом запись реестра HKEY_LOCAL_MACHINE\...\FEATURE_BFCACHE для InternetExplorerDriver решает проблему Internet Explorer 11?
Поэтому я автоматизирую веб-приложение в IE11 (три ура для правительственных контрактов!) И следую инструкциям на Selenium Wiki, чтобы настроить его, потому что у нас было странное и странное поведение. Я нахожусь на этом шаге здесь и хорошо, он говорит, что я добавил раздел реестра, чтобы помочь поддерживать связь между драйвером и браузером:
Только для 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.
Но это на самом деле не объясняет почему? Что не так, если этот ключ не добавлен? Слова "Поддерживать связь между экземпляром IE и веб-драйвером" могут означать много разных вещей.
Проблемы, с которыми мы сталкиваемся, в основном связаны с методами Selenium, такими как.click(), которые не работают или не щелкают по странице для тех, кто интересен для справки. У нас также есть некоторые странные проблемы с прокруткой, когда он не проходит тест, когда элемент находится вне экрана, что странно, потому что он должен читать DOM, но я отступаю.
1 ответ
Вы видели это правильно. В соответствии с документацией в разделе " Требуемая конфигурация " InternetExplorerDriver четко указано:
Только для 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.
Краткая история
Согласно комментариям @JimEvans в обсуждении исключения IE11 с IEDriverServer: Невозможно получить браузер:
16 декабря 2014 г. корпорация Майкрософт выпустила обновление KB3025390 через Центр обновления Windows в рамках своего обычного цикла обновления "исправление вторника". Для большинства пользователей это обновление загружается и устанавливается без участия пользователя. Это обновление ломает драйвер IE при использовании его с IE11.
В рамках этого обновления попытка использовать метод COM IHTMLWindow2::execScript возвращает результат "отказано в доступе". Это делает драйвер не в состоянии выполнить JavaScript на странице просмотра. Однако, учитывая, что большая часть функциональности драйвера реализована с использованием JavaScript, это фактически делает драйвер практически непригодным для использования с IE11.
Нет известного обходного пути для этой проблемы. В настоящее время реализация драйвера Microsoft IE все еще не завершена, так как отсутствуют базовые функциональные возможности, необходимые для его использования, поэтому его нельзя рекомендовать. Удаление обновления может восстановить функциональность драйвера IE, но это вряд ли идеально.
Хотя метод execScript помечен как устаревший для IE11, драйвер до сих пор мог успешно использовать этот метод, и надеялись, что он останется полезным в течение всего жизненного цикла IE11. Теперь мы знаем, что это не так. Кроме того, попытки использовать предложенную Microsoft замену eval до сих пор были бесплодными.
В настоящее время проблема отслеживается в трекере Selenium.
В этом обсуждении @JimEvans добавил комментарий:
Запись в реестре отключает функцию кэширования IE, которая называется BFCache, которая влияет на то, как страницы кэшируются и загружаются при использовании функции прямой и обратной навигации браузера. При включении COM-объекты, на которые опирается драйвер (да, те же самые объекты, которые используются
mshtml
библиотека) осиротеть, если вы перемещаетесь назад или вперед. Существуют и другие способы повышения "надежности" водителя.click()
метод.