GitHub Actions运行Selenium报错Chrome异常退出无法启动会话
问题修复方案
你遇到的Chrome启动异常和Chrome安装、版本匹配无关,是代码逻辑错误和依赖配置错误导致的,具体问题和修复方式如下:
核心问题1:WebDriver重复初始化,CI必需的启动参数未生效
你的测试代码中存在变量覆盖问题:
- 你先创建了带
--no-sandbox/--headless/--disable-dev-shm-usage等CI环境必需参数的ChromeOptions,初始化了一次driver - 紧接着你又在方法内重新声明了一个局部WebDriver变量,用无参构造方法
new ChromeDriver()创建了第二个driver实例,后续所有测试操作都是用的这个没有加任何启动参数的实例
本地环境有图形桌面,不带无头参数可以正常启动Chrome,所以本地运行无异常;但GitHub Actions的Ubuntu运行器是无GUI的纯命令行环境,不带无头、关闭沙箱等参数启动Chrome必然直接异常退出,就是你看到的报错。
核心问题2:Selenium依赖版本冲突
你的Maven配置中selenium-chrome-driver版本为4.3.0,selenium-java版本为4.2.1,核心依赖版本不匹配会导致会话初始化时出现不可预期的兼容问题。另外selenium-java本身已经包含了selenium-chrome-driver等所有子模块依赖,不需要单独引入chrome-driver包,额外引入反而容易出现版本不一致的问题。
可选优化:无需自行编写脚本安装Chrome
GitHub Actions官方提供的ubuntu-latest运行器默认已经预装了稳定版Google Chrome和所有系统依赖,你自定义脚本安装Chrome反而可能出现版本覆盖、依赖缺失的问题,直接删除该步骤即可,WebDriverManager会自动识别系统内的Chrome版本拉取匹配的ChromeDriver。
修复后代码参考
测试用例核心代码
@org.junit.Test public void test() throws InterruptedException { WebDriverManager.chromedriver().setup(); ChromeOptions opt = new ChromeOptions(); opt.addArguments("--no-sandbox"); opt.addArguments("--disable-dev-shm-usage"); opt.addArguments("--headless=new"); // Chrome100+版本推荐使用新无头模式,兼容性更好 opt.addArguments("--disable-gpu"); // 仅初始化一次driver,删除重复的无参初始化代码 driver = new ChromeDriver(opt); driver.get("https://www.amazon.com.tr/"); driver.findElement(By.xpath("/html/body/div[1]/header/div/div[4]/div[2]/div/div/a[5]")).click(); // 测试结束关闭进程,避免CI环境残留僵尸进程 driver.quit(); }
Maven依赖配置
<!-- 统一Selenium版本为4.3.0,移除单独引入的selenium-chrome-driver依赖 --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.3.0</version> </dependency> <dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>5.2.1</version> <scope>test</scope> </dependency>
简化后的ci.yml工作流配置
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'adopt' # 删除自定义安装Chrome的步骤,使用运行器预装的Chrome即可 - name: Test with Maven run: mvn clean test
内容的提问来源于stack exchange,提问作者Basak Balci
相关产品推荐
相关产品推荐

