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
相关产品推荐
相关产品推荐

