You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:36:10