IE11 Selenium WebDriverException:导航失败。 (org.openqa.selenium.WebDriverException ...IWebBrowser2::Navigate2() 失败

IE11 Selenium WebDriverException: Failed to navigate. (org.openqa.selenium.WebDriverException ...IWebBrowser2::Navigate2() failed

我是自动化测试的新手,虽然我的 Selenium 测试在 Chrome 和 Firefox 上是 运行,但在 IE11 上不是 运行。我做了下面详述的所有检查,但我一直遇到这个错误:

org.openqa.selenium.WebDriverException: Failed to navigate to http://myapp. This usually means that a call to the COM method IWebBrowser2::Navigate2() failed.

我首先做了所需的配置,如 https://code.google.com/p/selenium/wiki/InternetExplorerDriver#Required_Configuration) .

我已尝试按照 In IE: org.openqa.selenium.WebDriverException: This usually means that a call to the COM method IWebBrowser2::Navigate2() failed 中的建议编辑我的注册表 向 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE 添加名称为 iexplore.exe 且值为 0 的新 DWORD 值,如 https://whosebug.com/users/80779/lordofthepigs

所述

我也试过引入https://whosebug.com/users/4210466/karunakar-sapogu推荐的那段代码:

new_window = self.driver.window_handles[1]   
self.driver.switch_to_window(new_window)

但我似乎没有正确介绍它,因为我遇到了 java 个错误。

Java有人解决过这个问题吗?你能给我一步一步的指导吗?

1) 您确定这是您的 IEdriver 实例吗运行?

2) 您使用的是 IEdriver x64 还是 IEDriver x86?

即使您使用 x64 windows,在大多数情况下您也使用 internet exlporer x86。请尝试 x86 驱动程序并尝试重现此类行为

成功了!非常感谢。问题是我有 64 位版本。通过用 32 位版本替换它,我的代码工作了(我在 System32 中有驱动程序,绕过修改路径)

    System.setProperty(webdriver.ie.driver", "C://Windows/System32/IEDriverServer.exe");
    driver = new InternetExplorerDriver();
    baseUrl = "http://mysite";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

这个错误信息...

org.openqa.selenium.WebDriverException: Failed to navigate to http://myapp. This usually means that a call to the COM method IWebBrowser2::Navigate2() failed

...暗示 IEDriverServer 无法 initiate/spawn 新的 浏览上下文 Internet Explorer 浏览器 会话作为一个 COM 对象。


Internet Explorer 驱动程序所需的配置

Required Configuration of Internet Explorer Driver 明确提到:

  • 必须下载 IEDriverServer 可执行文件并将其放在您的 PATH 中。
  • 在 Windows Vista 或 Windows 7 上的 IE 7 或更高版本上,您必须将每个区域的保护模式设置设置为相同的值。该值可以打开或关闭,只要每个区域都相同即可。要设置保护模式设置,请从“工具”菜单中选择“Internet 选项...”,然后单击“安全”选项卡。对于每个区域,在标签为“启用保护模式”的选项卡底部都会有一个复选框。

  • 此外,必须为 IE 10 及更高版本禁用 增强保护模式 。此选项位于“Internet 选项”对话框的 Advanced 选项卡中。
  • 浏览器缩放级别必须设置为 100% 以便本机鼠标事件可以设置为正确的坐标。
  • 对于Windows 10,您还需要在显示设置中将更改文本、应用和其他项目的大小设置为100%
  • 仅对于 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
  • 请注意,FEATURE_BFCACHE 子项可能存在也可能不存在,如果不存在则应创建。在此键中,创建一个名为 iexplore.exeDWORD 值,值为 0`。

解决方案

首先,您需要确保每个区域的保护模式设置为相同的值。此外,您还需要确保 Internet Explorer 驱动程序 所需配置


参考资料

您可以在以下位置找到一些相关讨论: