You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu14.04下用Maven命令执行TestNG套件时Chrome无法启动

解决方案:Ubuntu下sudo执行Maven跑TestNG时Chrome无法启动的问题

这个问题我之前在Ubuntu环境里也碰到过,核心原因是sudo运行命令时,会切换到root用户的环境,和你平时在Eclipse里用普通用户运行的环境差异很大,导致ChromeDriver找不到Chrome或者没有权限启动它。给你几个可行的解决办法,按推荐程度排序:

1. 最推荐:解决权限问题,不用sudo执行Maven

你提到因为机器权限问题需要加sudo,大概率是Maven的本地仓库(默认是~/.m2)权限被root占用了,普通用户没有写入权限。可以先修改仓库的权限,让你的普通用户能读写:

chown -R $USER:$USER ~/.m2

之后直接用普通用户执行命令就行:

mvn clean install -DsuiteXmlFile=testng.xml

这样完全避免了sudo带来的环境不一致问题,是最稳妥的方案。

2. 临时授权X11显示,让sudo下能启动Chrome

Ubuntu下图形程序需要访问X服务器,sudo默认不会继承普通用户的DISPLAY环境变量,也没有访问权限。可以先执行这条命令临时授权root访问你的X会话:

xhost +local:root

然后执行Maven命令时带上DISPLAY参数:

sudo DISPLAY=$DISPLAY mvn clean install -DsuiteXmlFile=testng.xml

注意:这个授权是临时的,重启后会失效,适合临时应急用。

3. 在代码里指定Chrome二进制文件路径

有时候sudo下找不到Chrome的可执行文件,因为root的PATH和普通用户不一样。你可以在TestNG的代码里手动指定Chrome的绝对路径:

ChromeOptions options = new ChromeOptions();
// 替换成你机器上Chrome的实际路径,一般是/usr/bin/google-chrome或者/usr/bin/chromium-browser
options.setBinary("/usr/bin/google-chrome");
WebDriver driver = new ChromeDriver(options);

这样不管是普通用户还是sudo运行,ChromeDriver都能精准找到Chrome程序。

4. 检查ChromeDriver和Chrome版本匹配

虽然Eclipse里能正常运行,但sudo下可能调用的是不同版本的Chrome?可以分别执行以下命令检查版本:
普通用户下:

google-chrome --version
chromedriver --version

sudo下:

sudo google-chrome --version
sudo chromedriver --version

确保两者版本对应(ChromeDriver的版本要和Chrome大版本匹配,比如Chrome 114对应ChromeDriver 114.x),如果版本不匹配,就下载对应版本的ChromeDriver替换掉。

内容的提问来源于stack exchange,提问作者Wasiq Bhamla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:04:27