执行Selenium自动化脚本报org.openqa.selenium.WebDriverException页面崩溃报错
问题诱发原因
- 版本兼容性缺陷:selenium-java 4.0.0版本针对Chrome 93-95的适配存在已知的会话状态同步bug,和对应版本chromedriver交互时偶发内存泄漏、状态校验失败,直接触发tab进程崩溃。
- 元素交互时机错误:代码中点击第一个元素后仅使用
Thread.sleep(1000)做固定等待,若页面存在局部刷新、JS事件未绑定完成或前端框架DOM未挂载完成,此时强行触发第二个元素的点击操作,会直接导致Chrome渲染进程崩溃,这类情况在使用React/Vue等重前端框架的页面中出现概率极高。 - Chrome自身版本bug:Chrome 93-95版本在自动化测试场景下,存在频繁DOM交互触发渲染进程崩溃的未修复问题,属于官方当时版本的已知缺陷。
- 启动参数不全:仅添加
--disable-dev-shm-usage不足以覆盖所有稳定性场景,缺少沙盒关闭、GPU禁用等关键参数,尤其是在无桌面的Linux环境运行时,很容易触发权限类崩溃。
可行解决方案
1. 修复版本兼容性
- 方案一:将selenium-java升级到4.1.1及以上版本,该版本已修复Chrome 93+的会话同步兼容问题,同时保证Chrome浏览器和chromedriver的主版本号完全一致。
- 方案二:将Chrome和chromedriver同步降级到92版本,该版本和selenium-java 4.0.0的兼容性更稳定。
2. 优化元素交互逻辑
移除所有Thread.sleep固定等待,全量使用显式等待校验元素状态后再执行交互,优化后的代码示例如下:
@Then("^Click on registration application link$") public void click_on_registration_application_link() throws Throwable { WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(60)); WebElement caseManagement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("TabCS"))); caseManagement.click(); // 等待注册申请链接可点击后再执行点击,避免渲染未完成触发崩溃 WebElement regAppLink = wait.until(ExpectedConditions.elementToBeClickable(By.id("tbg_registrationapplication"))); regAppLink.click(); }
3. 补充Chrome启动参数
在原有启动参数基础上新增以下配置:
--no-sandbox:关闭沙盒模式,解决无桌面环境下的权限异常--disable-gpu:关闭GPU加速,避免渲染进程冲突--disable-extensions:禁用所有第三方扩展,排除扩展干扰--disable-site-isolation-trials:关闭站点隔离,减少多进程冲突
如果是无头模式运行,额外添加--headless=new参数,适配Chrome 93+的新无头模式逻辑。
4. 新增容错重试机制
在测试框架层面增加步骤重试逻辑,捕获到session deleted类报错时,自动重启driver并重试当前步骤最多3次,避免偶发崩溃导致全量测试用例失败。同时建议每个测试用例执行完成后重启driver,清除之前操作残留的内存、缓存数据,避免累计异常。
内容的提问来源于stack exchange,提问作者Maxwell Maragia
相关产品推荐
相关产品推荐

