如何在未安装Chrome浏览器的Linux Jenkins服务器运行Selenium脚本
可行解决方案
以下三种方案均不需要运维在Jenkins服务器安装任何软件,完全在项目代码层面实现,符合要求:
方案1:基于Docker容器执行测试(推荐)
Jenkins普遍默认支持Docker运行权限,你可以通过容器化测试流程规避宿主机的Chrome依赖问题,无需修改现有Selenium业务代码:
- 项目根目录新增
Dockerfile,直接基于官方预装Chrome、chromedriver的Selenium镜像构建测试环境,示例配置:
# 构建阶段:拉取Maven镜像提前下载依赖 FROM maven:3.8.6-openjdk-11 AS build WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src # 运行阶段:使用预装Chrome的Selenium镜像执行测试 FROM selenium/standalone-chrome:latest USER root WORKDIR /test COPY --from=build /app /test CMD ["mvn", "test"]
- 调整Jenkins构建步骤,将原有
mvn test命令替换为镜像构建+运行命令,测试完成后可直接从容器内拷贝测试报告到宿主机构建工作空间。
方案2:集成Linux便携版Chrome到项目
如果Jenkins不支持Docker运行,可直接将Linux版Chrome便携二进制包提交到Bitbucket仓库,代码内指定Chrome路径即可:
- 下载和Jenkins服务器架构匹配的Linux Chrome便携版压缩包,解压后放到项目
tools/chrome目录,提交到Bitbucket仓库。 - 修改Selenium配置代码,手动指定Chrome二进制文件路径,WebDriverManager会自动匹配对应版本的chromedriver,示例代码:
ChromeOptions options = new ChromeOptions(); // 指定项目内便携版Chrome的绝对路径 options.setBinary(System.getProperty("user.dir") + "/tools/chrome/chrome"); // 适配Linux无界面运行的必要参数 options.addArguments("--headless=new", "--no-sandbox", "--disable-dev-shm-usage"); WebDriver driver = new ChromeDriver(options);
注:便携版Chrome压缩包大小约120M,不会对Git仓库造成过重负担。
方案3:替换为轻量无界面驱动(适配简单测试场景)
如果你的测试用例没有复杂JS交互、CSS渲染验证需求,可以直接替换ChromeDriver为HtmlUnitDriver,这是纯Java实现的模拟浏览器驱动,完全不依赖本地浏览器:
- 在pom.xml中新增依赖:
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>htmlunit-driver</artifactId> <version>和你项目使用的Selenium主版本保持一致即可</version> </dependency>
- 代码中直接初始化HtmlUnitDriver运行测试即可,无需其他配置。
注意事项
- 选择方案2时需确认便携版Chrome的架构和Jenkins服务器架构匹配,不要误下arm、Windows版本。
- 所有方案都不会修改服务器原有环境,完全符合运维要求。
内容的提问来源于stack exchange,提问作者code109
相关产品推荐
相关产品推荐

