【问题标题】:IELaunchURL issue with Selenium IE DriverSelenium IE 驱动程序的 IELaunchURL 问题
【发布时间】:2014-06-27 12:40:29
【问题描述】:

我正在使用 Selenium Grid 运行几个测试用例。我正在使用最新的驱动程序和硒包。

有时脚本运行良好,有时我只在 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 中的“保护模式区域”设置错误。
  • @Arran:如果你执行上面提到的建议,脚本将会失败..要求你做注册表更改。
  • @djangofan:我已经有相关代码了。
  • 我诚实的建议是告诉你的主管和经理,你机器上的限制使你的工作无法进行。要么他们会告诉你忍受它,在这种情况下你告诉他们他们需要给你其他事情做,或者他们会让 IT 为你做例外。归根结底,IEDriver 无法在如此严格的环境中工作。即使使用您已经获得的设置,它也会在您的测试中添加片状(因此属性名称!)。

标签: internet-explorer selenium selenium-webdriver webdriver


【解决方案1】:

我发现的唯一解决方法是同步受保护的标志。功能标志集并非在所有情况下都有效。我不确定为什么它不会一直忽略,但我的猜测是 IE 在发布更新时不断更改实现,并且标志与更新不一致。

安全问题在于 IEDriver 访问和控制浏览器,这向微软表明“未知”进程正在“拥有”浏览器。注册表项将与将 IEDriver 配置为控制 IE 的安全进程有关。我不确定 IE 使用的所有特定注册表部分,但您可能会在某些 IE 特定注册表站点上找到它们。

即使修复了注册表,如果受保护的标志不同,IEDriver 也会感到困惑,并可能完全丢失窗口并在启动后抛出未找到窗口异常。我真的建议尝试让某人为安全设置中的所有 4 个项目启用所有保护模式复选框。另一部分是 IE 有时会启动并告诉您您没有“推荐”设置,您想使用“推荐”设置。您需要单击“否”并且不再询问我选项。

完成上述所有操作后,一旦您更新 IE,无论如何您都必须再次重做,因此如果您想使用 IE,任何控制您环境的人都需要参与其中。

【讨论】:

  • 这个答案很好,因为它鼓励正确设置保护模式设置。但是,我不能让自己支持它,因为它显示出对为什么这是一项要求的令人震惊的缺乏理解。有许多地方对此进行了彻底的记录,包括但不限于this blog post,以及源代码本身。
【解决方案2】:

这对我有用无需更改 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。

使用以下代码运行您的网络驱动程序

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)

这将解决您的错误

【讨论】:

  • @purus 在我的公司我要求 IT 提升我的。允许注册表编辑的用户权限
【解决方案3】:

当您打开一个新的 IE 实例时,IEDriverServer 似乎经常不会捕获对每个选项卡生成的新 IE 进程的引用。为了解决这个问题,我们发现将注册表中的 TabProcGrowth 设置更改为 0 会使 IE 在 64 位中作为单个进程运行。唯一需要的其他更改是您需要使用 64 位版本的 IEDriverServer。这解决了启动问题,并使以下 stmt 正常工作。

ieCapabilities.setCapability( InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, 真的 );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-11
    • 2019-08-13
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多