恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Selenium 开发指南:用 Bazel 与 ./go 构建、测试并发布多语言语言绑定

  • 首页
  • 资讯中心
  • /
  • Selenium 开发指南:用 Bazel 与 ./go 构建、测试并发布多语言语言绑定

相关资讯

Buzz:基于 OpenAI Whisper 的离线音频转录完整指南,免费本地语音转文字 2026/9/6 15:47:55
5分钟免费把 Windows 11 装回 Windows 10 经典界面:ExplorerPatcher 完整入门指南 2026/9/6 15:47:55
Apache Airflow 加泰罗尼亚语(ca)UI 翻译规范:术语表、语法约定与 i18next 实践指南 2026/9/6 15:42:55

最新资讯

用 Qwerty Learner 背单词的同时练出英语打字肌肉记忆:完整上手指南
基于STM32的ECG与PPG双模生命体征监测终端:从硬件到华为云IoT全链路解析
嵌入式Linux系统移植实战:从U-Boot到根文件系统全流程解析
服务器硬件选型实战:CPU缓存、内存通道与BIOS排障全解析
科尔尼战略管理高管培训154页PPT拆解:从战略推演到落地执行
生成式引擎优化(GEO):它是什么、为什么现在出现、以及到底是不是“换了个名字的 SEO“

今日推荐

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

Selenium 开发指南:用 Bazel 与 ./go 构建、测试并发布多语言语言绑定

发布时间:2026/9/6 15:47:55
Selenium 开发指南:用 Bazel 与 ./go 构建、测试并发布多语言语言绑定 Selenium 开发指南用 Bazel 与 ./go 构建、测试并发布多语言语言绑定【免费下载链接】seleniumA browser automation framework and ecosystem.项目地址: https://gitcode.com/GitHub_Trending/se/selenium本文基于 Selenium 官方仓库根目录的 README.md 展开系统讲解作为 Selenium 贡献者需要准备的环境、Bazel 构建体系、各语言绑定Java / Python / Ruby / Rust的开发与测试流程以及文档生成与发布Releasing的完整命令链路。读完后你将能够独立搭建 Selenium 本地开发环境、执行bazel build/bazel test等核心命令并使用./goRake 封装完成从构建到发布的日常工作。1. 这个仓库是什么Selenium 伞项目与 W3C WebDriver 基础设施README 开篇给出了一句最著名的口号Automates browsers. Thats it!。Selenium 是一个伞项目umbrella project封装了多种用于 Web 浏览器自动化的工具与库其核心定位为W3C WebDriver 规范的基础设施实现——一个平台无关、语言无关、兼容所有主流浏览器Chrome、Firefox、Edge、Safari、IE的编码接口。仓库顶层目录清晰地体现了这一多语言绑定 构建基建的组织方式目录内容java/Java 绑定与 Grid 服务端selenium-server / standalone jarpy/Python 绑定selenium 包dotnet/.NET 绑定rb/Ruby 绑定selenium-webdriver gemjavascript/Node.js 绑定selenium-webdriver与 atomsrust/Rust 实现的 Selenium Managercpp/遗留的 IEDriver、webdriver-interactions 等 C 组件common/共享资源Web 测试页面、Bidi/DevTools 协议 schema、镜像等需要特别注意的是 README 的声明这份 README 面向希望为项目贡献代码的开发者。如果你是初次使用 Selenium 的用户应查阅官方 User Manual 获取示例与描述。本文严格沿袭这一定位聚焦如何在本仓库中构建与开发。2. 环境准备从 Bazelisk JDK 到 Windows 手动配置2.1 所有平台的公共依赖README 列出的本地开发环境依赖只有两项核心项Bazelisk——Bazel 的包装器。它会自动读取仓库根目录的 .bazelversion 文件下载其中指定的 Bazel 版本当前仓库锁定为9.1.0并将所有命令行参数透明地转发给真正的 Bazel 二进制。这意味着你只需安装 Bazelisk 一次无需手动跟随项目升级 Bazel。Java JDK 17 或更高版本例如 Java 17 Temurin。注意两点必须把JAVA_HOME指向 JDK而非 JRE的可执行文件位置验证方法是运行javac如果只装了 JRE该命令不存在如果看到一串命令行选项输出说明 JDK 引用正确。从源码结构看.bazelrc 中还配置了--java_runtime_versionremotejdk_25即 Bazel 构建过程中会拉取 JDK 25 工具链来编译目标产物默认--release 11字节码级别这与本机 JDK 17 的要求并不冲突本机 JDK 供 Rake/go等脚本运行构建工具链由 Bazel 自行管理。2.2 macOS 平台安装Xcode 及命令行工具xcode-select --installApple Silicon 机器需要Rosetta在.bazelrc.local文件中添加build --host_platform//:rosetta。这个 Rosetta 平台在根目录 BUILD.bazel 中有对应定义——一个约束为os:osx cpu:x86_64的platform规则供 Apple Silicon 上以 x86_64 方式运行 host 构建时使用。README 也注明团队正致力于长期消除这一要求。2.3 Windows 平台自动脚本与手动配置两条路线Windows 上 Bazel 的依赖较多MSYS2 提供 bash、VS C 构建工具、长路径支持等README 提供了两个选项选项 1从零自动安装。以管理员身份打开 PowerShell 后执行Set-ExecutionPolicy Bypass -Scope Process -Force然后在目标目录下载并执行仓库自带的 scripts/dev-environment-setup.ps1。该脚本会保证得到一个开箱即跑的完整开发环境已存在的组件不会被重复安装除非提示。选项 2手动安装。完整步骤如下允许运行 Selenium 仓库内的脚本Set-ExecutionPolicy -ExecutionPolicy RemoteSigned启用开发者模式reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock /t REG_DWORD /f /v AllowDevelopmentWithoutDevLicense /d 1安装MSYS2提供类 Unix 命令行的 shell 环境把 bin 目录加入PATH例如C:\tools\msys64\usr\bin把bash.exe位置设为BAZEL_SH环境变量例如C:\tools\msys64\usr\bin\bash.exe。安装最新版Visual Studio Community通过安装器添加 Desktop development with C 工作负载将 Visual C 构建工具安装目录设为BAZEL_VC例如C:\Program Files\Microsoft Visual Studio\2022\Community\VC将 Visual C Build Tools 版本号设为BAZEL_VC_FULL_VERSION可从$BAZEL_VC\Tools\MSVC\BAZEL_VC_FULL_VERSION的目录名中查出。启用长文件名支持Bazel 有大量超过 Windows 默认路径长度限制的嵌套目录reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor /t REG_DWORD /f /v DisableUNCCheck /d 1 reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem /t REG_DWORD /f /v LongPathsEnabled /d 1允许 Bazel 为长路径创建短名版本fsutil 8dot3name set 0把 Bazel 输出目录从项目内嵌套目录改到C:/tmp创建selenium/.bazelrc.windows.local文件写入startup --output_user_rootC:/tmp。.bazelrc 顶部两行try-import %workspace%/.bazelrc.local与try-import %workspace%/.bazelrc.windows.local正是为这类本地化覆盖文件预留的入口。2.4 替代开发环境GitPod、Dev Container 与 Docker 镜像如果不想在本地搭环境README 提供了三种云端/容器化替代方案GitPod提供开箱即用的在线开发环境无需本地配置。Dev Container本质是一个 Docker 容器仓库提供了 .devcontainer/devcontainer.json。查看该文件可以看到其构建直接指向 scripts/dev-image/Dockerfile即 Dev Container 与 Docker 镜像两条路线复用同一份 Dockerfile。VS Code、IntelliJ IDEA 等支持 Dev Container 的 IDE 会引导你创建容器。Docker 镜像直接使用 scripts/dev-image/Dockerfile 构建一个适合构建与测试 Selenium 的镜像。2.5 多 Worktree 协作让 Bazel 缓存随取随用README 专门用一节讲Using Worktrees这是一个很实用的贡献者技巧Bazel 默认把构建输出和下载的依赖放在每个 checkout 之下因此使用多个 git worktree 时会重复下载依赖、重复构建。解决办法是在用户级/path/to/your/home/.bazelrc中添加common --disk_cache/path/to/your/home/.cache/bazel-disk common --repository_cache/path/to/your/home/.cache/bazel-repo--disk_cache存储编译 action 的输出--repository_cache存储下载的外部依赖如http_archive压缩包。两个目录会随时间无限增长磁盘紧张时应定期清理并且建议把缓存放在与 checkout 相同的文件系统上这样 Bazel 可以 hardlink 而非复制。另一个容易踩的坑是output baseBazel 会为每个 checkout 路径创建独立的 output base编译产物、分析缓存、Bazel server且删除 worktree 时它不会被自动清理——频繁创建/销毁 worktree 会泄漏数 GB 的陈旧输出。macOS/Linux 上可以让 worktree 自清理在该 worktree 的.bazelrc.local中添加startup --output_base.local/output-base.local/目录既被 gitignore 也出现在.bazelignore中见 .bazelignore删除 worktree 时 output base 随之消失而上面共享的--disk_cache/--repository_cache仍然跨 worktree 共享。Windows 用户则应继续保留startup --output_user_rootC:/tmp如 2.3 节所述以避免路径长度限制不要在仓库内更深嵌套 output base。3. 构建体系Bazel 命令、目标命名与 ./go 封装3.1 为什么用 BazelSelenium 统一使用 Bazel 作为构建工具README 给出的理由是用它来统一管理依赖下载、生成必需的二进制、构建与发布打包、执行测试——且快速、高效。3.2 四个最常用的 Bazel 命令README 列出的核心命令命令作用bazel build解析依赖、编译源文件、为指定目标生成输出文件用于产出可执行文件、库或其他产物bazel run先构建目标再执行它通常用于产出可执行二进制的目标bazel test构建并以带额外测试功能测试运行器、沙箱、缓存的上下文运行目标bazel query查询给定路径下可用的目标3.3 目标target命名规则每个可构建模块由一个BUILD.bazel文件定义。执行模块时目标引用格式为// 定义文件相对路径 : 目标名。README 举的例子是构建 Gridbazel build //java/src/org/openqa/selenium/grid:executable-grid查看根目录 BUILD.bazel 可以看到仓库为此提供了根级 alias于是构建 Grid 可以简写为bazel build grid该 alias 的actual正是//java/src/org/openqa/selenium/grid:executable-grid与 README 描述完全一致构建日志会输出输出 jar 的位置。此外 BUILD.bazel 还定义了selenium-server-standalonealias指向//java/src/org/openqa/selenium/grid:selenium_server_deploy.jar。按语言批量构建bazel build //language/...3.4 ./goRake 封装的命令入口README 指出很多 Bazel 命令都被自定义的 Rake wrapper 包装通过仓库根目录的./go命令执行例如构建某个语言的全部绑定./go language:build从源码看go 脚本本身非常薄它设置若干--add-opensJVM 参数后用third_party/jruby/jruby-complete.jar启动 JRuby 并执行rake task真正的任务逻辑在 Rakefile 及各语言任务文件中。Rakefile 按语言加载命名空间任务namespace(:java) { load rake_tasks/java.rake } namespace(:rb) { load rake_tasks/ruby.rake } namespace(:py) { load rake_tasks/python.rake } namespace(:python) { load rake_tasks/python.rake } # alias namespace(:node) { load rake_tasks/node.rake } namespace(:dotnet) { load rake_tasks/dotnet.rake } namespace(:rust) { load rake_tasks/rust.rake }所以./go java:build、./go py:install、./go rb:console这类语言:任务语法本质上是 JRuby 驱动的 Rake 任务分发。Rakefile 中还有一个值得注意的规则任何看起来像 Bazel 目标以//开头的任务名都会被直接转交给bazel build执行。此外 Rakefile 还内置了all:build/all:docs/all:release/all:format等跨语言聚合任务例如 Rakefile 的all:build会依次调用五种语言绑定的 build 任务这正是第 5 节发布流程的基础。4. 分语言开发实践4.1 JavaIntelliJ团队日常主力 IDE。推荐安装 Bazel IJ 插件并把仓库作为 Bazel 项目导入view 文件使用 scripts 目录下的ij.bazelprojectmacOS/Linux或ij-win.bazelprojectWindows。Lint使用 Google Java Format配合 IntelliJ 的 Google Java Formatter 插件配置步骤需查其官方文档也可以直接运行自动格式化脚本./scripts/format.sh。本地安装到 Maven 仓库虽然 Selenium 不用 Maven 构建但可以把构件部署到本地~/.m2/repository供 Maven 项目使用./go java:install更新依赖依赖版本统一声明在 MODULE.bazel 中bzlmod 模块声明了 rules_java、rules_python、rules_ruby、rules_rs 等各语言 ruleset 以及 protobuf、llvm 等。更新某个依赖版本后执行RULES_JVM_EXTERNAL_REPIN1 bazel run maven//:pin或一键自动更新并重新 pin./go java:update查看 MODULE.bazel 可以看到仓库对 protobuf 做了single_version_override锁定要求与预编译 protoc 版本配对这类精细的版本治理都集中在这一个文件里。4.2 PythonLint 与格式化遵循 PEP 8 风格指南唯一例外行长放宽到 120 字符用 ruff 检查与强制同样可用./scripts/format.sh一键自动格式化。从源码本地运行不打包安装pip install -r py/requirements_lock.txt ./go py:local_devpy:local_dev会构建生成文件Bidi 协议类等生成代码并拷贝到本地源码树之后就可以从py目录直接import selenium。构建并安装 wheel./go py:install该命令尝试安装到全局site-packages可能没有写权限README 建议在安装前创建并激活一个虚拟环境。4.3 Ruby替代irb的交互式 REPL自动加载全部 gemsbazel run //rb:console调试使用debuggem。步骤为在断点位置写入binding.break用ruby_debug配置运行测试bazel test --config ruby_debug test调试器启动后在另一个终端连接bazel-selenium/external/bundle/bin/rdbg -A这个ruby_debug配置并非凭空而来查看 .bazelrc 可以看到test:ruby_debug被定义为--test_outputstreamed --test_envRUBY_DEBUG_FORK_MODEparent --run_underbundle//bin:rdbg --nonstop --open --command即通过--run_under把 rdbg 调试器挂到测试进程前。RubyMine把rb/作为主项目目录打开从selenium父目录运行./go rb:local_dev生成最新产物在Settings / Languages Frameworks / Ruby SDK and Gems中新增 Interpreter指向../bazel-selenium/external/rules_rubyrubyruby/dist/bin/ruby。此后即可运行与调试任意 spec默认使用 Chrome可通过 rb/TESTING.md 中说明的环境变量切换浏览器。4.4 RustRust 侧的 Bazel 依赖是直接从rust/Cargo.toml和rust/Cargo.lock生成的贡献者改依赖时只需维护这两个 Cargo 文件无需手写 Bazel 依赖规则。5. 测试Bazel 测试配置、过滤策略与 Linux 无头方案5.1 常用测试参数README 给出的一组测试常用参数原文列表完整保留参数说明--pin_browsersfalse改用 Selenium Manager 定位浏览器/驱动默认使用仓库 pin 的版本--headless以无头模式运行浏览器支持 Chrome、Edge、Firefox--flaky_test_attempts 3失败的测试最多重跑 3 次--local_test_jobs 1控制测试并行度--cache_test_resultsno/-t-禁用测试结果缓存全部重跑--test_output all打印测试的全部输出而不只是错误--test_output streamed逐个串行运行测试并立即打印输出--test_env FOObar向测试进程传递额外环境变量--run_underxvfb-run -a在执行前插入的前缀命令这两个自定义 flag--pin_browsers、--headless不是普通布尔开关而是通过 .bazelrc 中的flag_alias映射到仓库内定义的 bool_flag。查看 common/BUILD.bazel 可以看到pin_browsers默认值为True测试默认用 pin 的浏览器headless默认False并配有对应的config_settinguse_pinned_browser/use_headless_browser各语言测试目标据此选择驱动与浏览器启动参数。5.2 按大小与 tag 过滤测试Selenium 测试按 size 分为三档small——通常是单元测试不打开浏览器large——通常是真正驱动浏览器的测试medium——比简单单元测试复杂但不完整驱动浏览器。按 size 过滤bazel test //language/... --test_size_filterssmall按 tag 过滤注意负号前缀表示排除bazel test //language/... --test_tag_filtersthis,-not-thisREADME 特别提醒如果同时给出多个--test_tag_filters只有最后一个生效——在继承了某个 config 时要格外小心。各语言的测试细节写在对应目录的TESTING.md中如 java/TESTING.md、py/TESTING.md、rb/TESTING.md。以 Python 为例py/TESTING.md 展示了 Bazel 为每种浏览器生成独立测试目标bazel test //py:unit无浏览器单元测试、bazel test //py:test-chromeChrome 浏览器测试、bazel test //py:test-firefoxFirefox单个测试文件的目标命名规则是test/path/file-browser[-variant]可用bazel query //py:all | grep name查全名。5.3 Linux 上的有头测试虚拟 X 服务器Bazel 默认在当前 X 服务器 UI 上跑测试没有显示器时可以用虚拟/嵌套 X 服务器启动 X 服务器Xvfb :99或Xnest :99启动窗口管理器例如DISPLAY:99 jwm运行测试bazel test --test_envDISPLAY:99 //java/... --test_tag_filterschrome更简单的方式是用 Bazel 的--run_underbazel test --run_underxvfb-run -a //java/...6. 文档与发布6.1 API 文档生成各语言绑定的 API 文档由./go language:docs更新全部语言一次更新./go all:docs对应 Rakefile 中all:docs任务会依次调用 java/py/rb/dotnet/node 五种语言绑定的 docs 任务见 Rakefile。6.2 发布Releasing发布是构建 发布的组合流程往往需要多次执行并做额外处理。README 的核心要点使用 Rake 任务./go命令完成构建与发布且这些./go命令会附带--stamp参数把版本等构建信息写入产物这与 .bazelrc 中build:release --stamp与--compilation_modeopt的 release 配置相呼应。全量构建并发布./go all:release只发布指定语言./go language:release如果有 Selenium EngFlow 仓库的访问权限可以远程构建资产并下载到本地./go all:release[--config, release]这种./go task[arg1, arg2]的括号语法由go脚本支持——它会把--之前的参数视为 Rake 任务参数、--之后视为 rake flags见 go 脚本头部注释。完整的发布流程步骤在官方 wiki 的 Releasing Selenium 页面。7. 快速上手清单结合 README 与仓库实际内容一条最短的开发者上手路径是安装 Bazelisk 与 JDK 17设置好JAVA_HOME用javac验证在目标目录克隆仓库macOS 执行xcode-select --installWindows 跑 scripts/dev-environment-setup.ps1 或按 2.3 节手动配置构建一个目标验证工具链bazel build grid日志中会给出 Grid jar 的输出位置跑一个小规模的单元测试确认环境闭环bazel test //py:unit或bazel test //java/... --test_size_filterssmall日常开发使用./go language:build/./go language:docs格式化跑./scripts/format.sh需要多 worktree 时按 2.5 节配置用户级--disk_cache/--repository_cache与 per-worktree 的output_base。本文全部内容以当前仓库快照为准Bazel 版本 9.1.0.bazelversion、JDK 17 环境要求、pin_browsers默认开启等细节均来自仓库文件本身如后续仓库升级请以仓库最新文档与配置为准。【免费下载链接】seleniumA browser automation framework and ecosystem.项目地址: https://gitcode.com/GitHub_Trending/se/selenium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号