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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:57:00