2

此处更新到 64 位的 IEDriverServer 3.9 后,尝试使用 IE(版本:11.0.9600.17842,Win8.1)运行任何测试时出现以下异常。有谁知道如何解决这个问题,还是我应该降级回 3.8?

OpenQA.Selenium.WebDriverException:向远程 WebDriver 服务器发送 HTTP 请求以获取 URL http://localhost:53379/session时抛出了一个具有空响应的异常。

异常状态为 ReceiveFailure,消息为:底层连接已关闭:接收时发生意外错误。---->

System.Net.WebException:底层连接已关闭:接收时发生意外错误。----> System.IO.IOException : Unable to read data from the transport connection: 一个现有的连接被远程主机强行关闭。----> System.Net.Sockets.SocketException:现有连接被远程主机强行关闭 TearDown:System.NullReferenceException:对象引用未设置为对象的实例。

堆栈跟踪如下:

结果 StackTrace:OpenQA.Selenium.Remote.HttpCommandExecutor.MakeHttpRequest(HttpRequestInfo requestInfo) 在 OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute) 在 OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(Command commandToExecute) 在 OpenQA.Selenium。 Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 参数) 在 OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities) 在 OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities) 在 OpenQA.Selenium .IE.InternetExplorerDriver..ctor(InternetExplorerDriverService 服务,InternetExplorerOptions 选项)在 OpenQA.Selenium.IE.InternetExplorerDriver..ctor() --WebException 在 System.Net。HttpWebRequest.GetResponse() 在 OpenQA.Selenium.Remote.HttpCommandExecutor.MakeHttpRequest(HttpRequestInfo requestInfo) --IOException 在 System.Net.Sockets.NetworkStream.Read(Byte[] 缓冲区,Int32 偏移量,Int32 大小) 在 System.Net.PooledStream .Read(Byte[] buffer, Int32 offset, Int32 size) at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead) --SocketException at System.Net.Sockets.Socket.Receive(Byte[] buffer , Int32 偏移量, Int32 大小, SocketFlags socketFlags) 在 System.Net.Sockets.NetworkStream.Read(Byte[] 缓冲区, Int32 偏移量, Int32 大小)Int32 大小)在 System.Net.PooledStream.Read(字节 [] 缓冲区,Int32 偏移量,Int32 大小)在 System.Net.Connection.SyncRead(HttpWebRequest 请求,布尔 userRetrievedStream,布尔 probeRead)--System.Net.Sockets 处的SocketException .Socket.Receive(Byte[] 缓冲区,Int32 偏移量,Int32 大小,SocketFlags socketFlags) 在 System.Net.Sockets.NetworkStream.Read(Byte[] 缓冲区,Int32 偏移量,Int32 大小)Int32 大小)在 System.Net.PooledStream.Read(字节 [] 缓冲区,Int32 偏移量,Int32 大小)在 System.Net.Connection.SyncRead(HttpWebRequest 请求,布尔 userRetrievedStream,布尔 probeRead)--System.Net.Sockets 处的SocketException .Socket.Receive(Byte[] 缓冲区,Int32 偏移量,Int32 大小,SocketFlags socketFlags) 在 System.Net.Sockets.NetworkStream.Read(Byte[] 缓冲区,Int32 偏移量,Int32 大小)

4

1 回答 1

0

使用来自http://selenium-release.storage.googleapis.com的IEDriverServer 3.9.0.0 for Windows 64-bit我能够重现IEDriverServer_x64_3.9.0的问题。

错误堆栈跟踪:

Started InternetExplorerDriver server (64-bit)
3.9.0.0
Listening on port 28286
Only local connections are allowed
Exception in thread "main" org.openqa.selenium.WebDriverException: java.net.ConnectException: Failed to connect to localhost/0:0:0:0:0:0:0:1:28286
Build info: version: '3.9.1', revision: '63f7b50', time: '2018-02-07T22:42:28.403Z'
System info: host: 'ATECHM-03', ip: '192.168.1.35', os.name: 'Windows 8', os.arch: 'amd64', os.version: '6.2', java.version: '1.8.0_144'
Driver info: driver.version: InternetExplorerDriver
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:92)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:219)
    at org.openqa.selenium.ie.InternetExplorerDriver.run(InternetExplorerDriver.java:223)
    at org.openqa.selenium.ie.InternetExplorerDriver.<init>(InternetExplorerDriver.java:215)
    at org.openqa.selenium.ie.InternetExplorerDriver.<init>(InternetExplorerDriver.java:152)
    at demo.A_IE_simple.main(A_IE_simple.java:13)
Caused by: java.net.ConnectException: Failed to connect to localhost/0:0:0:0:0:0:0:1:28286
    at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:240)
    at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:158)
    at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:256)
    at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:134)
    at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:113)
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
    at okhttp3.RealCall.execute(RealCall.java:77)
    at org.openqa.selenium.remote.internal.OkHttpClient.execute(OkHttpClient.java:104)
    at org.openqa.selenium.remote.internal.OkHttpClient.execute(OkHttpClient.java:54)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:101)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:73)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:138)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    ... 6 more
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at okhttp3.internal.platform.Platform.connectSocket(Platform.java:125)
    at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:238)
    ... 29 more

虽然快速测试IEDriverServer_Win32_3.9.0没有显示任何错误。虽然IEDriverServer_Win32_3.9.0IEDriverServer_x64_3.9.0已发布,但从未明确推送/发布以在seleniumhq.org页面的“下载”选项卡上可用。

IEDriverServer.exeCHANGELOG清楚地提到了以下免责声明:

The "major" and "minor" fields are synchronized to releases of the Selenium
project. Changes in the "build" field indicate interim releases made publicly
available via the project downloads page. Changes in "revision" field indicate
private releases checked into the prebuilts directory of the source tree, but
not made generally available on the downloads page.

此外,IEDriverServer.exe v3.9.0.1CHANGELOG提到了以下免责声明:

Finally, there is every chance that, despite all efforts to the contrary,
it's possible that there are new regressions introduced by this change.
Multiple test suites have been run using this change, and none have
failed thus far due to the changes herein. Claims that this change is
causing a specific failure should be accompanied by a full test case, or
issues reported against this change will be summarily closed.

解决方案

简单的解决方案是:

  • 在 32 位和 64 位平台上使用IEDriverServer_Win32_3.9.0 。
  • 恢复到IEDriverServer_x64_3.8.0
于 2018-02-21T06:54:39.600 回答