Jenkins/Gradle运行Selenium自动化测试时Chrome崩溃问题求助
我之前也碰到过几乎一模一样的问题——IDEA里跑测试完全正常,但一放到Jenkins或者直接用gradle test就触发org.openqa.selenium.SessionNotCreatedException: session not created exception from tab crashed错误。结合你给出的版本信息,整理几个最可能的原因和对应的解决办法:
1. 缺少无头模式配置(最常见原因)
IDEA运行时是在有桌面环境的用户会话里,Chrome可以正常启动GUI界面,但Jenkins通常运行在无桌面的系统会话中(尤其是Linux服务器),直接启动Chrome会因为没有显示输出而崩溃。
解决办法:给Chrome添加无头模式参数,同时加上几个针对无桌面环境的必备配置:
ChromeOptions options = new ChromeOptions(); // 启用无头模式 options.addArguments("--headless"); // 禁用沙箱(Linux下非root用户运行Chrome需要这个参数) options.addArguments("--no-sandbox"); // 解决/dev/shm内存不足的问题 options.addArguments("--disable-dev-shm-usage"); // 禁用GPU加速(无头模式下不需要) options.addArguments("--disable-gpu"); WebDriver driver = new ChromeDriver(options);
2. Chrome二进制文件路径未指定
Jenkins运行的系统用户(比如jenkins用户)可能找不到Chrome的安装路径,尤其是你手动安装Chrome而非通过系统包管理工具的情况。
解决办法:在ChromeOptions中指定Chrome的绝对路径:
options.setBinary("/path/to/your/chrome/binary"); // 比如Linux下可能是 /usr/bin/google-chrome,Windows下是 C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe
3. Gradle运行时的系统属性配置问题
IDEA会自动帮你传递webdriver.chrome.driver等系统属性,但Gradle命令行或Jenkins构建时可能没正确配置这个参数,导致找不到ChromeDriver。
解决办法:在build.gradle中添加测试任务的系统属性配置:
test { systemProperty "webdriver.chrome.driver", "/path/to/your/chromedriver" // 如果用WebDriverManager自动管理驱动,可以不用手动指定路径 }
另外推荐使用WebDriverManager库,它会自动下载匹配当前Chrome版本的ChromeDriver,避免手动版本匹配出错,只需在依赖中添加:
testImplementation 'io.github.bonigarcia:webdrivermanager:3.8.1' // 对应Selenium 3.x的版本
然后在测试代码中初始化:
WebDriverManager.chromedriver().setup(); WebDriver driver = new ChromeDriver(options);
4. 服务器/容器内存不足
Chrome启动时需要一定的内存,如果Jenkins所在服务器或者Docker容器内存不足,也会导致启动后崩溃。
解决办法:
- 检查服务器内存使用情况,释放不必要的进程增加可用内存
- 如果是Docker运行Jenkins,增加容器的内存分配(比如
docker run时加--memory=2g参数)
5. Jenkins用户权限问题
Jenkins运行的用户可能没有访问Chrome或ChromeDriver的权限,或者无法创建临时文件。
解决办法:
- 确保ChromeDriver文件有可执行权限:
chmod +x /path/to/chromedriver - 给Jenkins用户赋予Chrome安装目录的访问权限
内容的提问来源于stack exchange,提问作者Igor

