C# InternetExplorerDriver的注册表项HKEY_LOCAL_MACHINE \…\FEATURE_BFCACHE如何解决Internet Explorer 11问题?
因此,我正在IE11中自动化一个web应用程序(为政府合同欢呼三声!),并且我正在按照Selenium Wiki上的说明来配置它,因为我们有一大堆奇怪和不可靠的行为。我在这一步,它说我添加了一个注册表项,以帮助维护驱动程序和浏览器之间的连接: 仅对于IE 11,您需要在目标计算机上设置一个注册表项,以便驱动程序能够保持与它创建的Internet Explorer实例的连接。对于32位Windows安装,您必须在注册表编辑器中检查的项是HKEY\U LOCAL\U 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之间的连接”这几个词可能意味着很多不同的事情C# InternetExplorerDriver的注册表项HKEY_LOCAL_MACHINE \…\FEATURE_BFCACHE如何解决Internet Explorer 11问题?,c#,selenium,selenium-webdriver,internet-explorer-11,selenium-iedriver,C#,Selenium,Selenium Webdriver,Internet Explorer 11,Selenium Iedriver,因此,我正在IE11中自动化一个web应用程序(为政府合同欢呼三声!),并且我正在按照Selenium Wiki上的说明来配置它,因为我们有一大堆奇怪和不可靠的行为。我在这一步,它说我添加了一个注册表项,以帮助维护驱动程序和浏览器之间的连接: 仅对于IE 11,您需要在目标计算机上设置一个注册表项,以便驱动程序能够保持与它创建的Internet Explorer实例的连接。对于32位Windows安装,您必须在注册表编辑器中检查的项是HKEY\U LOCAL\U MACHINE\SOFTWARE
我们遇到的问题主要与Selenium方法有关,例如.click()不起作用,或者对某个参考点感兴趣的人没有单击页面。我们也有一些奇怪的滚动问题,当元素离开屏幕时,它没有通过测试,这很奇怪,因为它应该读取DOM,但我离题了。你看对了。根据本节中的文件,明确提到: 仅对于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.
- 注意
子项可能存在,也可能不存在,如果不存在,则应创建子项。要点:在此键内,创建一个名为iexplore.exe的DWORD值,其值为0功能\u BFCACHE
- 2014年12月16日,微软通过发布了更新KB3025390,作为其正常“补丁星期二”更新周期的一部分。对于大多数用户,此更新是在没有用户交互的情况下下载和安装的。此更新在与IE11一起使用时会中断IE驱动程序
- 作为此更新的一部分,尝试使用COM方法将返回“拒绝访问”结果。这使得驱动程序无法在浏览的页面中执行JavaScript。然而,考虑到大部分驱动程序功能是使用JavaScript实现的,这实际上使得驱动程序在IE11中几乎不可用
- 此问题没有已知的解决方法。目前,Microsoft IE驱动程序的实现仍然不完整,缺乏使其可用所需的基本功能,因此不能推荐使用。卸载更新可能会恢复IE驱动程序的功能,但这并不理想
- 虽然execScript方法被标记为不推荐用于IE11,但驱动程序在此之前已经能够成功地使用该方法,并且希望它在整个IE11生命周期中仍然有用。我们现在知道情况并非如此。此外,使用微软建议的替代品的尝试,到目前为止都是徒劳的
- 该问题目前正在中跟踪
- 在本次讨论中,@JimEvans进一步添加了以下评论:
注册表项禁用IE中名为BFCache的缓存功能,这会影响使用浏览器的正向和反向导航功能时缓存和加载页面的方式。启用时,如果向后或向前导航,驱动程序所依赖的COM对象(是的,与
mshtml
库使用的对象完全相同)将成为孤立对象。还有其他方法可以提高驱动程序的click()
方法的“可靠性”
我想提出几点建议,在我的职业生涯中,我在一个测试环境中工作了大约2年,其中,
mshtml
库的.Net
更适合于自动化IE,但是如果你直接选择Selenium
路线,我建议使用它的javascript注射器
来做DOM
的事情,使用javascript
版本的。点击
更可靠。是的。我们要走那条路。我只是想知道注册表项是否可能与。单击不稳定有关?正如我所说,wiki在注册表实际解决的问题上相当模糊。根据我的经验,注册表项设置对Selenium的可靠性没有影响。单击()注册表项会禁用IE中名为BFCache的缓存功能,这会影响使用浏览器的正向和反向导航功能时缓存和加载页面的方式。启用时,如果向后或向前导航,驱动程序所依赖的COM对象(是的,与mshtml
库使用的对象完全相同)将成为“孤立”对象。还有其他方法可以提高驱动程序的click()
方法的“可靠性”。哦,太酷了!。你介意把它复制粘贴到一个答案中,这样我就可以给你评分了吗?我想给你报应!此外,如果您能详细介绍如何使.click方法更可靠,我们将不胜感激,尽管这并不是真正的主题。