我正在使用Selenium Grid运行多个测试用例。我正在使用最新的驱动程序和selenium软件包。
有时候脚本运行正常,有时我只在IE上遇到以下错误。
我不是每次都会遇到这个问题,但经常这样。
Unexpected error launching Internet Explorer.
IELaunchURL() returned HRESULT 80070005 ('Access is denied.') for URL 'http:// localhost:13879/'
当我尝试下面提供的解决方案时,它说我需要对Windows注册表进行一些更改,这在我的企业中是不可能的。
https://code.google.com/p/selenium/issues/detail?id=7045
SO中有几个这样的问题,没有人有回应。
编辑: 由于公司政策,我不允许在所有区域中启用保护模式。所以我已经有了以下代码来避免保护模式问题。
ieCapabilities.setCapability(
InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true
);
答案 0 :(得分:1)
我找到的唯一解决方法是同步受保护的标志。功能标志集在所有情况下都不起作用。我不确定为什么它不会一直忽略,但我的猜测是IE不断更改实现,因为它们发布更新并且标志与更新不一致。
安全问题是IEDriver访问和控制浏览器,这表明微软“未知”进程“拥有”浏览器。注册表项与将IEDriver配置为控制IE的安全进程有关。我不确定IE使用的所有特定注册表部分,但您可能会在某些IE特定注册站点上找到它们。
即使使用注册表修复,如果受保护的标志不同,IEDriver也会感到困惑,可能会完全丢失窗口并在启动后抛出一个未找到窗口的异常。我真的建议尝试让某人为安全设置中的所有4项启用所有保护模式复选框。另一部分是IE有时会启动并告诉您没有“推荐”设置,并且您想要使用“推荐”设置。你需要点击否,不要再问我选项。
完成上述所有操作后,只要你更新IE,你就必须再次重做它,所以如果你想使用IE,那么无论谁控制你的环境都需要加入。
答案 1 :(得分:1)
这对我有用而不会更改IE中的安全设置,因为我公司不允许这样做。
打开注册表编辑器,找到HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main文件夹和新的REG_DWORD(32位)值名称为TabProcGrowth,将值设置为十进制0。
仅对于IE 11,您需要在目标计算机上设置一个注册表项,以便驱动程序可以维护与其创建的Internet Explorer实例的连接。对于32位Windows安装,您必须在注册表编辑器中检查的密钥是HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BFCACHE。
使用以下代码运行您的webdriver
caps = DesiredCapabilities.INTERNETEXPLORER
caps['ensureCleanSession'] = True
caps['ignoreProtectedModeSettings'] = True
caps['forceCreateProcessApi'] = True
caps['ensureCleanSession'] = True
caps['ignoreZoomSetting'] = True
caps['INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS'] = True
driver = webdriver.Ie(capabilities=caps)
这将解决您的错误
答案 2 :(得分:0)
当您打开IE的新实例时,似乎IEDriverServer通常不捕获对每个选项卡生成的新IE进程的引用。为了解决这个问题,我们发现将注册表中的TabProcGrowth设置更改为0会使其在64位中作为单个进程运行IE。您需要使用64位版本的IEDriverServer才能进行唯一的其他更改。这解决了启动问题并使下面的工作正常运行。
ieCapabilities.setCapability( InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, 真正 );