Jenkins中Selenium测试报SessionNotCreatedException与WebDriverException
解决Jenkins环境下Selenium SessionNotCreatedException问题
问题场景
本地运行Selenium自动化测试一切正常,但在Jenkins环境执行时,所有测试均失败,抛出SessionNotCreatedException和WebDriverException,核心报错为Driver server process died prematurely。
完整报错信息
org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure. Host info: host: '5f96485807b8', ip: '172.17.0.2' at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:536) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:232) at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:161) at org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:114) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:88) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:83) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:72) at com.nikonenko.util.TestUtil.getConfigureChromeDriver(TestUtil.java:16) at com.nikonenko.tests.CartTests.setup(CartTests.java:23) ... Suppressed: java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.WebDriver.quit()" because "com.nikonenko.tests.CartTests.driver" is null at com.nikonenko.tests.CartTests.tearDown(CartTests.java:68) ... Caused by: org.openqa.selenium.WebDriverException: Driver server process died prematurely. Build info: version: '4.22.0', revision: 'c5f3146703*' System info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.15.133.1-microsoft-standard-WSL2', java.version: '17.0.11' Driver info: driver.version: ChromeDriver at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:246) ...
项目依赖版本
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <aspectj.version>1.9.21</aspectj.version> <junit.version>4.13.2</junit.version> <allure.version>2.27.0</allure.version> <junit-jupiter.version>5.9.1</junit-jupiter.version> <selenium.version>4.22.0</selenium.version> <webdrivermanager.version>5.9.1</webdrivermanager.version> <slf4j.version>2.0.13</slf4j.version> <lombok.version>1.18.32</lombok.version> <maven-surefire-plugin.version>3.2.3</maven-surefire-plugin.version> <allure-maven.version>2.12.0</allure-maven.version> </properties>
已尝试的ChromeOptions配置
public static ChromeDriver getConfigureChromeDriver() { ChromeOptions opt = new ChromeOptions(); opt.addArguments("--headless"); opt.addArguments("--no-sandbox"); opt.addArguments("--test-type"); opt.addArguments("--remote-allow-origins=*"); opt.addArguments("--disable-dev-shm-usage"); return new ChromeDriver(opt); }
解决方案
1. 确认Jenkins环境已安装Chrome浏览器
Jenkins运行在Linux容器/WSL环境中,基础镜像通常默认未安装Chrome,需手动安装:
- 若使用Docker镜像,在Dockerfile中添加安装命令:
RUN apt-get update && apt-get install -y wget gnupg2 RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - RUN echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list RUN apt-get update && apt-get install -y google-chrome-stable - 若为Jenkins agent节点,直接在机器上执行上述命令完成安装。
2. 优化ChromeOptions配置
补充适配无桌面环境的关键参数,替换原有配置:
public static ChromeDriver getConfigureChromeDriver() { ChromeOptions opt = new ChromeOptions(); opt.addArguments("--headless=new"); // 新版无头模式,更贴近真实浏览器行为 opt.addArguments("--no-sandbox"); opt.addArguments("--disable-gpu"); // Linux环境下禁用GPU加速 opt.addArguments("--disable-extensions"); opt.addArguments("--remote-allow-origins=*"); opt.addArguments("--disable-dev-shm-usage"); // 避免容器内/dev/shm空间不足 opt.addArguments("--window-size=1920,1080"); // 固定窗口尺寸,防止元素定位异常 opt.addArguments("--user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"); // 指定UA,规避网站拦截 return new ChromeDriver(opt); }
3. 确保Chrome与ChromeDriver版本匹配
WebDriverManager自动下载的ChromeDriver需与Jenkins环境中安装的Chrome版本完全一致:
- 在Jenkins构建日志中查看WebDriverManager输出,确认下载的ChromeDriver版本
- 若版本不匹配,强制指定对应版本:
WebDriverManager.chromedriver().driverVersion("125.0.6422.141").setup();
4. 检查Jenkins执行用户权限
确保Jenkins执行测试的用户拥有启动Chrome进程的权限:
- 在Jenkins构建步骤中添加命令
google-chrome --version,验证Chrome是否能正常执行
5. 修复tearDown空指针问题
在tearDown方法中先判断driver是否为null,避免未初始化时调用quit():
@AfterEach public void tearDown() { if (driver != null) { driver.quit(); } }
内容的提问来源于stack exchange,提问作者Viktar Nikanenka
相关产品推荐
相关产品推荐

