启动Internet Explorer时发生意外错误。 IELaunchURL()使用硒3.13.0返回HRESULT 80070012:IEDriverServer_x64_3.13.0

时间:2018-07-04 04:47:26

标签: selenium internet-explorer selenium-webdriver selenium-iedriver iedriverserver

我的硒测试用例在Internet Explorer 11浏览器上执行得很好,但是发生了一些变化,现在出现了以下错误。

Started InternetExplorerDriver server (64-bit)
3.13.0.0
Listening on port 32274
Only local connections are allowed
[ERROR] [BaseTest] [startWebDriverClient] Could not start a new session.      org.openqa.selenium.SessionNotCreatedException: Unexpected error launching Internet Explorer. IELaunchURL() returned HRESULT 80070012 ('There are no more files.') for URL 'http://localhost:32274/'
Build info: version: '3.13.0', revision: '2f0d292', time: '2018-06-25T15:24:21.231Z'
System info: host: 'LUSMIN-F00Q46Y', ip: '***.**.**.**', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '9.0.1'
Driver info: driver.version: unknown
remote stacktrace: 
    at com.tcs.saf.base.BaseTest.startWebDriverClient(BaseTest.java:496)
    at com.tcs.saf.base.BaseTest.beforeMethod(BaseTest.java:258)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:451)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:516)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:707)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:979)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)

下面是我用于实例化IE浏览器的代码;

if (browserType.equalsIgnoreCase("InternetExplorer")) {
            try {
                System.setProperty("webdriver.ie.driver", curProj+"\\drivers\\IEDriverServer.exe");             
                InternetExplorerOptions options = new InternetExplorerOptions();
                options.introduceFlakinessByIgnoringSecurityDomains();
                options.requireWindowFocus();               
                webdriver = new InternetExplorerDriver(options);
                logger.info("getWebDriver - Setting webdriver.ie.driver system property as: " + System.getProperty("webdriver.ie.driver"));
            } catch(IllegalStateException e) {
                logger.error("The path to the driver executable must be set by the webdriver.ie.driver system property. ",e.fillInStackTrace());
                throw new IllegalStateException("The path to the driver executable must be set by the webdriver.ie.driver system property.");
            }
        }

3 个答案:

答案 0 :(得分:0)

请尝试以下提到的步骤,然后尝试运行IE浏览器的自动化脚本。

  1. 仅对于IE 11,您需要在目标计算机上设置一个注册表项,以便驱动程序可以维持与其创建的Internet Explorer实例的连接。对于32位Windows安装,必须在注册表编辑器中检查的注册表项是HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BFCACHE。

  2. 对于64位Windows安装,密钥为HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BFCACHE。

请注意,FEATURE_BFCACHE子项可能存在也可能不存在,如果不存在则应创建。在该密钥内部,创建一个名为iexplore.exe的DWORD值,其值为0。

所有区域的保护模式设置均相同。 增强保护模式被禁用。

答案 1 :(得分:0)

根据错误日志,您正在使用Java9。Selenium还不支持Java 9。 请更改设置以使用Java 8,然后重试。它可以解决问题。

答案 2 :(得分:0)

此错误消息...

Could not start a new session. org.openqa.selenium.SessionNotCreatedException: Unexpected error launching Internet Explorer. IELaunchURL() returned HRESULT 80070012 ('There are no more files.') for URL 'http://localhost:32274/'

...表示 IEDriverServer 无法启动/产生新的 WebBrowser ,即 IE浏览器会话。


根据Unexpected error launching Internet Explorer. IELaunchURL() returned HRESULT 80070012 ('There are no more files.') @JimEvans明确提到:

  

IELaunchURL()函数是Windows API。驾驶员只是简单地调用它。如果返回错误,那就是问题所在。 Microsoft没有提供有关使用此API时会导致此错误的原因的文档。如果您尝试在Windows 10等工作站级操作系统上而不是Windows Server上运行测试,会发生什么情况?我意识到这不是一个“银弹”解决方案,但是服务器环境中可能存在一些安全性设置,而工作站环境中没有这些设置会阻止在该上下文中分配其他文件句柄。


introduceFlakinessByIgnoringSecurityDomains();

当您按照You're Doing It Wrong: IE Protected Mode and WebDriver添加了选项introduceFlakinessByIgnoringSecurityDomains();时,@ JimEvans再次明确提到添加options.introduceFlakinessByIgnoringSecurityDomains();可能会使您摆脱最初的例外,并且可以在大多数情况下运行测试没有事件。但是,使用此功能并不能解决潜在的问题。如果越过保护模式边界,则会出现非常意外的行为,包括挂起元素位置不起作用点击未被传播,可能会发生。


解决方案

如果您查看Required ConfigurationInternet Explorer Driver,则会明确提及以下重点:

保护模式

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

ProtectedModeSettings

浏览器缩放级别

浏览器缩放级别必须设置为100%,以便可以将本地鼠标事件设置为正确的坐标。

参考

您可以在以下位置找到一些详细的讨论: