
Java 如何把 Playwright 接入 JUnit 5 测试并使用 UsePlaywright 注入 Page 夹具【免费下载链接】playwrightPlaywright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.项目地址: https://gitcode.com/GitHub_Trending/pl/playwright如果你的 Java 项目正在用 JUnit 5Jupiter做端到端测试又不想在每个测试类里手写Playwright.create()、browser.newContext()、context.close()这一套生命周期代码Playwright 提供了一组 JUnit 夹具在测试类上加上UsePlaywright注解测试方法里声明Page page参数框架就会自动初始化 Playwright、Browser、BrowserContext 和 Page并在测试结束后清理。这个集成在文档中的标题是 “JUnit (experimental)”于 Playwright Java 1.42 版本引入属于实验功能见 Release notes 与 JUnit 指南。本文的主路径是 Maven 项目Gradle 的差异在后面单独说明。适用前提来自 Installation 文档Java 8 或更高版本操作系统为 Windows 11 / Windows Server 2019 / WSL、macOS 14 (Sonoma) 或更高、Debian 12/13、Ubuntu 22.04/24.04/26.04x86-64 或 arm64项目使用 JUnit 5测试方法使用org.junit.jupiter.api.Test注解。声明 Maven 依赖Playwright 以 Maven 模块分发最简接入方式是在pom.xml的dependencies中添加一个依赖。Installation 文档 给出的完整示例如下其中的%%VERSION%%是文档里的模板占位符需要替换为你要使用的 Playwright 具体版本号本仓库当前package.json中的版本为1.64.0-next可参考仓库实际发布版本选择dependencies dependency groupIdcom.microsoft.playwright/groupId artifactIdplaywright/artifactId version%%VERSION%%/version !-- 替换为你要使用的 Playwright 版本号 -- /dependency /dependencies文档同时建议配置maven-compiler-plugin3.10.1source/target设为 1.8并注释说明“对接口静态方法的引用要求 source level 1.8 以上”build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.10.1/version configuration source1.8/source target1.8/target /configuration /plugin /plugins /build如果项目使用 GradleTest Runners 文档 给出了对应的build.gradleGroovy配置依赖com.microsoft.playwright:playwright:%%VERSION%%同样是需替换的版本占位符repositories配置mavenCentral()并在test块中声明useJUnitPlatform()这样 Gradle 才会用 JUnit 5 平台执行测试。浏览器二进制首次运行自动下载也可显式安装Playwright 每个版本需要特定版本的浏览器二进制文件。按 Installation 文档首次编译运行程序时会“下载 Playwright 包并安装 Chromium、Firefox 和 WebKit 的浏览器二进制”——即首次跑起来时浏览器会自动就位。如果需要显式安装例如升级 Playwright 后需要重新执行安装见 Browsers 文档Java 下使用 Maven 调用 Playwright CLImvn exec:java -e -D exec.mainClasscom.microsoft.playwright.CLI -D exec.argsinstall不带参数时安装默认浏览器集也可以指定单个浏览器例如install webkitmvn exec:java -e -D exec.mainClasscom.microsoft.playwright.CLI -D exec.argsinstall webkit想查看支持的全部浏览器把参数换成install --help即可。这条命令只安装浏览器二进制不影响已有测试代码。用 UsePlaywright 写入第一个测试在测试类上加UsePlaywright测试方法的参数就“告诉 JUnit 设置对应的夹具并提供给测试方法”。JUnit 指南 的完整示例可直接作为src/test/java下的测试类断言即验证点package org.example; import com.microsoft.playwright.Page; import com.microsoft.playwright.junit.UsePlaywright; import org.junit.jupiter.api.Test; import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; UsePlaywright public class TestExample { Test void shouldClickButton(Page page) { page.navigate(data:text/html,scriptvar result;/scriptbutton onclickresult\Clicked\Go/button); page.locator(button).click(); assertEquals(Clicked, page.evaluate(result)); } Test void shouldCheckTheBox(Page page) { page.setContent(input idcheckbox typecheckbox/input); page.locator(input).check(); assertEquals(true, page.evaluate(window[checkbox].checked)); } Test void shouldSearchWiki(Page page) { page.navigate(https://www.wikipedia.org/); page.locator(input[name\search\]).click(); page.locator(input[name\search\]).fill(playwright); page.locator(input[name\search\]).press(Enter); assertThat(page).hasURL(https://en.wikipedia.org/wiki/Playwright); } }注意示例中三条测试方法共用同一个Browser每个类里的测试方法共享 Browser 以优化资源但每条测试拥有自己的BrowserContext和Page浏览器状态在测试之间是隔离的。shouldSearchWiki访问外网如果你的环境无法访问wikipedia.org可只保留前两个本地用例验证接入是否成功。可用的预定义夹具文档列出的夹具及作用来源FixtureTypeDescriptionpagePageIsolated page for this test run.browserContextBrowserContextIsolated context for this test run. Thepagefixture belongs to this context as well.browserBrowserBrowsers are shared across tests to optimize resources.playwrightPlaywrightPlaywright instance is shared between tests running on the same thread.requestAPIRequestContextIsolated APIRequestContext for this test run.也就是说方法签名里声明哪个类型框架就注入哪个夹具page、browserContext、browser、playwright、request都可作为参数出现。结果验证文档没有给出一段固定的成功日志验证方式就是测试断言本身assertEquals(Clicked, page.evaluate(result))点击后页面变量result应等于Clicked不满足则该测试失败assertThat(page).hasURL(https://en.wikipedia.org/wiki/Playwright)使用 Playwright 的 web-first 断言校验最终 URLassertThat(page).hasTitle(Pattern.compile(Playwright))校验页面标题匹配正则文档 Fixtures 章节的例子。用你的构建工具执行测试Gradle 项目在test { useJUnitPlatform() }配置下通过 Gradle 的测试任务运行Maven 走标准的test任务测试全部通过、无失败断言即说明UsePlaywright夹具链路工作正常。浏览器未安装时测试会在启动浏览器环节失败此时先执行上一节的install命令。可选用 OptionsFactory 定制夹具选项默认夹具不满足时比如要 headful 运行、或给页面/API 请求设置 baseURL实现OptionsFactory接口并把类写进UsePlaywright()注解即可覆盖 [BrowserType.launch] 的启动选项、Browser.newContext的上下文选项和APIRequest.newContext的选项来源import com.microsoft.playwright.junit.Options; import com.microsoft.playwright.junit.OptionsFactory; import com.microsoft.playwright.junit.UsePlaywright; UsePlaywright(MyTest.CustomOptions.class) public class MyTest { public static class CustomOptions implements OptionsFactory { Override public Options getOptions() { return new Options() .setHeadless(false) .setContextOption(new Browser.NewContextOptions() .setBaseURL(https://github.com)) .setApiRequestOptions(new APIRequest.NewContextOptions() .setBaseURL(https://playwright.dev)); } } Test public void testWithCustomOptions(Page page, APIRequestContext request) { page.navigate(/); assertThat(page).hasURL(Pattern.compile(github)); APIResponse response request.get(/); assertTrue(response.text().contains(Playwright)); } }要点setHeadless(false)让浏览器带 UI 启动setContextOption里的baseURL让page.navigate(/)这类相对路径生效setApiRequestOptions单独控制request夹具的 baseURL。文档示例的断言是访问/后 URL 匹配github对request发起 GET 后响应文本包含Playwright可照此校验定制是否生效。可选并行运行多个测试类JUnit 默认单线程顺序执行所有测试自 JUnit 5.3 起可改为并行执行。文档同时提醒不加同步就从多个线程使用同一个 Playwright 对象是不安全的推荐每个线程创建并独占一个 Playwright 实例来源。使用UsePlaywright时文档给出的示例就是多个测试类各自标注UsePlaywright前文的TestExample即为一个文档另配了一个含shouldReturnInnerHTML、shouldClickButton两个用例的Test2类。让“类内顺序、类间并行最大线程数取 CPU 核心数的一半”在 JUnit 配置中设置junit.jupiter.execution.parallel.enabled true junit.jupiter.execution.parallel.mode.default same_thread junit.jupiter.execution.parallel.mode.classes.default concurrent junit.jupiter.execution.parallel.config.strategydynamic junit.jupiter.execution.parallel.config.dynamic.factor0.5如果不用UsePlaywright而是手动管理生命周期Test Runners 文档 的并行方案是基类加TestInstance(TestInstance.Lifecycle.PER_CLASS)把Playwright、Browser存为实例字段并在BeforeAll/AfterAll中创建/关闭每个测试类继承该基类从而“每个类实例拥有自己的 Playwright 副本”。限制与注意事项该集成目前是实验功能文档标题即 “JUnit (experimental)”API 可能在后续版本调整跟进 Release notes 中的相关说明。文档示例中的外部站点wikipedia.org、playwright.dev、github.com需要网络可达离线环境下请改用data:text/html或page.setContent(...)类的本地用例文档示例已包含这类离线写法。%%VERSION%%是文档模板占位符而非真实版本号写入pom.xml/build.gradle前必须替换否则构建会直接失败。升级 Playwright 版本后浏览器二进制可能需要同步重装按 Browsers 文档 的说法每次更新 Playwright 后“可能需要重新运行install命令”。进一步阅读手动生命周期写法BeforeAll/AfterAll方案见 Running and debugging tests测试运行器与 TestNG 对照见 Test Runners。【免费下载链接】playwrightPlaywright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.项目地址: https://gitcode.com/GitHub_Trending/pl/playwright创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考