微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法导航到 http://10.22.32.185 这通常意味着在 Win10 和 Selenium 上使用 IE 11 调用 COM 方法 IWebBrowser2::Navigate2()

如何解决无法导航到 http://10.22.32.185 这通常意味着在 Win10 和 Selenium 上使用 IE 11 调用 COM 方法 IWebBrowser2::Navigate2()

我在 Selenium 中启动 webdriver IE 11 时遇到问题,Windows 10 版本 20H2。

[ERROR] Tests run: 23,Failures: 3,Errors: 0,Skipped: 0,Time elapsed: 820.596 s <<< FAILURE! - in TestSuite
[ERROR] test.TestTrunkIE.firstTestIE  Time elapsed: 0.07 s  <<< FAILURE!
org.openqa.selenium.WebDriverException: 
Failed to navigate to http://10.22.32.185:8090/login. This usually means that a call to the COM method IWebbrowser2::Navigate2() Failed. The error returned is: Received error: 0x800700aa ['Żądane zasoby są w użyciu.']
Build info: version: '3.141.59',revision: 'e82be7d358',time: '2018-11-14T08:17:03'
System info: host: 'APS00080705-MB',ip: '10.58.97.104',os.name: 'Windows 10',os.arch: 'amd64',os.version: '10.0',java.version: '1.8.0_251'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities {acceptInsecureCerts: false,browserName: internet explorer,browserVersion: 11,javascriptEnabled: true,pageLoadStrategy: normal,platform: WINDOWS,platformName: WINDOWS,proxy: Proxy(),se:ieOptions: {browserAttachTimeout: 0,elementScrollBehavior: 0,enablePersistentHover: false,ie.browserCommandLineswitches:,ie.edgechromium: false,ie.edgepath:,ie.ensureCleanSession: false,ie.fileUploadDialogTimeout: 3000,ie.forceCreateProcessApi: false,ignoreProtectedModeSettings: true,ignoreZoomSetting: true,initialbrowserUrl: http://localhost:48363/,nativeEvents: false,requireWindowFocus: false},setwindowRect: true,strictFileInteractability: false,timeouts: {implicit: 0,pageLoad: 300000,script: 30000},unhandledPromptBehavior: accept}
Session ID: 02ba92b2-7827-413c-9b02-16d3156abd23
    at test.TestTrunkIE.firstTestIE(TestTrunkIE.java:51)

'The requested resource is in use.' 

这是我的代码

    @BeforeTest
    public void setUp() throws Exception {
        System.setProperty("webdriver.ie.driver","lib\\IE\\IEDriverServer.exe");
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("nativeEvents",false);
        caps.setCapability("unexpecteDalertBehavIoUr","accept");
        caps.setCapability("ignoreProtectedModeSettings",true);
        caps.setCapability("disable-popup-blocking",true);
        caps.setCapability("enablePersistentHover",true);
        caps.setCapability("ignoreZoomSetting",true);
        caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKInesS_BY_IGnorING_Security_DOMAINS,true);
        caps.setCapability("os","Windows");
        caps.setCapability("os_version","10");
        caps.setCapability("browser","IE");
        caps.setCapability("browser_version","11.0");
        caps.setCapability("resolution","1920x1080");
        caps.setCapability("browserstack.local",true);
        caps.setCapability("browserstack.debug",true);
        caps.setCapability("browserstack.networkLogs",true);
        caps.setCapability("browserstack.selenium_version","3.141.59");
        caps.setCapability("INTRODUCE_FLAKInesS_BY_IGnorING_Security_DOMAINS",true);
        caps.setCapability("setJavascriptEnabled",true);
        steps = new WebDriverSteps(new InternetExplorerDriver(caps));
    }
'''
In Internet Exprorer I disable checkBox Enable Protected Mode ....  

'''
[ERROR] Failures: 
[ERROR]   TestTrunkIE.firstTestIE:51 » WebDriver Failed to navigate to http://10.22.32.1...
[ERROR]   TestTrunkIE.firstTestIE46:62 » WebDriver Failed to navigate to http://10.22.32...
[ERROR]   TestTrunkIE.firstTestIE46Krus:74 » WebDriver Failed to navigate to http://10.2...
[INFO] 

解决方法

这个错误信息...

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

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


Internet Explorer 的保护模式设置

JimEvans 在他的 article 中提到,同时通过 自动化

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


此外,Required ConfigurationInternet 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 子项可能存在也可能不存在,如果不存在则应创建。在此键中,创建一个名为 DWORDiexplore.exe 值,值为 0`。

解决方案

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


参考文献

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?