0

我在 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] 
4

1 回答 1

0

此错误消息...

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 无法启动/产生新的浏览上下文,即Internet Explorer 浏览器会话作为 COM 对象。


Internet Explorer 的保护模式设置

JimEvans在他的文章中提到,同时通过器:

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


此外,Internet Explorer 驱动程序的必需配置清楚地提到:

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

保护模式设置

  • 此外,必须为 IE 10 及更高版本禁用增强保护模式。此选项位于AdvancedInternet 选项对话框的选项卡中。
  • 必须将浏览器缩放级别设置为,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名为iexplore.exe0` 的值。

解决方案

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


参考

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

于 2021-02-15T09:32:52.750 回答