【问题标题】:In IE: org.openqa.selenium.WebDriverException: This usually means that a call to the COM method IWebBrowser2::Navigate2() failed在 IE 中:org.openqa.selenium.WebDriverException: 这通常意味着对 COM 方法 IWebBrowser2::Navigate2() 的调用失败
【发布时间】:2020-07-15 04:56:05
【问题描述】:

我正在使用 Selenium 为我的 Web 应用程序编写测试用例。当我从 Firefox 运行测试时,它工作正常,但是当我尝试从 IE 运行它时,我无法运行并且收到错误消息:

这通常意味着调用 COM 方法 IWebBrowser2::Navigate2() 失败异常。

System.setProperty("webdriver.ie.driver", "browserdrivers/IEDriverServer.exe");
WebDriver web =  new InternetExplorerDriver();
web.get("URL");

我可以看到 IE 屏幕,但它没有导航到那个 URL,而且我遇到了异常。我该如何解决这个问题?

【问题讨论】:

  • 您可以发布您尝试导航到的实际网址吗?

标签: internet-explorer selenium selenium-webdriver


【解决方案1】:

我自己也遇到过这个问题。对我来说,问题是我的应用程序使用 HTTP 基本身份验证,并且我试图通过页面 URL 设置用户名/密码组合,如下所示:http://username:password@host/path

问题是默认情况下 IE 不允许您以这种方式设置用户名和密码(这是一项安全功能),这会导致上述错误。

为了解决这个问题,我必须在 regedit 中添加一个注册表值。在键中:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE 添加一个名为 iexplore.exe 和值 0 的新 DWORD 值,如其他答案中所述 https://stackoverflow.com/a/23519791/80779

【讨论】:

    【解决方案2】:

    您必须在 Internet Explorer 中将每个区域的保护模式设置设置为相同的值。希望以下链接对您有所帮助。

    NoSuchElementException is occurred during implementation of InternetExplorerDriver in Selenium WebDriver

    问候,

    维尼什

    【讨论】:

    • 实际上在我的情况下,当我将 IE 作为默认浏览器时,这个异常得到了解决....不确定是什么关系
    【解决方案3】:

    我通过手动运行 Internet Explorer 解决了这个问题。加载浏览器后,系统会提示我“设置 Internet Explorer 11”。我选择了“使用推荐的安全、隐私和兼容性设置”并单击“确定”。

    对话框关闭后,我的浏览器显示一个名为“警告:Internet Explorer 增强安全配置未启用”的配置页面 - 我忽略了这一点并关闭了浏览器并尝试再次成功运行自动化测试。

    【讨论】:

      【解决方案4】:

      此错误消息...

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

      ...暗示 IEDriverServer 无法启动/生成新的浏览上下文,即 Internet Explorer 浏览器会话作为 COM 对象。


      Internet Explorer 的保护模式设置

      @JimEvans 在文章You're Doing It Wrong: IE Protected Mode and WebDriver 中提到,同时通过 自动化

      浏览器会话由 iexplore.exe 可执行文件的单个实例表示。用于驱动 IE 的框架可以使用CoCreateInstance() 将浏览器实例化为 COM 对象,或者通过使用 ActiveAccessibility 的存在并将WM_HTML_GETOBJECT 消息发送到适当的 IE 窗口句柄,可以轻松地将 COM 接口获取到正在运行的实例。一旦框架有一个指向 COM 接口的指针,您就可以确定它们在浏览器的整个生命周期内都是有效的。这也意味着您可以通过DWebBrowserEvents2 COM 接口轻松附加到浏览器触发的事件。随之而来的是 IE 7 和 Windows Vista 的组合。为了减少恶意网站带来的攻击面,IE 7 引入了称为Protected Mode 的东西,它利用 Windows Vista 中的强制完整性控制来防止 IE 发起的操作(通常由 JavaScript 发起)能够访问操作系统以前版本中的方式。虽然对于大多数 IE 用户来说,这通常是一个受欢迎的发展,但它为 IE 自动化带来了各种各样的问题。当您通过例如从内部 Intranet 网站导航到 Internet 上的网站进入或退出保护模式时,IE 必须创建一个新进程,因为它无法更改现有进程的强制完整性控制级别。此外,在 IE 7 之后的版本中,跨越保护模式边界并不总是很明显,因为 IE 试图通过将新进程的浏览器窗口与已经打开的浏览器窗口无缝合并来呈现更好的用户体验。这种隐蔽的进程切换也意味着在保护模式边界跨越之前指向 IE 的 COM 对象的任何引用都将指向在跨越边界之后 IE 不再使用的对象。


      此外,Internet Explorer DriverRequired Configuration 明确提到:

      • IEDriverServer 可执行文件必须下载并放置在您的 PATH 中。
      • 在 IE 7 或更高版本的 Windows Vista 或 Windows 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 驱动程序必需配置


      参考文献

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-04
        • 1970-01-01
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-28
        相关资源
        最近更新 更多