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

GitLab CI/CD中WebdriverIO测试session崩溃报错的排查与解决

GitLab CI中WebdriverIO+Cucumber测试页面崩溃问题解决

问题概述

在GitLab CI环境运行基于WebdriverIO(JavaScript)+Cucumber的自动化测试时,出现unknown error: session deleted because of page crash错误,表现为页面标签崩溃、无法确定加载状态;本地运行测试无异常,CI环境使用Node.js 12.22版本,采用同步模式构建。

问题原因分析

  1. Chrome驱动与浏览器版本不兼容:项目依赖的chromedriver版本为79.0.3,但CI中selenium/standalone-chrome提供的Chrome版本为111.0.5563.146,驱动与浏览器版本差距过大,导致通信故障引发页面崩溃。
  2. 无头Chrome资源不足:GitLab CI容器默认内存配额有限,无头Chrome默认配置的资源占用超出容器限制,导致页面进程被系统强制终止。
  3. WebdriverIO服务配置冲突:配置中同时启用了selenium-standalone本地服务和CI提供的selenium/standalone-chrome远程服务,双重驱动管理引发冲突。
  4. 同步模式与旧Node版本限制:Node.js 12对现代Chrome的兼容性有限,同步模式依赖的fibers库在高版本浏览器环境下稳定性不足。

修复方案

1. 对齐Chrome驱动与浏览器版本

更新package.json中的chromedriver版本,匹配CI环境的Chrome 111版本:

"dependencies": {
  // ... 其他依赖项
  "chromedriver": "^111.0.0"
}

或者直接移除chromedriver依赖,让CI的selenium/standalone-chrome服务自动管理匹配版本的驱动。

2. 优化无头Chrome启动参数

在WebdriverIO配置中添加资源限制和性能优化参数,适配CI容器环境:

capabilities: [
  {
    browserName: 'chrome',
    "goog:chromeOptions": {
      "args": [
        '--headless',
        '--disable-gpu',
        '--timeout=300000',
        '--no-sandbox', // CI环境必备,禁用沙箱模式
        '--disable-dev-shm-usage', // 避免/dev/shm内存不足问题
        '--window-size=1920,1080', // 固定窗口大小,避免渲染异常
        '--disable-extensions',
        '--single-process', // 单进程模式减少资源占用
        '--homedir=/tmp',
        '--disk-cache-dir=/tmp/cache-dir'
      ]
    }
  },
],

3. 解决服务配置冲突

移除WebdriverIO配置中的selenium-standalone服务,仅使用CI提供的远程Selenium服务:

// 删除以下配置项
services: [ [ 'selenium-standalone',{ drivers: { firefox: '0.29.1', chrome: 'latest', chromiumedge: 'latest' } } ], ],

4. 调整CI环境资源配置

在GitLab CI配置中增加内存资源请求(需GitLab Runner支持),并优化依赖安装:

e2e:chrome: &e2e
  stage: test-automation
  image: timbru31/java-node:11-jre-erbium
  services:
    - selenium/standalone-chrome
  resources:
    requests:
      memory: "2Gi" # 提升内存配额,避免资源耗尽
      cpu: "1"
  script:
    - npm install --force # 强制安装,解决版本依赖冲突
    - npm run ci-stg

5. 迁移到异步模式(可选)

WebdriverIO v5的同步模式稳定性较差,建议逐步迁移到异步模式:

  • 移除@wdio/sync依赖
  • 将所有同步测试代码改为异步(用await替代同步调用)
  • 在配置中设置sync: false

验证步骤

  1. 推送修改后的配置到GitLab仓库
  2. 触发CI流水线,观察测试运行状态
  3. 若问题仍存在,将WebdriverIO日志级别改为debug,获取更详细的错误信息排查

内容的提问来源于stack exchange,提问作者Liliia Lobko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:29:51