Docker环境下使用TestCafe启动Chrome浏览器失败,报WebSocket连接关闭错误求助
Docker环境下使用TestCafe启动Chrome浏览器失败,报WebSocket连接关闭错误求助
大家好,我最近在折腾Docker+TestCafe+Google Chrome的UI自动化测试,卡了好几天没解决,来求助一下!
问题核心现象
我在Docker容器里运行TestCafe测试时,指定用Google Chrome浏览器总是启动失败,抛出WebSocket连接关闭的错误日志,具体内容如下:
Error: WebSocket connection closed at /app/node_modules/chrome-remote-interface/lib/chrome.js:94:35 at Chrome._handleConnectionClose (/app/node_modules/chrome-remote-interface/lib/chrome.js:256:13) at WebSocket.<anonymous> (/app/node_modules/chrome-remote-interface/lib/chrome.js:243:22) at WebSocket.emit (node:events:518:28) at WebSocket.emit (node:domain:489:12) at WebSocket.emitClose (/app/node_modules/ws/lib/websocket.js:246:10) at Receiver.receiverOnFinish (/app/node_modules/ws/lib/websocket.js:1060:20) at Receiver.emit (node:events:518:28) at Receiver.emit (node:domain:489:12) at finish (node:internal/streams/writable:955:10)
我推测问题根源是Chrome在Docker容器里没能正常启动——虽然单独进入容器执行chrome --version能看到是最新版Chrome,而且之前用Chromium 1.20的时候能正常启动浏览器,但截图功能有问题,所以想换成Google Chrome试试,结果就卡在这里了。
我的环境与配置
- 本地机器:Mac
- 容器基础镜像:
node:22-bullseye(指定linux/amd64平台适配) - 测试框架:TestCafe
- 容器构建与启动脚本:
run-snapshot.sh,挂载本地项目目录到容器内运行测试
Dockerfile 内容
FROM --platform=linux/amd64 node:22-bullseye # Suppress interactive prompts and D-Bus probing ENV DEBIAN_FRONTEND=noninteractive ENV DBUS_SESSION_BUS_ADDRESS=/dev/null # Install Google Chrome and dependencies RUN apt-get update && apt-get install -y \ wget \ curl \ gnupg \ ca-certificates \ fonts-liberation \ libasound2 \ libatk-bridge2.0-0 \ libatk1.0-0 \ libcups2 \ libdbus-1-3 \ libdrm2 \ libgbm1 \ libgtk-3-0 \ libnspr4 \ libnss3 \ libx11-xcb1 \ libxcomposite1 \ libxdamage1 \ libxrandr2 \ libxss1 \ libxext6 \ libxfixes3 \ libxrender1 \ libxi6 \ libxtst6 \ xdg-utils \ awscli \ --no-install-recommends && \ wget -qO - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - && \ echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list && \ apt-get update && \ apt-get install -y google-chrome-stable --no-install-recommends # Symlinks so TestCafe can find 'chrome' RUN ln -sf /usr/bin/google-chrome /usr/bin/chrome && \ ln -sf /usr/bin/google-chrome /usr/bin/chromium # Verify Chrome installation RUN google-chrome --version # Project setup WORKDIR /app COPY . . RUN yarn config set strict-ssl false RUN yarn install # Default command to run your visual tests CMD ["yarn", "run", "ci:visual"]
启动脚本 run-snapshot.sh 内容
#!/bin/bash # Load environment variables from .env file set -a source .env set +a # Default values SNAPSHOT=${SNAPSHOT:-actual} TESTS=${TESTS:-tests/visual/*.test.ts} # Run the Docker container with all env vars docker run -it --rm \ -v "$(pwd)":/app \ -w /app \ -e ENV="$ENV" \ -e TESTS="$TESTS" \ visual-test-runner
已经排查过的点
- 容器内Chrome安装完全正常:通过
docker run -it --rm -v "$(pwd)":/app -w /app visual-test-runner bash进入容器,执行chrome --version能正常返回最新版本号 - 本地直接运行
yarn run ci:visual毫无问题:Chrome无头模式能正常启动,测试执行、截图功能都正常 - 之前用Chromium 1.20在容器内可以启动浏览器,但截图功能不符合需求,所以才换成Google Chrome
求助需求
有没有大佬遇到过类似的问题?怎么才能让TestCafe在Docker容器里正常启动Google Chrome并顺利执行测试呢?
内容来源于stack exchange
相关产品推荐
相关产品推荐

