在IE中:org.openqa.selenium.WebDriverException:这通常意味着调用COM方法IWebBrowser2 :: Navigate2()失败

时间:2014-01-30 08:39:32

标签: internet-explorer selenium selenium-webdriver

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

  

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

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

我能够看到IE屏幕,但它没有导航到该URL,我正在超越异常。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:2)

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

NoSuchElementException is occurred during implementation of InternetExplorerDriver in Selenium WebDriver

此致

维涅什

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

此错误消息...

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

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


Internet Explorer的保护模式设置

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

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


此外,Required Configuration中的Internet Explorer Driver明确提到:

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

ProtectedModeSettings

  • 此外,对于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子项可能存在也可能不存在,如果不存在则应创建。在此键内,创建一个名为DWORD的{​​{1}}值,其值为0`。

解决方案

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


参考文献

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