我正在使用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
);
我发现的唯一的解决办法是同步上涨的保护标志。 功能标志设置不适用于所有情况。 我不知道为什么它不一贯忽视,但我的猜测是,IE浏览器在不断变化的实现,因为他们发布更新和标志不与更新保持一致。
安全问题是与IEDriver访问和控制这表明微软的“未知”进程“拥有”的浏览器浏览器。 注册表项将被与配置IEDriver作为担保过程中控制IE。 我不知道所有的IE浏览器使用这些特定的注册表部分,但你可能会发现他们的一些IE特定的注册表网站。
即使注册表修复,如果受保护的标志是不同的IEDriver然后会很困惑,并可能完全失去窗口和启动它后应丢弃未发现异常的窗口。 我真的建议尝试找人来使所有在安全设置的所有4个项目的保护模式复选框。 另一部分是,IE浏览器有时会启动,并告诉你,你没有“推荐”的设置,你想用“推荐”的设置。 您将需要单击否,不要再问我的选择。
上述所有之后,只要你升级IE,你必须反正重做一遍,所以谁是在你的环境的控制需要在船上用这个,如果你想使用IE浏览器。
这个工作对我没有在IE中更改安全设置 ,作为我公司没有答应。
打开注册表编辑器,找到HKEY_CURRENT_USER \软件\微软\的Internet Explorer \ Main文件夹和新的一个REG_DWORD(32位)值,名称TabProcGrowth,将值设置为十进制0。
对于IE 11只,你将需要设置目标计算机上的注册表项,使驾驶者可以保持到Internet Explorer的情况下它会创建一个连接。 对于32位Windows安装,您必须在注册表编辑器中考查的重点是HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的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)
这将解决您的错误
看来,IEDriverServer常不能捕捉参照新的IE进程,当你打开IE浏览器的一个新实例被每个标签催生。 要解决这个问题,我们发现,在注册表中更改TabProcGrowth设置为0使得它运行IE浏览器在64位单过程。 是需要它的唯一其他的变化,你需要使用IEDriverServer的64位版本。 这解决启动问题,使下面的语句工作做好。
ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,TRUE);