一尘不染

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

selenium

因此,我正在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的DWORD值,其值为0。

但这并不能真正解释为什么?如果您没有添加此密钥,怎么了?“维护IE实例与Webdriver之间的连接”一词可能意味着很多不同的东西。

我们遇到的问题主要与Selenium方法有关,例如.click()无法正常工作或在参考点上感兴趣的页面上无法单击。我们还遇到了一些奇怪的滚动问题,即当元素在屏幕外时,它无法通过测试,这很奇怪,因为它应该读取DOM,但是我离题了。


阅读 856

收藏
2020-06-26

共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 子项可能存在也可能不存在,如果不存在,则应创建该子项。重要说明:在此注册表项中,创建一个名为iexplore.exe的DWORD值,其值为0。

一个简短的历史

根据@JimEvans讨论中的IEDriverServer
IE11异常的注释:无法获取浏览器

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

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

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

  • 尽管execScript方法已被标记为IE11已弃用,但驱动程序迄今已能够成功使用该方法,希望它在整个IE11生命周期中仍然有用。我们现在知道情况并非如此。此外,到目前为止,尝试使用Microsoft建议的替代产品eval一直没有结果。

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

  • 在此讨论中,@ JimEvans进一步添加了以下注释:

注册表项禁用了称为BFCache的IE缓存功能,该功能会影响使用浏览器的前向和后向导航功能时页面的缓存和加载方式。启用后,如果向后或向前导航,驱动程序所依赖的COM对象(是,mshtml库使用的对象完全相同)将变为
孤立的 。还有其他方法可以提高驾驶员click()方法的“可靠性” 。

2020-06-26