Yury Semikhatsky 6629ab4f84 fix(frame): drop the locks and keep the JS method shape
Review follow-up: no lock around _loadStates, the three wait methods keep
their original structure, and the only deviation from the JS client is
subscribing before the state check, with a comment at each spot.
WaitForURLAsync re-checks the URL inside the navigation wait once the
subscription exists instead of restructuring the method.
2026-10-15 11:26:18 -07:00
…
…
…

Playwright for .NET 🎭

NuGet version Join Discord

Linux macOS Windows
Chromium 156.0.8078.4 ✅ ✅ ✅
WebKit 27.2 ✅ ✅ ✅
Firefox 157.0 ✅ ✅ ✅

Playwright for .NET is the official language port of Playwright, the library to automate Chromium, Firefox and WebKit with a single API. Playwright is built to enable cross-browser web automation that is ever-green, capable, reliable and fast.

Documentation

https://playwright.dev/dotnet/docs/intro

API Reference

https://playwright.dev/dotnet/docs/api/class-playwright

using System.Threading.Tasks;
using Microsoft.Playwright;

using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync(new() { Headless = false });
var page = await browser.NewPageAsync();
await page.GotoAsync("https://playwright.dev/dotnet");
await page.ScreenshotAsync(new() { Path = "screenshot.png" });

Other languages

More comfortable in another programming language? Playwright is also available in

S
Description
.NET version of the Playwright testing and automation library.
Readme MIT 272 MiB
Languages
C# 53.3%
JavaScript 44.6%
TypeScript 1.3%
HTML 0.7%
Shell 0.1%