GitLab流水线Docker容器中E2E测试失败(Chrome启动异常)
解决Docker容器中E2E测试Chrome启动失败的问题
问题根源
你碰到的DevToolsActivePort file doesn't exist错误,本质是Chrome在无图形界面的Docker容器环境下,默认启动配置不兼容导致的——容器里没有X11图形环境,同时默认的sandbox机制和共享内存限制会让Chrome异常退出。
解决方案步骤
1. 更新Protractor配置文件
找到项目里的protractor.conf.js(一般在根目录或e2e文件夹下),修改capabilities配置,给Chrome添加无头模式和必要的启动参数:
capabilities: { browserName: 'chrome', chromeOptions: { args: [ '--headless', // 启用无头模式,无需图形界面 '--no-sandbox', // 禁用sandbox,容器环境下必须开启这个参数 '--disable-dev-shm-usage', // 规避容器内/dev/shm空间不足的问题 '--disable-gpu', // 无头模式下不需要GPU加速 '--window-size=1920,1080' // 固定窗口尺寸,确保测试元素能正常被定位 ] } },
2. 调整GitLab CI脚本
确保ng e2e命令能正确读取你的配置文件,如果需要可以直接在命令行指定路径:
ng e2e -c=mock --protractor-config=e2e/protractor.conf.js
(如果你的配置文件路径不同,替换成实际路径即可)
3. 验证版本兼容性
你使用的trion/ng-cli-karma:8.3.25镜像已经预装了对应版本的Chrome和ChromeDriver,不过可以在before_script里加一行验证版本匹配:
chromedriver --version
确保ChromeDriver版本和google-chrome --version的输出大版本一致(小版本差异通常不影响,但跨大版本不匹配会引发启动问题)。
额外备用方案
如果上述修改后仍有问题,可以尝试在CI的before_script里补充安装xvfb(虽然无头模式下通常不需要,但作为备用):
apt-get update && apt-get install -y xvfb
内容的提问来源于stack exchange,提问作者rapha31
相关产品推荐
相关产品推荐

