Ubuntu14.04下用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

