通过SSH运行Selenium时Chrome崩溃报错的问题求助
SSH运行Selenium Chrome崩溃(DevToolsActivePort不存在)解决方法
问题背景
通过SSH远程执行Selenium测试时,Chrome频繁崩溃,报错DevToolsActivePort file doesn't exist。本地物理机运行测试完全正常,但SSH命令执行就失败。
使用的SSH命令:
ssh -tt -o 'StrictHostKeyChecking=no' <ip-address> 'Xvfb :89 -ac -noreset \&;;export DISPLAY=:89;./gradlew clean test --tests "testName" '
本地正常运行命令:
./gradlew clean test --tests "testName"
环境信息:Chrome 122、Selenium 4.13.0、Linux AWS(6.5.0-1015-aws),直接通过SSH启动Chrome时会出现GPU初始化失败等错误。
解决步骤
1. 调整Chrome启动参数,规避GPU及权限问题
在Selenium的ChromeOptions中添加以下参数,彻底避免无界面环境下的渲染冲突:
ChromeOptions options = new ChromeOptions(); // 禁用GPU加速,解决初始化失败问题 options.addArguments("--disable-gpu"); // 禁用沙箱(无root权限执行时必须添加) options.addArguments("--no-sandbox"); // 指定固定调试端口,避免DevTools端口随机分配失败 options.addArguments("--remote-debugging-port=9222"); // 启用新版无头模式,更稳定的无界面运行 options.addArguments("--headless=new"); // 禁用共享内存,避免内存不足导致崩溃 options.addArguments("--disable-dev-shm-usage");
2. 优化Xvfb启动命令,确保环境就绪
修改SSH命令,给Xvfb分配明确的屏幕参数,并等待服务完全启动:
ssh -tt -o 'StrictHostKeyChecking=no' <ip-address> 'Xvfb :89 -screen 0 1920x1080x24 -ac -noreset & sleep 2; export DISPLAY=:89; ./gradlew clean test --tests "testName"'
-screen 0 1920x1080x24:指定屏幕分辨率和颜色深度,避免界面渲染异常sleep 2:等待Xvfb完全初始化后再执行测试,避免DISPLAY环境未就绪
3. 确保ChromeDriver与Chrome版本完全匹配
Selenium 4.13.0默认集成的ChromeDriver可能不兼容Chrome 122,需手动下载对应版本的ChromeDriver并配置路径:
System.setProperty("webdriver.chrome.driver", "/opt/chromedriver/chromedriver");
4. 手动验证Xvfb+Chrome环境
在SSH会话中先单独验证环境是否正常,排除测试框架干扰:
Xvfb :89 -screen 0 1920x1080x24 -ac -noreset & sleep 2 export DISPLAY=:89 /opt/google/chrome/chrome --headless=new --disable-gpu --no-sandbox --remote-debugging-port=9222 --version
如果能正常输出Chrome版本,说明环境没问题,再运行测试。
5. 修正SSH命令转义问题
原命令中\&;;的转义逻辑可能导致Xvfb未正确后台运行,改为以下写法:
ssh -tt -o 'StrictHostKeyChecking=no' <ip-address> '(Xvfb :89 -screen 0 1920x1080x24 -ac -noreset &); sleep 2; export DISPLAY=:89; ./gradlew clean test --tests "testName"'
内容的提问来源于stack exchange,提问作者user522170
相关产品推荐
相关产品推荐

