Ubuntu环境下Selenium无法启动Google Chrome的排查求助
我之前在Jenkins环境里折腾Selenium自动化测试时,也碰到过和你完全一样的报错——Chrome总是异常退出,DevToolsActivePort文件找不到。除了你已经配置的--no-sandbox和--disable-dev-shm-usage,还有几个靠谱的修复方向可以挨个试试:
指定Chrome二进制文件的完整路径
有时候Jenkins的运行环境找不到正确的Chrome安装位置,尤其是你手动安装Chrome而非通过apt的情况。可以在ChromeOptions里显式设置:ChromeOptions options = new ChromeOptions(); options.setBinary("/opt/google/chrome/chrome"); // 根据你的实际路径调整 options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage");可以先在Jenkins机器上执行
which google-chrome命令,确认Chrome的实际路径。启用Chrome无头模式(新版参数)
Jenkins通常运行在无桌面的服务器环境下,必须让Chrome以无头模式启动。注意新版Chrome(112+)推荐使用--headless=new参数,旧版的--headless可能存在兼容性问题:options.addArguments("--headless=new");检查Jenkins用户的权限与文件权限
确保Jenkins进程的运行用户(默认是jenkins用户)对Chrome、ChromeDriver有执行权限,同时对临时目录有读写权限:- 给ChromeDriver添加执行权限:
sudo chmod +x /path/to/your/chromedriver - 让jenkins用户拥有Chrome目录的访问权限:
sudo chown -R jenkins:jenkins /opt/google/chrome - 避免直接给jenkins用户sudo权限,优先调整文件所属组或权限。
- 给ChromeDriver添加执行权限:
严格匹配Chrome与ChromeDriver版本
版本不兼容是这类问题的重灾区!一定要保证Chrome和ChromeDriver的大版本完全一致:- 在Jenkins机器上执行
google-chrome --version查看Chrome版本(比如Google Chrome 119.0.6045.105) - 下载对应大版本的ChromeDriver,替换掉当前项目中或环境里的旧驱动。
- 在Jenkins机器上执行
配置虚拟显示(Xvfb)
如果你的Jenkins环境没有任何显示服务,即使开了无头模式也可能出问题。可以通过Xvfb创建虚拟桌面:- 先安装Xvfb:
sudo apt-get install xvfb - 在Jenkins的构建步骤中,先执行启动命令:
Xvfb :99 -ac & export DISPLAY=:99,再运行mvn test - 更省心的方式是安装Jenkins的Xvfb插件,它会自动管理虚拟显示环境。
- 先安装Xvfb:
禁用GPU加速
虽然新版无头模式下这个参数不是必须,但在某些特殊的服务器环境中,添加它能解决启动异常:options.addArguments("--disable-gpu");
建议你按照「版本匹配→无头模式→路径指定→权限检查」的顺序来排查,大部分情况下前三个步骤就能解决问题。
内容的提问来源于stack exchange,提问作者Keker

