使用docker-compose运行Selenium测试报Chrome启动崩溃错误如何解决
Docker环境Selenium启动Chrome崩溃解决方案
你遇到的报错为:
(node:231) UnhandledPromiseRejectionWarning: WebDriverError: unknown error: Chrome failed to start: crashed. (chrome not reachable) (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.) Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53' System info: host: '1a84fd607b36', ip: '172.27.0.3', os.name: 'Linux', os.arch: 'amd64', os.version: '5.10.47-linuxkit', java.version: '1.8.0_292' Driver info: driver.version: unknown remote stacktrace: #0 0x00400068e949 <unknown>
可按照以下步骤逐一排查修复:
1. 补充Chrome启动强制参数
在Selenium的ChromeOptions配置中添加以下三个参数,为Docker容器环境适配:
--no-sandbox --disable-dev-shm-usage --headless=new
--no-sandbox:关闭Chrome默认开启的沙箱安全机制,Docker非特权容器默认不具备沙箱运行所需的系统权限,缺少该参数会直接导致Chrome启动崩溃--disable-dev-shm-usage:禁用/dev/shm共享内存存储方案,Docker默认给/dev/shm分配的空间仅为64MB,不足以支撑Chrome正常运行,极易触发内存不足崩溃--headless=new:启用Chrome新版无界面运行模式,无需依赖图形界面相关组件,适配无GUI的容器环境
2. 调整Docker容器启动配置
启动容器时添加--shm-size=2g参数,手动扩容共享内存空间,进一步避免Chrome运行时内存不足问题,示例启动命令:docker run --shm-size=2g <你的镜像名称>
3. 校验运行用户权限
不要直接使用root用户启动Chrome进程,如必须使用root用户运行测试任务,确保已经添加了--no-sandbox启动参数。你也可以在Dockerfile中创建普通用户来运行测试进程,参考配置如下:
RUN useradd -m testuser USER testuser
4. 校验版本匹配性
确认已安装的Google Chrome和ChromeDriver大版本完全一致,例如Chrome版本为118.x,则ChromeDriver也必须为118.x,即使是小版本差异也可能导致启动异常。可通过以下命令分别查看二者版本:google-chrome --versionchromedriver --version
内容的提问来源于stack exchange,提问作者Mohamed Ibrahim
相关产品推荐
相关产品推荐

