- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】docker-selenium
Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale
本文以 docker-selenium 仓库中的 Edge 140 发布日志(CHANGELOG/4.48.0/edge_140.md)为主线,完整解读 Selenium Grid 4.48.0 下 Edge 浏览器镜像的一次发布过程:从命令参数、12 个镜像标签的命名规律,到 tag_and_push_browser_images.sh 与 NodeEdge/Dockerfile 的源码级实现。读完本文,你将掌握浏览器镜像变更日志的阅读方法、镜像标签的完整命名体系,以及如何在 Selenium Grid 测试中准确选择或固定某个 Edge 版本。
一、这份变更日志记录了什么
CHANGELOG/4.48.0/edge_140.md是一份发布记录(changelog),完整保留了tag_and_push_browser_images.sh脚本为 Edge 140 浏览器镜像打标签时的命令与全部输出:
./tag_and_push_browser_images.sh 4.48.0 20260909 selenium false edge true Tagging images for browser edge, version 4.48.0, build date 20260909, namespace selenium Selenium Grid version -> 4.48.0-20260909 Edge version -> 140.0.3485.94 Short Edge version -> 140.0 EdgeDriver version -> 140.0.3485.94 Short EdgeDriver version -> 140.0 Tagged selenium/node-edge:140.0.3485.94-edgedriver-140.0.3485.94-grid-4.48.0-20260909 Tagged selenium/standalone-edge:140.0.3485.94-edgedriver-140.0.3485.94-grid-4.48.0-20260909 Tagged selenium/node-edge:140.0.3485.94-edgedriver-140.0.3485.94-20260909 Tagged selenium/standalone-edge:140.0.3485.94-edgedriver-140.0.3485.94-20260909 Tagged selenium/node-edge:140.0.3485.94-20260909 Tagged selenium/standalone-edge:140.0.3485.94-20260909 Tagged selenium/node-edge:140.0-edgedriver-140.0-grid-4.48.0-20260909 Tagged selenium/standalone-edge:140.0-edgedriver-140.0-grid-4.48.0-20260909 Tagged selenium/node-edge:140.0-edgedriver-140.0-20260909 Tagged selenium/standalone-edge:140.0-edgedriver-140.0-20260909 Tagged selenium/node-edge:140.0-20260909 Tagged selenium/standalone-edge:140.0-20260909这份日志蕴含了本次发布的核心事实:
- Selenium Grid 版本:
4.48.0-20260909,即 Grid 4.48.0 搭配 2026 年 9 月 9 日(构建日期20260909)的构建号; - Edge 浏览器版本:
140.0.3485.94,短版本号140.0; - EdgeDriver 驱动版本:
140.0.3485.94,短版本号140.0; - 镜像角色:同一批标签同时打在
node-edge(Grid Node 节点镜像)与standalone-edge(独立运行镜像)两类镜像上; - 产物数量:每类镜像 6 个标签,共 12 行
Tagged输出。
二、版本矩阵:变更日志在发布体系中的定位
这些 changelog 并非孤立文件,它们共同构成仓库的「Selenium Grid × 浏览器版本矩阵」。在 CHANGELOG/README.md 中,项目明确说明了这套矩阵的设计动机:在持续提供最新 Selenium Grid 核心版本的同时,让用户仍能通过固定某个浏览器版本进行跨浏览器测试,或规避特定浏览器版本的限制与缺陷。项目为 Node 与 Standalone 两类镜像同时打包 Grid 与具体驱动/浏览器版本,用户只需找到镜像标签、拉取镜像即可开始测试。
如何阅读该矩阵(原文要点):
- 每个 ✓ 都链接到对应 Grid 版本下、对应浏览器版本的详细变更日志,例如 Edge 140 的日志就是 CHANGELOG/4.48.0/edge_140.md;
- 最新版本排在最前面(降序排列);
- 项目同时明确声明:并未对所有 Grid 与浏览器版本组合做完整功能测试,用户需要根据自己的测试需求自行评估选择。
以当前最新 Grid 版本 4.48.0 为例,Edge 矩阵行覆盖edge_152到edge_114共 39 个浏览器版本;更早的 Grid 版本(如 4.47.0 及之前)则归档到 CHANGELOG/archived 目录下,作为历史对照。
三、逐条解码:命令参数与 12 个镜像标签
3.1 命令的 6 个位置参数
对照 tag_and_push_browser_images.sh 开头的参数声明(第 3~9 行),本次命令的 6 个参数含义如下:
| 参数 | 本次取值 | 说明 |
|---|---|---|
VERSION | 4.48.0 | Selenium Grid 版本号 |
BUILD_DATE | 20260909 | 构建日期(YYYYMMDD) |
NAMESPACE | selenium | 镜像命名空间 |
PUSH_IMAGE | false | 是否推送到镜像仓库(true/false,默认false) |
BROWSER | edge | 浏览器类型(chrome/chromium/edge/firefox/chrome-for-testing) |
RELEASE_OLD_VERSION | true | 是否为旧版本保留不带构建日期的标签(默认false) |
PLATFORM | 未传(默认linux/amd64) | 仅 chrome、chrome-for-testing 分支探测版本时使用 |
脚本开头还会执行TAG_VERSION=${VERSION}-${BUILD_DATE},得到4.48.0-20260909,作为日志中「Selenium Grid version」的输出值。
3.2 六种标签命名模式
从源码第 163~175 行的EDGE_TAGS数组可以看出,每次发布为每类镜像固定生成 6 个标签,按以下模式拼接(其中V为完整 Edge 版本、D为完整 EdgeDriver 版本、SV/SD为对应的两位短版本):
| # | 模式 | 本次实际标签 |
|---|---|---|
| 1 | V-edgedriver-D-grid-TAG_VERSION | 140.0.3485.94-edgedriver-140.0.3485.94-grid-4.48.0-20260909 |
| 2 | V-edgedriver-D-BUILD_DATE | 140.0.3485.94-edgedriver-140.0.3485.94-20260909 |
| 3 | V-BUILD_DATE | 140.0.3485.94-20260909 |
| 4 | SV-edgedriver-SD-grid-TAG_VERSION | 140.0-edgedriver-140.0-grid-4.48.0-20260909 |
| 5 | SV-edgedriver-SD-BUILD_DATE | 140.0-edgedriver-140.0-20260909 |
| 6 | SV-BUILD_DATE | 140.0-20260909 |
每一类标签都会依次通过retag node-edge ...与retag standalone-edge ...应用到两个镜像上(源码第 189~192 行),因此日志中每行标签都出现两次(node-edge 在前、standalone-edge 在后),合计 12 行。
3.3 为什么这里只打了 6 个标签
脚本在第 176~187 行还有一个条件分支:当RELEASE_OLD_VERSION=false时,会追加 4 个不带构建日期的标签(V-edgedriver-D、V、SV-edgedriver-SD、SV)。本次命令第 6 个参数为true,即「这是旧版本的发布」,因此跳过了这 4 个标签——这样140.0.3485.94、140.0这类通用短标签就不会被早期版本抢先占用或覆盖。这也是本日志中只出现 12 行(而非 20 行)Tagged输出的原因。
四、源码视角:tag_and_push_browser_images.sh 如何工作
4.1 版本探测:从镜像内部读取真实版本
脚本并不依赖外部传入浏览器版本,而是直接运行刚构建好的镜像来探测(第 152~161 行,edge 分支):
EDGE_VERSION=$(docker run --rm ${NAMESPACE}/node-edge:${TAG_VERSION} microsoft-edge --version | awk '{print $3}') EDGE_SHORT_VERSION="$(short_version ${EDGE_VERSION})" EDGEDRIVER_VERSION=$(docker run --rm ${NAMESPACE}/node-edge:${TAG_VERSION} msedgedriver --version | awk '{print $4}') EDGEDRIVER_SHORT_VERSION="$(short_version ${EDGEDRIVER_VERSION})"microsoft-edge --version的标准输出形如Microsoft Edge 140.0.3485.94,因此取第 3 个字段;msedgedriver --version的标准输出形如Microsoft Edge WebDriver 140.0.3485.94 (...) commit: ...,因此取第 4 个字段;- 两个版本号经
short_version函数(第 53~57 行,按.分割后取前两段)压缩为140.0,用于生成短标签。
从源码结构看,该函数同时服务于所有浏览器分支:chrome 取google-chrome --version的第 3 字段、firefox 取firefox --version的第 3 字段与geckodriver --version首行的第 2 字段,实现逻辑统一、字段位置因输出格式而异。
4.2 retag:打标签与推送的两种路径
核心的retag函数(第 31~51 行)根据环境变量PROMOTE_TAGS走两条路径:
- 默认路径:
docker tag "${NAMESPACE}/${image}:${TAG_VERSION}" "${NAMESPACE}/${image}:${__tag}",随后在PUSH_IMAGE=true时执行docker push。本次PUSH_IMAGE=false,所以只完成本地打标签,日志仅输出Tagged ...; - 发布推广路径(
PROMOTE_TAGS=true):直接用docker buildx imagetools create在 registry 之间复制 manifest,从而保留多架构(multi-architecture)索引,而不是重新构建。脚本注释说明,docker tag无法表达「把已发布镜像复制为新标签」且docker pull只能拉取执行机单一架构,因此需要 imagetools 在索引层操作。PROMOTE_GHCR_NAMESPACE非空时会在同一次调用中同步镜像到 GHCR。
另外需要注意一个细节(第 16 行):脚本内NAMESPACE=${NAME:-selenium}会重新赋值,即第 3 个命令行参数实际上让位于NAME环境变量,未设置NAME时固定为selenium——这也与本次日志中 namespace 为selenium的输出一致。
4.3 与其他浏览器的统一入口
脚本以case "${BROWSER}"区分五个分支(chrome、chromium、edge、firefox、chrome-for-testing),每个分支结构相同:探测版本 → 生成 6+4 个标签 → 对 node/standalone 两类镜像逐一 retag。在 Makefile 中,这一脚本被封装为tag_and_push_edge_images(第 792~793 行)等目标,并由tag_and_push_browser_images(第 781 行)聚合为一条命令;tag_and_push_browser_images_ghcr(第 798~808 行)则通过docker images枚举所有标签并同步到 GHCR。
五、镜像构建源头:NodeEdge/Dockerfile 中的 Edge 与 EdgeDriver
标签背后的版本一致性,来源于 NodeEdge/Dockerfile 的构建逻辑。
5.1 Edge 浏览器的安装
ARG EDGE_VERSION="microsoft-edge-stable"(第 16 行):默认安装 stable 渠道最新版,可通过EDGE_VERSION指定具体版本(如microsoft-edge-beta=88.0.692.0-1);- 由于微软会从 packages.microsoft.com 清理旧版本,特定版本安装改为从
EDGE_ARCHIVE_SITE(第 20 行,指向 NDViet/microsoft-edge-stable 的 per-version 归档,镜像 Google Chrome 的处理思路)下载.deb文件,并使用--allow-downgrades允许降级安装(第 24~33 行); - 最新版仍走常规 apt 仓库路径。
5.2 EdgeDriver 的解析与回退链
第 51~68 行的驱动安装逻辑体现了三层回退设计:
- 未显式指定
EDGE_DRIVER_VERSION时,先取本机microsoft-edge --version的主版本号(EDGE_MAJOR_VERSION),再请求msedgedriver.microsoft.com/LATEST_RELEASE_${EDGE_MAJOR_VERSION}_LINUX获取该主版本的最新驱动号; - 若该指针已被微软清理(请求失败),回退为当前浏览器完整版本号
140.0.3485.94; - 若下载失败,再从
EDGE_ARCHIVE_SITE归档兜底。
下载时根据dpkg --print-architecture选择linux64或linux-aarch64(第 52 行),最终解压到/opt/selenium/msedgedriver-${EDGE_DRIVER_VERSION}并通过符号链接暴露为/usr/bin/msedgedriver。这正是上一节「Edge 与 EdgeDriver 版本一致(140.0.3485.94)」这一事实的构建侧根源。
5.3 浏览器元信息与启动包装
- 构建期将浏览器信息写入
/opt/selenium/browsers/edge/(第 82~85 行):name(MicrosoftEdge)、version(取microsoft-edge --version第 3 字段)、binary_location(JSON 形式,支持SE_BROWSER_BINARY_LOCATION环境变量覆盖); - wrap_edge_binary 把
/usr/bin/microsoft-edge替换为包装脚本,用于:umask 002保证文件权限可写、将--lang=xx转换为LANGUAGE环境变量、收集所有SE_BROWSER_ARGS_*前缀环境变量作为浏览器附加参数,并最终以exec -a方式带--no-sandbox启动真实二进制; - 镜像还设置了
SE_OTEL_SERVICE_NAME="selenium-node-edge"与SE_NODE_ENABLE_MANAGED_DOWNLOADS="true"(第 87~88 行)。
六、从标签到实践:如何在测试中使用这些镜像
6.1 直接拉取与运行
以本次日志中真实存在的标签为例:
# 拉取带完整版本信息的 Node 镜像(推荐用于 Grid 节点) docker pull selenium/node-edge:140.0.3485.94-edgedriver-140.0.3485.94-grid-4.48.0-20260909 # 拉取带构建日期的短标签(体积语义清晰、便于团队对齐) docker pull selenium/standalone-edge:140.0-20260909 # 直接运行 Standalone 镜像,访问 http://localhost:4444 docker run -d -p 4444:4444 --shm-size="2g" \ selenium/standalone-edge:140.0.3485.94-edgedriver-140.0.3485.94-grid-4.48.0-20260909Standalone/Dockerfile 以 node-edge 为基础镜像,内置 Selenium Grid 的 Standalone 模式(同一 JVM 内包含 Hub、Node 与驱动),并导出SE_SESSION_REQUEST_TIMEOUT、SE_SESSION_RETRY_INTERVAL、SE_HEALTHCHECK_INTERVAL、SE_RELAX_CHECKS、SE_REJECT_UNSUPPORTED_CAPS等环境变量,映射到对应的 Grid 命令行参数,默认在 4444/4443/4442 端口提供 WebDriver 服务。
6.2 版本固定的选择策略
- 需要强一致复现:选用
140.0.3485.94-edgedriver-140.0.3485.94-grid-4.48.0-20260909这类全信息标签,浏览器、驱动、Grid 三者版本一目了然; - 只需关注浏览器大版本:选用
140.0-20260909短标签,跟随该大版本内的最新构建; - 跨浏览器测试:可同时固定 Edge 140(
node-edge:140.0-...)、Chrome 与 Firefox 对应标签,并借助 CHANGELOG/README.md 的矩阵核对各浏览器版本与 Grid 版本的对应关系; - 注意:不带构建日期的短标签(如
140.0)只在RELEASE_OLD_VERSION=false的发布中生成,若需依赖这类标签,请以具体发布日志为准。
6.3 从构建到发布的一条链
如果要复现本日志对应的发布流程,可以对照 Makefile 中的目标:edge_upgrade_version(第 772~777 行)先构建并校验 node-edge 与 standalone-edge(依次运行selenium-server.jar info --version、microsoft-edge --version、msedgedriver --version),随后tag_and_push_edge_images执行 tag_and_push_browser_images.sh 完成打标签与推送,最后可选用tag_and_push_browser_images_ghcr同步 GHCR 仓库。
七、小结
edge_140.md虽然只有一份命令输出,但它是 docker-selenium 发布体系的最小自洽样本:12 个标签完整呈现了「浏览器版本-驱动版本-Grid 版本-构建日期」的四维命名空间;背后的脚本用「docker run 探测版本 + retag 打标签」的流水线统一服务五种浏览器;NodeEdge/Dockerfile 则用归档源与三层回退链保证了 Edge 140.0.3485.94 与 EdgeDriver 140.0.3485.94 的稳定捆绑。理解了这份日志,你就能在 Selenium Grid 的众多标签中快速定位、固定并复现任意一次浏览器版本发布。
- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】docker-selenium
Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale
相关推荐
docker-selenium 4.48.0 Chrome for Testing 140 镜像发布全解析:打标签脚本、标签规范与版本矩阵
docker selenium 4.48.0 Chrome for Testing 140 镜像发布全解析:打标签脚本、标签规范与版本矩阵 本文以 CHANGE
测试后端云原生容器编排可观测性Selenium Grid 4.48.0 与 Edge 121 镜像发布解析:从 tag_and_push_browser_images.sh 到 NodeEdge 镜像的版本标签全解读
Selenium Grid 4.48.0 与 Edge 121 镜像发布解析:从 tag_and_push_browser_images.sh 到 NodeEd
测试后端云原生容器编排可观测性docker-selenium 4.48.0 发布记录解析:Edge 115 镜像的版本矩阵与多标签打标机制
docker selenium 4.48.0 发布记录解析:Edge 115 镜像的版本矩阵与多标签打标机制 本篇技术指南以 CHANGELOG/4.48.0/
测试后端云原生容器编排可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考