InternetExplorerDriver 的注册表项 HKEY_LOCAL_MACHINE\...\FEATURE_BFCACHE 如何解决 Internet Explorer 11 问题?

Fri*_*bot 5 c# selenium selenium-webdriver internet-explorer-11 selenium-iedriver

因此,我正在 IE11 中自动化 Web 应用程序(为政府合同欢呼三声!),并且我按照 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 子项可能存在也可能不存在,如果不存在则应创建它。重要提示:在此注册表项内,创建一个名为 iexplore.exe 且值为 0 的 DWORD 值。

但它并没有真正解释为什么?如果没有添加此密钥会出现什么问题?“维护 IE 实例和网络驱动程序之间的连接”一词可能有很多不同的含义。

我们遇到的问题主要涉及 Selenium 方法,例如 .click() 不起作用或无法单击页面以供那些感兴趣的参考点使用。我们还遇到了一些奇怪的滚动问题,当元素刚刚离开屏幕时,它无法通过测试,这很奇怪,因为它应该读取 DOM,但我离题了。

Deb*_*anB 4

你没看错。根据InternetExplorerDriver“所需配置”部分中的文档,明确提到:

\n\n

仅对于IE 11,您需要在目标计算机上设置注册表项,以便驱动程序可以维持与其创建的 Internet Explorer 实例的连接。

\n\n
    \n
  • 对于 32 位 Windows 安装,您必须在注册表编辑器中检查的键是:

    \n\n
    HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BFCACHE. \n
    Run Code Online (Sandbox Code Playgroud)
  • \n
  • 对于 64 位 Windows 安装,关键是:

    \n\n
    HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BFCACHE. \n
    Run Code Online (Sandbox Code Playgroud)
  • \n
  • 注意FEATURE_BFCACHE子项可能存在也可能不存在,如果不存在则应创建该子项。重要提示:在此注册表项内,创建一个名为 iexplore.exe 且值为 0 的 DWORD 值。

  • \n
\n\n

一个简短的历史

\n\n

根据@JimEvans 在讨论IE11 异常与 IEDriverServer: Unable to get browser 中的评论:

\n\n
    \n
  • \n

    2014 年 12 月 16 日,Microsoft 通过Windows Update发布了更新 KB3025390,作为其正常“补丁星期二”更新周期的一部分。对于大多数用户来说,无需用户交互即可下载并安装此更新。此更新在与 IE11 一起使用时会破坏 IE 驱动程序。

    \n
  • \n
  • \n

    作为此更新的一部分,尝试使用 COM 方法IHTMLWindow2::execScript将返回“访问被拒绝”结果。这导致驱动程序无法在浏览的页面中执行 JavaScript。然而,鉴于驱动程序的大部分功能是使用 JavaScript 实现的,这实际上导致驱动程序几乎无法在 IE11 中使用。

    \n
  • \n
  • \n

    此问题没有已知的解决方法。目前,Microsoft IE 驱动程序实现仍不完整,缺乏可用所需的基本功能,因此不推荐使用。卸载更新可能会恢复 IE 驱动程序功能,但这并不理想。

    \n
  • \n
  • \n

    虽然 execScript 方法在 IE11 中被标记为已弃用,但驱动程序迄今为止已经能够成功使用该方法,并且希望它在整个 IE11 生命周期中仍然有用。我们现在知道情况并非如此。此外,迄今为止,尝试使用 Microsoft 建议的替代方案eval尚未取得成果。

    \n
  • \n
  • \n

    目前正在Selenium 问题跟踪器中跟踪该问题。

    \n
  • \n
  • 在此讨论中@JimEvans 进一步添加了评论:

  • \n
\n\n
\n

该注册表项禁用 IE 的一项名为 BFCache 的缓存功能,该功能会影响使用浏览器的向前和向后导航功能时缓存和加载页面的方式。启用后,如果向后或向前导航,驱动程序所依赖的 COM 对象(是的,库使用的完全相同的对象mshtml)将变得孤立。还有其他方法可以增加driver\xe2\x80\x99sclick()方法的\xe2\x80\x9creliability\xe2\x80\x9d。

\n
\n