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

Jenkins执行Git测试用例时遇SessionNotCreatedException问题求助

自动化测试执行失败排查:SessionNotCreatedException

错误日志

[[1;34mINFO[m]  T E S T S
[[1;34mINFO[m] -------------------------------------------------------
[[1;34mINFO[m] Running [1mTestSuite[m
SLF4J(W): 未找到SLF4J提供程序。
SLF4J(W): 默认使用无操作(NOP)日志记录实现
SLF4J(W): 更多详情请参见https://www.slf4j.org/codes.html#noProviders。
[[1;31mERROR[m] [1;31m测试 [0;1m运行数: [0;1m24[m, [1;31m失败数: [0;1;31m1[m, 错误数: 0, [1;33m跳过数: [0;1;33m23[m, 耗时: 2.329 秒[1;31m <<< 失败![m -- in [1mTestSuite[m
[[1;31mERROR[m] org.testpackage.TC001_Signup.launch[org.testng.TestRunner@5e8f9e2d, chrome](0) -- 耗时: 1.630 秒 <<< 失败!
**org.openqa.selenium.SessionNotCreatedException: 
无法启动新会话。可能的原因是远程服务器地址无效或浏览器启动失败。
主机信息: host: 'ip-10-1-1-111', ip: '10.1.1.111'**
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:541)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:237)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:164)
    at org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:114)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:89)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:84)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:73)
    at org.basepackage.VisionBaseClass.launch(VisionBaseClass.java:150)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139)
    at org.testng.internal.invokers.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:69)
    at org.testng.internal.invokers.ConfigInvoker.invokeConfigurationMethod(ConfigInvoker.java:361)
    at org.testng.internal.invokers.ConfigInvoker.invokeConfigurations(ConfigInvoker.java:296)
    at org.testng.internal.invokers.TestInvoker.runConfigMethods(TestInvoker.java:823)
    at org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:590)
    at org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:221)
    at org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:50)
    at org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:969)
    at org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:194)
    at org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:148)
    at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
    at org.testng.TestRunner.privateRun(TestRunner.java:829)
    at org.testng.TestRunner.run(TestRunner.java:602)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:437)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:431)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:391)
    at org.testng.SuiteRunner.run(SuiteRunner.java:330)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1256)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1176)
    at org.testng.TestNG.runSuites(TestNG.java:1099)
    at org.testng.TestNG.run(TestNG.java:1067)
    at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:308)
    at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:71)
    at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:113)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
    at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
    at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
Caused by: org.openqa.selenium.WebDriverException: 驱动服务器进程提前终止。
Build info: version: '4.16.1', revision: '9b4c83354e'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-1015-aws', java.version: '11.0.21'
Driver info: driver.version: ChromeDriver
    at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:248)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:119)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:523)
    ... 43 more

服务器环境信息

ubuntu@ip-vw-x-y-zzz:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy

ubuntu@ip-vw-x-y-zzz:~$ java -version
openjdk version "11.0.21" 2023-10-17
OpenJDK Runtime Environment (build 11.0.21+9-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.21+9-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)

WebDriver与浏览器版本

ubuntu@ip-vw-x-y-zzz:~$ chromedriver --version
ChromeDriver 120.0.6099.224 (3587067cafd6f5b1e567380acb485d96e623ef39-refs/branch-heads/6099@{#1761})

ubuntu@ip-vw-x-y-zzz:~$ google-chrome --version
Google Chrome 120.0.6099.224

路径信息

ubuntu@ip-vw-x-y-zzz:~$ which chromedriver
/usr/bin/chromedriver

ubuntu@ip-vw-x-y-zzz:~$ which google-chrome
/usr/bin/google-chrome

浏览器启动代码

if (browser.equalsIgnoreCase("chrome")) {
    ChromeOptions options = new ChromeOptions();

    // 设置Chrome二进制文件路径(非ChromeDriver)
    options.setBinary("/usr/bin/google-chrome");

    options.addArguments("--disable-gpu");
    options.addArguments("--no-sandbox");

    // 设置ChromeDriver系统属性并延长超时时间
    System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");

    // 使用配置好的选项实例化ChromeDriver
    setDriver(new ChromeDriver(options));
}

排查修复步骤

1. 启用无头模式

Jenkins运行在无桌面环境的服务器上,必须添加无头启动参数,否则Chrome无法正常初始化:

options.addArguments("--headless=new");

2. 补充必要的启动参数

添加以下参数解决常见的权限、内存及渲染问题:

options.addArguments("--disable-dev-shm-usage"); // 解决Linux系统/dev/shm空间不足问题
options.addArguments("--remote-debugging-port=9222"); // 指定调试端口,避免端口冲突
options.addArguments("--window-size=1920,1080"); // 设置窗口大小,确保元素定位正常
options.addArguments("--disable-extensions"); // 禁用扩展,减少启动负担

3. 优化驱动管理(Selenium 4.x+)

Selenium 4及以上版本无需手动设置webdriver.chrome.driver系统属性,推荐使用WebDriverManager自动管理驱动版本:

  • 在项目pom.xml中添加依赖:
<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.6.0</version>
</dependency>
  • 修改代码替换系统属性设置:
// 移除System.setProperty这一行
WebDriverManager.chromedriver().setup(); // 自动下载并配置对应版本的ChromeDriver

4. 检查Jenkins用户权限

确保Jenkins运行用户对Chrome和ChromeDriver有执行权限:

sudo chmod +x /usr/bin/google-chrome /usr/bin/chromedriver
sudo usermod -a -G ubuntu jenkins # 将jenkins用户添加到ubuntu用户组,获取必要权限

5. 验证Chrome手动启动

切换到jenkins用户,手动测试Chrome是否能正常运行:

sudo su - jenkins
google-chrome --headless=new --no-sandbox --disable-gpu --dump-dom https://www.google.com

如果报错,根据提示安装缺失的依赖库,例如:

sudo apt-get install -y libnss3 libgconf-2-4 libxss1 libappindicator1 libindicator7 fonts-liberation

内容的提问来源于stack exchange,提问作者Jey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:59:55