拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Playwright .NET 库模式实战:从控制台项目、Web-First 断言到跨平台 Driver 打包

Playwright .NET 库模式实战从控制台项目、Web-First 断言到跨平台 Driver 打包【免费下载链接】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本篇技术指南围绕 Playwright 官方文档中的 .NET「Library库」用法展开讲解如何在不依赖 MSTest、NUnit、xUnit 等测试框架基类的情况下以Microsoft.PlaywrightNuGet 包为核心编写独立自动化脚本。读完本文你将掌握完整的 .NET 控制台项目搭建与浏览器安装流程、页面导航与截图的最小可运行示例、headless/slowMo启动参数、库模式下 Web-First 自动重试断言的用法以及通过PlaywrightPlatform属性为多平台打包 Driver 的方法。什么是 Playwright 的 .NET 库模式Playwright for .NET 有两种主要使用方式测试框架模式使用 Playwright 为 MSTest、NUnit、xUnit 或 xUnit v3 提供的基类PageTest、ContextTest等详见 docs/src/test-runners-csharp.md库模式本文主题直接把Microsoft.Playwright当作普通库引入在自己的应用代码或其他测试运行器中手动管理Playwright、Browser、Page的生命周期。如果你的场景是开发一个利用 Playwright 能力的应用程序例如爬取、截图服务、CI 中的自定义自动化步骤或者你的测试运行器与 Playwright 官方基类不匹配那么库模式是合适的选择。库模式的代价是浏览器与上下文的创建、复用和清理需要你自己负责好在 API 语义与官方测试框架完全一致。快速创建项目并安装浏览器库模式的起点是一个非常普通的 .NET 控制台项目。按官方文档 docs/src/library-csharp.md 的步骤操作# Create project dotnet new console -n PlaywrightDemo cd PlaywrightDemo # Add project dependency dotnet add package Microsoft.Playwright # Build the project dotnet build # Install required browsers - replace netX with actual output folder name, e.g. net8.0. pwsh bin/Debug/netX/playwright.ps1 install几个关键细节需要注意netX是占位符pwsh bin/Debug/netX/playwright.ps1 install中的netX需要替换为你项目实际的输出目录名例如net8.0。构建完成后可以在bin/Debug/net8.0/下看到随包分发的playwright.ps1安装脚本。PowerShell 版本问题如果pwsh命令抛出TypeNotFound错误说明你的 PowerShell 版本过旧执行以下命令升级dotnet tool update --global PowerShellplaywright.ps1 install从哪里来这一约定在 Playwright 核心代码中有明确印证。从源码结构看packages/playwright-core/src/server/registry/index.ts 中的buildPlaywrightCLICommand函数按 SDK 语言生成了不同的 CLI 安装命令其中 C# 对应的正是pwsh bin/Debug/netX/playwright.ps1 parametersCLI 帮助文本生成逻辑 packages/playwright-core/src/cli/program.ts 也使用同一约定。也就是说.NET 场景下「用构建产物里的脚本装浏览器」是 Playwright 工具链设计好的标准路径与 JavaScript 生态的npx playwright install一一对应。该脚本会下载与已安装 SDK 版本匹配的浏览器二进制到本地浏览器缓存目录之后即可离线启动。最小示例导航并截图创建Program.cs用 Chromium 打开指定页面并保存截图——这是官方文档给出的标准最小示例可直接复制运行using Microsoft.Playwright; using var playwright await Playwright.CreateAsync(); await using var browser await playwright.Chromium.LaunchAsync(); var page await browser.NewPageAsync(); await page.GotoAsync(https://playwright.dev/dotnet); await page.ScreenshotAsync(new() { Path screenshot.png });代码要点Playwright.CreateAsync()是库模式的入口它会启动 Playwright 驱动进程并返回句柄。用using声明程序退出时自动释放驱动playwright.Chromium.LaunchAsync()启动 Chromium 内核浏览器。同样的 API 还有playwright.Firefox、playwright.WebKit三者共享同一套 API这正是 Playwright「一套 API 驱动三种引擎」的核心卖点browser.NewPageAsync()创建一个全新上下文BrowserContext加页面。注意上下文与页面不是IAsyncDisposable由Browser释放时一并清理因此这里没有对其使用await usingpage.ScreenshotAsync(new() { Path screenshot.png })使用 C# 9 的 target-typednew省略写法等价于传入一个PageScreenshotOptions对象也可按需追加FullPage、Type等参数。然后运行dotnet run执行完毕后当前目录会生成screenshot.png。有头模式与 Slow Mo默认情况下 Playwright 以 headless无头模式运行浏览器。若要看到浏览器界面用于调试将BrowserType.launch的headless选项设为false还可以用slowMo参数人为放慢操作节奏官方文档建议在调试场景下配合 docs/src/debug.md 一起使用await using var browser await playwright.Firefox.LaunchAsync(new() { Headless false, SlowMo 50, });SlowMo 50表示每个 Playwright 操作之间额外插入 50 毫秒延迟方便肉眼观察页面变化。这个参数并非只存在于文档从源码结构看packages/playwright-core/src/client/browserType.ts 中LaunchAsync的启动参数会把slowMo: params.slowMo原样传递给驱动端因此 .NET、Node、Python 各 SDK 的slowMo行为是一致的。库模式中使用 Web-First 断言即使不使用 Playwright 官方测试基类你依然可以使用它的 Web-First 断言。这类断言的核心特性是自动重试Playwright 会反复重新获取元素并检查条件直到条件满足或超时例如等待某个链接出现特定文案。官方文档给出的完整示例using Microsoft.Playwright; using static Microsoft.Playwright.Assertions; // Change the default 5 seconds timeout if youd like. SetDefaultExpectTimeout(10_000); using var playwright await Playwright.CreateAsync(); await using var browser await playwright.Chromium.LaunchAsync(); var page await browser.NewPageAsync(); await page.GotoAsync(https://playwright.dev/dotnet); await Expect(page.GetByRole(AriaRole.Link, new() { Name Get started })).ToBeVisibleAsync();要点解析using static Microsoft.Playwright.Assertions;静态导入后Expect(...)与SetDefaultExpectTimeout(...)直接可用默认断言超时是 5 秒。这一点在 docs/src/test-assertions-csharp-java-python.md 中有明确说明By default, the timeout for assertions is 5 seconds。示例中调用SetDefaultExpectTimeout(10_000)把全局断言超时改为 10 秒适用于页面加载较慢的场景page.GetByRole(AriaRole.Link, new() { Name Get started })是按 ARIA 角色 可访问名称定位元素的推荐方式比脆弱的 CSS/XPath 选择器更抗改版ToBeVisibleAsync()属于可自动重试的 Locator 断言族toBeVisible、toHaveText、toHaveValue等。与测试框架模式不同的是库模式下断言失败会直接抛出TimeoutError异常由你自己的代码决定如何捕获与处理。为不同平台打包 DriverMicrosoft.Playwright包内置 Node.js 驱动Playwright 的 .NET SDK 本质上是对驱动进程的消息转发。默认情况下发布publish时只会打包 .NET publish 目标运行平台对应的那份 Driver。如果你希望产物能在其他操作系统上运行例如在 Linux CI 上发布、产物分发到 Windows 客户端可以在项目文件.csproj中通过PlaywrightPlatformMSBuild 属性覆盖默认行为取值支持all、none或linux、win、osxPropertyGroup PlaywrightPlatformall/PlaywrightPlatform /PropertyGroup也可以只选择特定平台的组合用分号分隔PropertyGroup PlaywrightPlatformosx;linux/PlaywrightPlatform /PropertyGroupall三种平台的 Driver 全部随产物发布体积最大但通用性最强none不打包任何 Driver适合你确定运行环境已具备驱动的场景osx;linux只携带 macOS 与 Linux 的 Driver产物体积与兼容性折中。需要注意的适用前提PlaywrightPlatform影响的是publish 时 Driver 的打包范围而浏览器二进制仍需在各运行环境上通过playwright.ps1 install或等价方式单独安装二者不要混淆。小结与延伸阅读本文完整覆盖了 Playwright .NET 库模式的核心链路dotnet add package Microsoft.Playwright引入依赖 →pwsh bin/Debug/netX/playwright.ps1 install安装浏览器 → 用Playwright.CreateAsync()手工管理浏览器生命周期 →SetDefaultExpectTimeoutExpect(...)获得自动重试断言 → 用PlaywrightPlatform控制跨平台 Driver 打包。相关仓库资料可供继续深入库模式官方文档原文docs/src/library-csharp.md测试框架基类MSTest/NUnit/xUnit与并行策略docs/src/test-runners-csharp.mdWeb-First 断言全列表与重试语义docs/src/test-assertions-csharp-java-python.md调试工具Inspector、Verbose API 日志docs/src/debug.mdCLI 安装命令生成逻辑.NET 使用playwright.ps1的出处packages/playwright-core/src/server/registry/index.ts、packages/playwright-core/src/cli/program.ts【免费下载链接】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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门