内网离线环境下基于Docker的Java+Selenium自动化测试部署实战

碧海醫心

碧海醫心

2026-07-11

439人浏览

原创

内网离线环境下基于Docker的Java+Selenium自动化测试部署实战

本文详解如何在无外网连接的内网环境中,使用docker容器化部署selenium standalone服务,并通过java remotewebdriver安全、稳定地驱动浏览器完成ui自动化测试,涵盖镜像准备、网络配置、代码适配与常见错误规避。

本文详解如何在无外网连接的内网环境中,使用docker容器化部署selenium standalone服务,并通过java remotewebdriver安全、稳定地驱动浏览器完成ui自动化测试,涵盖镜像准备、网络配置、代码适配与常见错误规避。

在金融、政务、军工等强合规场景中,测试环境常处于完全隔离的内网(即“离线环境”),无法访问公网拉取Docker镜像或下载依赖。此时,若仍需构建可靠、可复现的UI自动化测试流水线,必须摒弃docker pull和在线依赖管理的惯性思维,转而采用全离线预置+本地容器编排的方案。本文以Java语言为客户端、selenium/standalone-chrome为服务端,提供一套经生产验证的5步落地流程。

✅ 第一步:离线物料全量预打包(联网机执行)

在具备互联网连接的“跳板机”上,提前下载并保存所有必需组件:

# 1. 拉取指定版本镜像(避免latest漂移)
docker pull selenium/standalone-chrome:4.37.0-20251020

# 2. 导出为tar包(便于离线传输)
docker save selenium/standalone-chrome:4.37.0-20251020 > selenium-standalone-chrome-4.37.0.tar

# 3. 下载OpenJDK 11(Debian系)及Selenium Server JAR
wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
wget https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.1.2/selenium-server-4.1.2.jar

将生成的 .tar、.jar、.tar.gz 文件通过U盘或内网FTP拷贝至目标内网服务器。

✅ 第二步:内网环境初始化

在内网Linux服务器上完成基础环境搭建:

# 安装Docker(离线RPM包方式,以CentOS为例)
rpm -ivh docker-ce-24.0.7-1.el7.x86_64.rpm docker-ce-cli-24.0.7-1.el7.x86_64.rpm

# 加载Selenium镜像
docker load <blockquote><p>⚠️ 注意:务必关闭SELinux或配置container-selinux策略,否则Chrome可能因权限拒绝启动;同时确认内核shm支持,--shm-size="2g"为必需参数。</p></blockquote><h3>✅ 第三步:正确启动Selenium容器(关键网络配置)</h3><p>直接运行容器时,<strong>必须显式暴露4444端口并启用离线模式</strong>,否则ChromeDriver可能尝试联网更新:</p><div class="aritcle_card flexRow artxards">
											<div class="artcardd flexRow">
												<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2530" title="Java JDK 25"><img
														src="https://img.php.cn/upload/manual/001/221/864/6a6091217fc2f681.png" alt="Java JDK 25" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
												<div class="aritcle_card_info flexColumn">
													<a rel="nofollow" href="/xiazai/gongju/2530" title="Java JDK 25" class="overflowclass">Java JDK 25</a>
													<p class="overflowclass">Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。</p>
												</div>
												<a rel="nofollow" href="/xiazai/gongju/2530" title="Java JDK 25" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
												</a>
											</div>
										</div><pre class="brush:php;toolbar:false;">docker run -d \
  --name selenium-standalone \
  -p 4444:4444 \
  -p 7900:7900 \
  --shm-size="2g" \
  -e SE_OFFLINE=true \
  -e TZ=Asia/Shanghai \
  selenium/standalone-chrome:4.37.0-20251020

✅ 启动后验证服务可用性:

  • 访问 http://:4444 —— 应显示Selenium Grid控制台
  • 访问 http://:7900(密码 secret)—— 可实时查看Chrome操作画面

✅ 第四步:修正Java客户端代码中的网络引用(核心避坑点)

原代码中使用 http://chrome:4444/wd/hub 会触发DNS解析失败(UnknownHostException: chrome),原因在于:
❌ docker run 默认不创建自定义主机名映射;
❌ 容器内Java进程与Selenium服务同处一台宿主机,应直连宿主机IP或localhost

✅ 正确写法(推荐使用 localhost,简洁且无需额外网络配置):

// systemTests/InstagramTester.java
public InstagramTester() {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--no-sandbox", "--window-size=1920,1080", "--disable-gpu");

    try {
        // ✅ 改为 localhost —— 因为 -p 4444:4444 已将容器4444映射到宿主机4444
        URL remoteUrl = new URL("http://localhost:4444/wd/hub");
        this.driver = new RemoteWebDriver(remoteUrl, options);
    } catch (MalformedURLException e) {
        throw new RuntimeException("Invalid Selenium Hub URL", e);
    }
}

? 补充说明:若需跨容器通信(如Java应用也运行在独立容器中),则应使用 docker network 创建自定义桥接网络,并通过服务名访问,例如:

docker network create selenium-net
docker run -d --network selenium-net --name selenium-hub ... selenium/standalone-chrome
docker run -it --network selenium-net your-java-app  # 此时可写 http://selenium-hub:4444/wd/hub

✅ 第五步:构建与运行Java应用(无Maven纯命令行)

沿用你提供的Dockerfile逻辑,但需确保:

  • COPY 的 selenium-server-4.1.2.jar 仅用于编译(javac -cp),运行时无需该JAR(Selenium服务由容器提供);
  • RemoteWebDriver 依赖的是 selenium-api 和 selenium-remote-driver,建议一并离线下载并加入lib/目录;
  • 编译命令保持不变,运行命令明确指定类路径:
# Dockerfile(精简版)
FROM selenium/standalone-chrome:4.37.0-20251020
USER root
RUN apt-get update && apt-get install -y openjdk-11-jdk && rm -rf /var/lib/apt/lists/*
USER seluser
WORKDIR /app
COPY src/ test/ lib/ ./
RUN javac -cp ".:lib/*" -d classes src/main/*.java test/systemTests/*.java
CMD ["java", "-cp", ".:lib/*:classes", "main.MainClass"]

构建并运行:

docker build -t java-selenium-test .
docker run -it --rm -p 4444:4444 -p 7900:7900 java-selenium-test

? 总结:离线部署三大铁律

类别 正确实践 禁忌行为
镜像管理 使用固定语义化版本(如 4.37.0-20251020),docker save/load离线传输 依赖 latest 或在线 pull
网络通信 宿主机运行Java → 用 localhost:4444;多容器 → 用 docker network + 服务名 硬编码 chrome/hub 而不配网络
浏览器稳定 必设 SE_OFFLINE=true + --shm-size="2g" + --no-sandbox 忽略共享内存限制导致Chrome崩溃

遵循以上步骤,即可在零外网依赖的内网环境中,快速、健壮地交付一套可维护的Java+Selenium UI自动化能力。这不仅是技术方案,更是面向高安全等级场景的工程化交付范式。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

3891

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

2861

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

2900

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

638

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

602

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

727

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1318

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

18866

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

647

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习