ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

如何用 Bazel 运行 Selenium Java 绑定测试:测试目标、浏览器标签与跳过注解

如何用 Bazel 运行 Selenium Java 绑定测试:测试目标、浏览器标签与跳过注解 如何用 Bazel 运行 Selenium Java 绑定测试测试目标、浏览器标签与跳过注解【免费下载链接】seleniumA browser automation framework and ecosystem.项目地址: https://gitcode.com/GitHub_Trending/se/selenium这篇文章解决一个具体问题在 Selenium 仓库中如何用 Bazel 跑通 Java 语言绑定java/目录的测试——包括如何定位测试目标、用浏览器标签筛选要跑哪些测试、以及测试失败时如何用 JUnit 跳过注解控制其运行范围。适用前提是你在 Selenium 仓库检出目录内工作并已按 README 的要求装好 Bazelisk自动按.bazelversion下载对应 Bazel 版本、JDK 17 及以上并将JAVA_HOME指向 JDK可用javac命令是否可用来确认。浏览器测试还需要一个可用的 X 显示环境Linux 下可用虚拟 X 服务器见文末。测试目标从哪里来java_selenium_test_suite与*Test.javaBazel 会为浏览器和远程 grid 分别创建独立的测试目标具体支持哪些浏览器取决于该测试目录中BUILD.bazel文件的声明见 java/TESTING.md。测试文件本身不需要手动注册*Test.java文件放在一个包含java_selenium_test_suite声明的BUILD.bazel所在目录即可被自动拾取。以 java/test/org/openqa/selenium/bidi/BUILD.bazel 为例声明形如java_selenium_test_suite( name large-tests, size large, srcs glob([*Test.java]), browsers BIDI_BROWSERS, tags [ selenium-remote, ], deps [...], )其中browsers参数决定该套件会为哪些浏览器生成测试目标取值列表定义在 java/defs.bzl如BIDI_BROWSERS、SINGLE_BROWSER。目标的路径写法遵循 Bazel 惯例见 README Building 一节以//开头接相对BUILD.bazel的目录路径再用:接目标名。例如 bidi 目录下所有测试对应bazel test //java/test/org/openqa/selenium/bidi/...如果不确定某个目录下有哪些目标可以先用bazel query查询构建图AGENTS.md 建议用bazel query ...定位 label再执行 build/test。运行测试的基本命令java/TESTING.md 给出的主路径命令bazel test //java/... # 运行全部 Java 测试 bazel test //java/test/org/openqa/selenium/chrome:ChromeDriverFunctionalTest # 运行单个测试测试默认并行执行。常用附加参数均来自 java/TESTING.mdbazel test //java/... --pin_browsers # 使用固定版本的浏览器文档标注为推荐 bazel test //java/... --flaky_test_attempts3 # 失败测试最多重跑 3 次 bazel test //java/... --test_outputall # 结束后显示所有测试输出 bazel test //java/... --test_outputstreamed # 实时显示输出会禁用并行执行另外根 AGENTS.md 中列出的--cache_test_resultsno用于禁用结果缓存、强制重新执行测试CONTRIBUTING.md 的 Java 小节给出的本地测试命令就带上了该参数bazel test --cache_test_resultsno --test_size_filterssmall grid java/test/...用 size 与浏览器标签筛选测试Bazel 按测试规模size和标签tag两个维度过滤。size 的含义见 README Testing 一节small— 通常是不开浏览器的单元测试medium— 比简单单元测试复杂、但不完全驱动浏览器large— 通常真正驱动浏览器的测试。对应的过滤命令bazel test //java/... --test_size_filterssmall # 仅单元测试无浏览器 bazel test //java/... --test_size_filterslarge # 所有浏览器测试浏览器标签过滤则决定针对哪个浏览器运行bazel test //java/... --test_tag_filterschrome # 只跑 chrome 测试 bazel test //java/... --test_tag_filtersremote-browser # 所有在 grid 上运行的浏览器测试 bazel test //java/... --test_tag_filters-safari # 用 - 前缀排除某个标签两点限制需要注意均来自 README同时出现多个--test_tag_filters时只有最后一个生效若同时使用了继承的 config 要特别小心--pin_browsersfalse表示改用 Selenium Manager 查找浏览器/驱动与默认的固定版本策略二选一。结果判断输出、重跑与 Linux 无显示环境bazel test本身会对每个目标给出 PASSED/FAILED 结论要看具体输出用--test_outputall结束后显示全部输出或--test_outputstreamed实时显示但会禁用并行。结果被缓存而未真正执行时加--cache_test_resultsno强制重跑AGENTS.md。在 Linux 上Bazel 默认在当前 X 服务器上运行浏览器测试。若没有图形会话README 给出的做法是起一个虚拟 X 服务器Xvfb :99 DISPLAY:99 jwm bazel test --test_envDISPLAY:99 //java/... --test_tag_filterschrome或者用 Bazel 的--run_under功能让xvfb-run前置执行bazel test --run_underxvfb-run -a //java/...跳过注解按浏览器控制测试运行测试类继承JupiterTestBase使用 JUnit 5Jupiter与 AssertJ 断言java/TESTING.md。跳过机制由 JUnit 注解实现注解接受value浏览器和reason一行一个浏览器。浏览器取值CHROME、EDGE、FIREFOX、SAFARI、IE默认ALL。两种跳过注解java/TESTING.md注解用途Ignore测试对某浏览器不可用。还可接受issueGitHub issue如#1234和gitHubActions只在 CI 上跳过。NotYetImplemented功能尚未实现。测试始终运行失败时按通过处理若意外通过则报错以便移除该注解。仓库中的真实用法如 java/test/org/openqa/selenium/AlertsTest.javaIgnore(value CHROME, reason Hangs) Ignore(value EDGE, reason Hangs)以及 java/test/org/openqa/selenium/ClickScrollingTest.java 中的issue参数Ignore(value IE, issue 716)与 driver 生命周期相关的注解同样接受value和reason配合共享的driver使用因为同一个driver在测试之间被复用java/TESTING.md注解用途NeedsFreshDriver测试需要干净的浏览器状态测试前重启 driver。NoDriverBeforeTest测试需要自定义 capabilities 或测试 driver 创建本身driver 会被销毁测试内需用createNewDriver(capabilities)自建。NoDriverAfterTest测试会把浏览器留在糟糕状态测试后重启 driver。还可接受failedOnly。新建测试时测试 HTML 页面放在common/src/web/页面 URL 取自java/test/org/openqa/selenium/testing/Pages.java的pages字段并有两个预配置的等待方法5 秒与 10 秒java/TESTING.mdclass MyFeatureTest extends JupiterTestBase { Test void testBasicFunctionality() { driver.get(pages.xhtmlTestPage); wait.until(ExpectedConditions.titleIs(XHTML Test Page)); // 10s timeout shortWait.until(ExpectedConditions.elementToBeClickable(element)); // 5s timeout assertThat(driver.getTitle()).isEqualTo(XHTML Test Page); } }需要同时开两个浏览器如多用户场景时用localDriver new WebDriverBuilder().get()创建第二个实例赋给localDriver字段后测试结束会自动 quit。文档同时强调用WebDriverBuilder或createNewDriver(capabilities)而不是直接new ChromeDriver()因为 builder 会遵循当前 Bazel 目标实际运行的浏览器硬编码驱动会与当前目标冲突。边界与限制多个--test_tag_filters参数只有最后一个生效README。浏览器测试依赖本地 X 会话或虚拟 X 服务器无显示环境的 Linux 机器需按上文配置DISPLAY或使用--run_underxvfb-run -a。--test_outputstreamed会禁用并行执行大批量运行时会明显变慢调试单个目标时再使用。新增测试文件只要满足*Test.java命名且位于含java_selenium_test_suite声明的目录下一般无需改动 Bazel 文件需要新浏览器组合时才涉及修改BUILD.bazeljava/TESTING.md。【免费下载链接】seleniumA browser automation framework and ecosystem.项目地址: https://gitcode.com/GitHub_Trending/se/selenium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表