Ubuntu环境下运行Selenium测试遇Chrome启动异常问题求助
解决Ubuntu下Selenium ChromeDriver启动失败问题
错误日志
[1;31mERROR[m] [1;31m Run 1: unknown error: Chrome failed to start: exited abnormally. (unknown error: DevToolsActivePort file doesn't exist) (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:17:03' System info: host: 'ip-10-1-8-153', ip: '10.1.8.153', os.name: 'Linux', os.arch: 'amd64', os.version: '5.4.0-1045-aws', java.version: '11.0.16' Driver info: driver.version: ChromeDriver remote stacktrace: #0 0x55cc6f1882c3 <unknown>
当前测试代码配置
public WebDriver beforeScenario() { if (cr.valueOnTheKey("Env").equals("PROD")) { WebDriverManager.chromedriver().setup(); System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedrive"); ChromeOptions options = new ChromeOptions(); options.setHeadless(true); // options.addArguments("headless"); options.addArguments("no-sandbox"); options.addArguments("disable-dev-shm-usage"); options.addArguments("disable-gpu"); driver = new ChromeDriver(options); // driver.get("https://www.google.com"); driver.manage().window().maximize(); return driver; }
前置执行脚本
sudo apt-get update -y sudo apt-get upgrade -y sudo apt install xvfb -y sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome-stable_current_amd64.deb || true sudo apt-get install -f -y sudo google-chrome -version sudo chmod 777 /usr/bin/google-chrome sudo nohup /usr/bin/google-chrome & sudo wget https://chromedriver.storage.googleapis.com/105.0.5195.19/chromedriver_linux64.zip sudo unzip chromedriver_linux64.zip sudo mv chromedriver /usr/bin/chromedrive sudo chmod 777 /usr/bin/chromedrive sudo nohup Xvfb -ac :99 -screen 0 1280x1024x16 & DISPLAY=:99 &
问题修复步骤
1. 修正ChromeDriver文件名拼写错误
脚本中将下载的chromedriver重命名为chromedrive(少了字母r),导致测试代码无法找到正确驱动文件。修改脚本中的重命名命令:
sudo mv chromedriver /usr/bin/chromedriver
2. 移除重复的驱动配置
测试代码同时使用WebDriverManager.chromedriver().setup()和System.setProperty,两者功能重复,保留WebDriverManager即可(它会自动匹配Chrome版本并管理驱动路径),删除手动设置的System.setProperty行。
3. 正确传递DISPLAY环境变量
启动Xvfb后,需要将DISPLAY=:99导出为全局环境变量,确保测试进程能读取到;同时在ChromeOptions中添加对应参数:
options.addArguments("display=:99");
脚本中替换最后一行的Xvfb启动命令:
sudo nohup Xvfb -ac :99 -screen 0 1280x1024x16 & export DISPLAY=:99
4. 移除不必要的Chrome预启动
脚本中sudo nohup /usr/bin/google-chrome &会启动独立的Chrome进程,可能干扰测试用实例,直接删除该行。
5. 添加Headless模式窗口大小参数
在Linux Headless环境下,指定窗口大小可避免渲染异常,在ChromeOptions中添加:
options.addArguments("window-size=1920,1080");
修改后的最终代码与脚本
修改后的测试代码
public WebDriver beforeScenario() { if (cr.valueOnTheKey("Env").equals("PROD")) { WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); options.setHeadless(true); options.addArguments("no-sandbox"); options.addArguments("disable-dev-shm-usage"); options.addArguments("disable-gpu"); options.addArguments("window-size=1920,1080"); options.addArguments("display=:99"); driver = new ChromeDriver(options); driver.manage().window().maximize(); return driver; } // 非PROD环境请补充对应逻辑 return null; }
修改后的前置脚本
sudo apt-get update -y sudo apt-get upgrade -y sudo apt install xvfb -y # 安装Google Chrome sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome-stable_current_amd64.deb || true sudo apt-get install -f -y sudo google-chrome -version sudo chmod 777 /usr/bin/google-chrome # 下载并配置ChromeDriver sudo wget https://chromedriver.storage.googleapis.com/105.0.5195.19/chromedriver_linux64.zip sudo unzip chromedriver_linux64.zip sudo mv chromedriver /usr/bin/chromedriver sudo chmod 777 /usr/bin/chromedriver # 启动虚拟显示并设置环境变量 sudo nohup Xvfb -ac :99 -screen 0 1280x1024x16 & export DISPLAY=:99
执行上述修改后的脚本,再运行mvn clean test即可启动ChromeDriver执行测试。
内容的提问来源于stack exchange,提问作者Suraj Solanki
相关产品推荐
相关产品推荐

