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

GitHub Actions中Selenium Drivers构建失败问题求助

解决GitHub Actions本地服务器执行Selenium测试时Driver进程提前终止问题

问题场景

本地直接运行Selenium测试正常,非本地GitHub Actions服务器可成功构建Selenium驱动,但部署在公司本地服务器的GitHub Actions任务执行时抛出错误:

Caused by: org.openqa.selenium.WebDriverException: Driver server process died prematurely.

已尝试更新JDK、Selenium、WebDriverManager版本,问题未解决。

配置代码

GitHub Actions配置(gradle.yml)

name: Java CI with Gradle

on:
  push:
    branches: ["dev"]
  pull_request:
    branches: ["dev"]

permissions:
  contents: read

jobs:
  build:
    runs-on: [some place where I work]
    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK 19
        uses: actions/setup-java@v2
        with:
          java-version: "19"
      - name: Grant execute permission for gradlew
        run: chmod +x gradlew
      - name: Build with Gradle
        run: ./gradlew test --info

Gradle配置(build.gradle)

plugins {
    id 'java'
}

repositories {
    jcenter()
}

dependencies {
    testImplementation 'junit:junit:4.13'
    implementation 'org.seleniumhq.selenium:selenium-java:4.8.0'
    testImplementation("io.github.bonigarcia:webdrivermanager:5.3.2")
}

使用版本:JDK 19、Selenium 4.8.0、WebDriverManager 5.3.2

排查与解决方案

1. 启用浏览器无头模式

本地服务器通常为无图形化环境,Selenium默认需要浏览器界面才能启动,需配置无头模式。以Chrome为例,修改测试代码:

import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class YourTestClass {
    public void testMethod() {
        ChromeOptions options = new ChromeOptions();
        // 启用无头模式(适配Selenium 4+)
        options.addArguments("--headless=new");
        // 解决Linux环境下的沙箱限制
        options.addArguments("--no-sandbox");
        // 解决/dev/shm资源不足问题
        options.addArguments("--disable-dev-shm-usage");
        
        WebDriver driver = new ChromeDriver(options);
        // 后续测试逻辑...
    }
}

2. 确认本地服务器已安装对应浏览器

WebDriverManager会自动下载匹配的驱动,但前提是服务器已安装对应浏览器。执行以下命令检查浏览器版本:

# Chrome
google-chrome --version
# Firefox
firefox --version

确保浏览器版本与WebDriverManager下载的驱动版本兼容(通常主版本号一致即可)。若未安装浏览器,需先安装对应版本。

3. 检查驱动可执行权限

WebDriverManager下载的驱动可能缺少执行权限,可在Gradle测试任务中添加权限设置:

test.doFirst {
    // 以Chrome为例,获取驱动路径
    def driverPath = System.getProperty("webdriver.chrome.driver")
    if (driverPath != null) {
        new File(driverPath).setExecutable(true, false)
    }
}

4. 分析详细启动日志

从./gradlew test --info的输出中,定位驱动启动的日志片段,查找具体错误(如浏览器启动失败、依赖缺失等)。例如,若日志显示Failed to find Chrome binary,则需确认浏览器安装路径是否被正确识别。

5. 验证GitHub Runner用户权限

确保运行GitHub Actions的用户拥有以下权限:

  • 读写驱动下载目录的权限
  • 执行浏览器和驱动程序的权限
  • 访问系统图形化相关资源的权限(若未启用无头模式)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:52:51