如何解决Java Selenium调用driver.close()出现java.net.SocketException: Connection reset异常
SocketException: Connection reset 异常解决方案
异常根因
触发异常的核心原因是点击退出登录操作后,浏览器会话已经被服务端/前端逻辑销毁,Selenium驱动和浏览器之间的连接已经中断,此时再调用driver.close()尝试操控已经不存在的会话,就会抛出连接重置异常。
可落地的解决方法
- 方案1:执行
driver.close()前先校验会话有效性
先通过轻量指令确认驱动会话还存活,再执行关闭操作,异常场景直接跳过即可,代码示例:driver.findElement(By.xpath("//*[text()='Log Out']")).click(); try { // 调用空指令验证会话状态 driver.getTitle(); driver.close(); } catch (java.net.SocketException | org.openqa.selenium.NoSuchSessionException e) { // 会话已销毁,无需额外处理 } - 方案2:直接用
driver.quit()替代driver.close()driver.quit()的逻辑本身兼容会话已销毁的场景,不会抛出这类连接异常,同时还会彻底清理驱动进程、浏览器临时进程,避免资源残留。 - 方案3:增加显式等待确认退出流程完成
部分场景下退出登录的跳转逻辑还未执行完成,会话未完全销毁就调用了关闭操作,也会触发异常,可以等待退出后的目标页面元素加载完成再执行关闭:driver.findElement(By.xpath("//*[text()='Log Out']")).click(); // 等待登录页元素加载完成,确认退出流程结束 new org.openqa.selenium.support.ui.WebDriverWait(driver, java.time.Duration.ofSeconds(2)) .until(org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated(By.id("login_username"))); driver.close();
其他排查方向
- 确认Selenium核心包版本、浏览器版本、对应浏览器驱动版本三者完全匹配,版本不兼容也会偶发同类连接异常
- 检查是否有其他逻辑在退出登录操作后已经调用过
driver.quit(),重复调用关闭类接口也会触发该异常
内容的提问来源于stack exchange,提问作者laxmi
相关产品推荐
相关产品推荐

