TestNG多线程运行Selenium测试偶发WebDriverException: message=null求助
问题结论
- 该异常是Selenium 4预发布版本的已知缺陷,属于官方修复过的W3C响应解析逻辑bug。
根本原因
- 你使用的Selenium Java依赖版本为
4.0.0-alpha-6、Selenium Grid镜像为4.0.0-rc1预发布版,这两个版本的W3CHttpResponseCodec类在解析驱动返回的响应时,没有对message字段做非空校验,当浏览器驱动偶发返回空消息的响应时,就会抛出null value in entry: message=null异常。 - 该异常和多线程执行、页面刷新操作本身没有直接关联,刷新只是刚好触发了驱动返回响应的场景,所以触发位置随机,仅影响单次操作对应的测试用例。
解决方案
1. 优先方案:升级稳定版本
- 将项目中的Selenium Java依赖升级到4.0.0及以上的正式稳定版,建议直接升级到最新的Selenium 4稳定版
- 同步更换Selenium Grid的Docker镜像为对应版本的正式稳定版,停止使用alpha、rc这类非正式预发布镜像
- 版本对齐后该bug会被直接修复,无需额外修改业务代码
2. 临时规避方案(暂无法升级时使用)
- 对
webDriver.navigate().refresh()这类公共操作增加重试逻辑,捕获该特定的WebDriverException后重试2~3次,因为异常是偶发的,重试大多能正常执行成功 - 确认多线程执行时每个线程持有独立的WebDriver实例,禁止多线程共享WebDriver,避免线程安全问题提升异常出现概率
3. 配套优化
- 对齐TestNG并发线程数和Selenium Grid的最大并发会话数,避免会话排队超时触发额外的空响应异常
内容的提问来源于stack exchange,提问作者Asanke
相关产品推荐
相关产品推荐

