如何用 Bazel 运行 Selenium JavaScript 绑定测试(Mocha 与按浏览器拆分的测试目标)
如何用 Bazel 运行 Selenium JavaScript 绑定测试Mocha 与按浏览器拆分的测试目标【免费下载链接】seleniumA browser automation framework and ecosystem.项目地址: https://gitcode.com/GitHub_Trending/se/selenium如果你在 Selenium 仓库中修改了javascript/selenium-webdriver/下的 JavaScript 绑定代码需要运行它的测试来验证改动。这些测试基于 Mocha 编写全部通过 Bazel 驱动无浏览器的单元测试由small-tests目标一次性跑完而需要真实浏览器的测试则按“单个测试文件 × 单个浏览器”拆分成独立的 Bazel 测试目标如test-element-finding-test.js-chrome。本文基于 TESTING.md 与 BUILD.bazel 给出从准备环境到按浏览器定向执行、再到判定结果的完整路径。准备条件按 README.md “Installing” 一节本地贡献环境要求BazeliskBazel 的包装器它会自动读取.bazelversion文件中指定的 Bazel 版本并透传所有命令行参数。Java JDK 17 或更高版本并把JAVA_HOME指向 JDK不是 JRE的 Java 可执行文件位置。可以用javac命令验证只有装了 JRE 时该命令不存在。测试代码的位置来自 TESTING.mdtest/lib/放小型测试small tests不需要浏览器test/目录下以_test.js结尾的文件是需要浏览器的大型测试large tests测试框架为 Mocha断言使用 Node.js 的assert模块suite()包装器处理多浏览器环境。先跑无浏览器的单元测试不需要浏览器、最快的反馈来自small-tests目标bazel test //javascript/selenium-webdriver:small-tests # Unit tests (no browser)在 BUILD.bazel 中该目标是一个size small的mocha_test运行./**/*test.js模式下的测试。Bazel 输出的每个目标状态PASS/FAIL就是判定依据想看完整控制台输出而不是只看错误时加上--test_outputall。找到按浏览器拆分的测试目标每个大型测试文件会为每个浏览器生成一个独立目标。BUILD.bazel 中的命名规则是把测试文件标签中的/和_替换为-再追加浏览器名即test-file-browser。由于当前BROWSERS字典javascript/private/browsers.bzl只定义了chrome和firefox两个键所以按浏览器拆分生成的目标只有-chrome和-firefox后缀两种每个目标会设置环境变量SELENIUM_BROWSER为对应浏览器并带有browser-test、no-sandbox、requires-network标签。运行前先确认真实的目标名TESTING.md 给出的做法# Per-file browser targets are named test-file-browser; discover exact names with: bazel query //javascript/selenium-webdriver:all | grep element-finding然后定向执行例如只跑元素查找测试的 Chrome 版或 Firefox 版bazel test //javascript/selenium-webdriver:test-element-finding-test.js-chrome bazel test //javascript/selenium-webdriver:test-element-finding-test.js-firefox运行全部测试与常用参数要跑该绑定下的所有测试包括所有按浏览器拆分的大型测试使用路径通配bazel test //javascript/selenium-webdriver/... # All testsTESTING.md 给出的附加参数bazel test //javascript/selenium-webdriver/... --flaky_test_attempts3 bazel test //javascript/selenium-webdriver/... --test_outputall--flaky_test_attempts3失败的测试最多重跑 3 次--test_outputall打印测试的全部输出而不只是错误。另外两个在 AGENTS.md 与 README.md 中记录的通用手段用--test_size_filterssmall过滤出只做单元测试的目标small 通常指不开浏览器的测试large 指真正驱动浏览器的测试用--cache_test_resultsno禁用结果缓存强制重跑。结果如何判定与验证每个bazel test目标在 Bazel 输出中显示通过/失败状态失败时加--test_outputall查看 Mocha 的控制台输出。仓库的 mocha_test 规则 会把 Mocha 的 JUnit XML 写到 Bazel 期望的位置设置MOCHA_FILE为$$XML_OUTPUT_FILE并按size注入超时small 为 60000 毫秒large 为 900000 毫秒所以按浏览器拆分的大型测试有独立、更长的超时预算。浏览器定位方面browsers.bzl 在 Linux 远程执行RBE配置下会注入固定的浏览器与 driverSE_CHROME、SE_GECKODRIVER等环境变量指向 runfiles 内的固定版本默认分支为空即由 Selenium Manager 定位浏览器/driver对应 README 中--pin_browsersfalse的说明。限制与注意事项按浏览器拆分的目标只针对BROWSERS当前定义的chrome和firefox生成测试代码里Browser.SAFARI、Browser.EDGE、Browser.IE等取值只用于ignore()跳过逻辑不代表存在对应的 Bazel 目标。这些浏览器测试带有requires-network与no-sandbox标签且需要可用的浏览器环境首次运行会触发依赖与浏览器解析耗时明显长于small-tests。新增测试文件时在已有目录下不需要改 Bazel 文件——BUILD.bazel 用glob([test/**/*_test.js])自动收集大型测试并展开出各浏览器目标TESTING.md “Build Files” 一节。【免费下载链接】seleniumA browser automation framework and ecosystem.项目地址: https://gitcode.com/GitHub_Trending/se/selenium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考