Selenium自动化测试报WebSocket空指针错误,寻求解决方案
解决思路:Selenium ChromiumDriver quit时出现WebSocket NPE问题
根据你提供的错误栈和描述,这个NullPointerException是在ChromiumDriver执行quit()方法时,尝试关闭未初始化成功的WebSocket连接导致的,结合你未修改代码但突然出现问题的情况,以下是具体解决方向:
检查浏览器与WebDriver版本兼容性
浏览器(Chrome/Edge等Chromium内核浏览器)会自动更新,若更新后的版本与项目中使用的ChromeDriver/EdgeDriver版本不匹配,会导致Selenium与浏览器的WebSocket通信异常。
操作步骤:- 查看浏览器版本(Chrome:设置→关于Chrome)
- 下载对应主版本号的WebDriver(比如浏览器是123.x,就下载123.x版本的Driver)
- 替换项目中旧的WebDriver文件,或确保依赖管理工具(如Maven/Gradle)拉取的Driver版本匹配
升级Selenium依赖到最新稳定版
旧版本Selenium可能存在对新版本Chromium浏览器的兼容性bug,升级到最新稳定版可以修复这类WebSocket连接相关的问题。比如在Maven中更新selenium-java的版本:<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.18.1</version> <!-- 替换为最新稳定版 --> </dependency>检查测试初始化逻辑
错误发生在Step_DoSomething.before方法中调用quit()时,需确认:- 是否在Driver实例未成功创建的情况下就调用了
quit() - 初始化Driver时是否抛出了隐藏的异常,导致WebSocket连接未建立但Driver对象未被标记为无效
可以在before方法中增加Driver实例的非空判断,或捕获初始化时的异常:
// 示例:在quit前检查Driver是否有效 if (driver != null) { try { driver.quit(); } catch (Exception e) { // 记录日志,避免终止测试流程 e.printStackTrace(); } }- 是否在Driver实例未成功创建的情况下就调用了
排查网络环境干扰
若3月14日起网络环境有变化(如新增代理、防火墙规则),可能导致Selenium与浏览器之间的WebSocket连接无法建立,最终socket对象为null。可以尝试在无代理的网络环境下运行测试,或配置Selenium使用对应代理:Proxy proxy = new Proxy(); proxy.setHttpProxy("proxy.example.com:8080"); ChromeOptions options = new ChromeOptions(); options.setProxy(proxy); WebDriver driver = new ChromeDriver(options);禁用浏览器自动更新
为避免后续再次出现版本不匹配问题,可以禁用浏览器的自动更新功能(不同系统操作不同,比如Windows组策略、Mac系统设置),或使用固定版本的浏览器镜像进行测试。
内容的提问来源于stack exchange,提问作者Vladislav
相关产品推荐
相关产品推荐

