与Selenium IE Driver的IELaunchURL问题

时间:2014-06-27 12:40:30

标签: internet-explorer selenium selenium-webdriver webdriver

我正在使用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
);

3 个答案:

答案 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,     真正 );