☰
Selenium Grid 4.48.0 镜像发布解读:Edge 140 标签命名规范与版本矩阵全解析
2026/10/4 1:42:47 网站建设 项目流程
  • 测试
  • 后端
  • 云原生
  • 容器编排
  • 可观测性

【免费下载链接】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

项目地址:https://gitcode.com/GitHub_Trending/do/docker-selenium
点击查看免费下载

本文以 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 个参数含义如下:

参数本次取值说明
VERSION4.48.0Selenium Grid 版本号
BUILD_DATE20260909构建日期(YYYYMMDD)
NAMESPACEselenium镜像命名空间
PUSH_IMAGEfalse是否推送到镜像仓库(true/false,默认false)
BROWSERedge浏览器类型(chrome/chromium/edge/firefox/chrome-for-testing)
RELEASE_OLD_VERSIONtrue是否为旧版本保留不带构建日期的标签(默认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为对应的两位短版本):

#模式本次实际标签
1V-edgedriver-D-grid-TAG_VERSION140.0.3485.94-edgedriver-140.0.3485.94-grid-4.48.0-20260909
2V-edgedriver-D-BUILD_DATE140.0.3485.94-edgedriver-140.0.3485.94-20260909
3V-BUILD_DATE140.0.3485.94-20260909
4SV-edgedriver-SD-grid-TAG_VERSION140.0-edgedriver-140.0-grid-4.48.0-20260909
5SV-edgedriver-SD-BUILD_DATE140.0-edgedriver-140.0-20260909
6SV-BUILD_DATE140.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 行的驱动安装逻辑体现了三层回退设计:

  1. 未显式指定EDGE_DRIVER_VERSION时,先取本机microsoft-edge --version的主版本号(EDGE_MAJOR_VERSION),再请求msedgedriver.microsoft.com/LATEST_RELEASE_${EDGE_MAJOR_VERSION}_LINUX获取该主版本的最新驱动号;
  2. 若该指针已被微软清理(请求失败),回退为当前浏览器完整版本号140.0.3485.94;
  3. 若下载失败,再从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-20260909

Standalone/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

项目地址:https://gitcode.com/GitHub_Trending/do/docker-selenium
点击查看免费下载

相关推荐

上一篇:Premonish 开源项目教程
下一篇:【亲测免费】从零开始搭建 Facebook Messenger Bot:完整开源指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询