You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Selenium启动Edge后出现无法连接localhost错误求助

我太懂你折腾两天却毫无进展的挫败感了——明明Edge能启动,但Selenium就是连不上localhost,各种常规操作都试过也没用。结合你给出的堆栈信息(核心是java.net.ConnectException: Connection refused: connect),给你几个针对性的排查方向:

针对性解决方案

1. 严格匹配EdgeDriver与Edge浏览器版本

这是旧版Edge+Selenium最容易踩的坑!你用的是旧版Edge(包名Microsoft.MicrosoftEdge_8wekyb3d8bbwe),必须保证:

  • 打开Edge,在地址栏输入edge://settings/help查看浏览器精确版本号
  • 下载完全对应版本MicrosoftWebDriver.exe(注意是旧版Edge的驱动,不是Chromium版的EdgeDriver)
  • 要么把驱动放到系统PATH目录,要么在代码里明确指定驱动路径:
System.setProperty("webdriver.edge.driver", "C:\\your\\path\\MicrosoftWebDriver.exe");
EdgeDriver driver = new EdgeDriver();

2. 强制Java使用IPv4连接

从堆栈里看到程序尝试连接localhost/0:0:0:0:0:0:0:1(IPv6地址),可能你的系统IPv6配置有问题,试试强制Java用IPv4:

  • 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
  • 新建系统变量,变量名JAVA_OPTS,变量值-Djava.net.preferIPv4Stack=true
  • 重启你的IDE或测试运行环境,再执行测试

3. 排查防火墙/安全软件拦截

Windows Defender防火墙或第三方杀毒软件很可能拦截了EdgeDriver和localhost的通信:

  • 临时关闭Windows Defender防火墙(仅测试用,测试后记得恢复),再运行测试
  • 如果是第三方安全软件,暂时禁用其网络防护功能
  • 确认没问题后,给MicrosoftWebDriver.exe和你的Java测试程序添加防火墙例外规则

4. 重置Edge并重新配置环回豁免

你已经执行过环回豁免命令,但可能Edge状态异常导致规则没生效:

  1. 打开Edge,进入edge://settings/reset,选择「重置设置为默认值」
  2. 管理员身份打开CMD,重新执行:
CheckNetIsolation LoopbackExempt -a -n="Microsoft.MicrosoftEdge_8wekyb3d8bbwe"
  1. 重启电脑后再尝试运行测试

5. 升级/降级Selenium版本

你当前用的Selenium 3.11.0版本较老,对旧版Edge的兼容性可能存在问题:

  • 尝试升级到Selenium 3.x的最新稳定版(比如3.141.59),或者降级到3.10.0
  • 更新你的Maven/Gradle依赖后,重新下载驱动并测试

原始错误堆栈信息

[17:58:31.190] - Listening on http://localhost:39298/
FAILED: LoginLogout
org.openqa.selenium.WebDriverException: java.net.ConnectException: Failed to connect to localhost/0:0:0:0:0:0:0:1:39298
Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:26:55.152Z'
System info: host: 'APSPNQ01LTP21', ip: '10.197.1.87', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_211'
Driver info: driver.version: EdgeDriver
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:92)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:545)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:209)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:132)
at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:141)
at org.openqa.selenium.edge.EdgeDriver.<init>(EdgeDriver.java:96)
at testCases.Base.driverInsWindows(Base.java:399)
at testCases.Base.driverIns(Base.java:626)
at testCases.SignInSignOut.LoginLogout(SignInSignOut.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:822)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1130)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:782)
at org.testng.TestRunner.run(TestRunner.java:632)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
at org.testng.SuiteRunner.run(SuiteRunner.java:268)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
at org.testng.TestNG.run(TestNG.java:1064)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:113)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:206)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:177)
Caused by: java.net.ConnectException: Failed to connect to localhost/0:0:0:0:0:0:0:1:39298
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:101)
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:136)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
... 32 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)
... 54 more

内容的提问来源于stack exchange,提问作者Abhishek

火山引擎 最新活动