๐ญ Playwright for .NET
![Join Slack](https://camo.githubusercontent.com/09a3b866c7e87f92455c97f42d5c16245de531f71109235616997941f58b5fbf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6a6f696e2d736c61636b2d696e666f6d6174696f6e616c)
PlaywrightSharp is a .Net library to automate Chromium, Firefox and WebKit browsers with a single API. Playwright delivers automation that is ever-green, capable, reliable and fast. See how Playwright is better.
Linux | macOS | Windows | |
---|---|---|---|
Chromium 86.0.4238.0 | โ | โ | โ |
WebKit 14.0 | โ | โ | โ |
Firefox 80.0b8 | โ | โ | โ |
Headless execution is supported for all browsers on all platforms.
Playwright Sharp relies on two external components: The browsers and the Playwright driver.
await Playwright.InstallAsync();
var playwright = await Playwright.CreateAsync();
Playwright.InstallAsync()
will download the required browsers. Playwright.CreateAsync()
will create and launch the playwright driver.
await Playwright.InstallAsync();
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.GoToAsync("http://www.bing.com");
await page.ScreenshotAsync(path: outputFile);
To avoid downloading the browsers in runtime, you can install the playwright-sharp dotnet tool:
dotnet tool install playwright-sharp-tool -g
playwright-sharp install-browsers
By running these two commands, you can avoid having the await Playwright.InstallAsync();
line in your code.
This snippet emulates Mobile Safari on a device at a given geolocation, navigates to maps.google.com, performs an action, and takes a screenshot.
await Playwright.InstallAsync();
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Webkit.LaunchAsync(false);
var contextOptions = playwright.Devices["iPhone 11 Pro"].ToBrowserContextOptions();
contextOptions.Locale = "en-US";
contextOptions.Geolocation = new Geolocation { Longitude = 12.492507m, Latitude = 41.889938m };
contextOptions.Permissions = new[] { ContextPermission.Geolocation };
var context = await browser.NewContextAsync(contextOptions);
var page = await context.NewPageAsync();
await page.GoToAsync("https://maps.google.com");
page.ClickAsync("text='Your location'"); //
await page.ScreenshotAsync("colosseum-iphone.png");
This code snippet navigates to example.com in Firefox, and executes a script in the page context.
await Playwright.InstallAsync();
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Firefox.LaunchAsync();
var context = await browser.NewContextAsync();
var page = await context.NewPageAsync();
await page.GoToAsync("https://www.example.com/");
var dimensions = await page.EvaluateAsync<Size>(@"() => {
return {
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight,
}
}");
Console.WriteLine(dimensions);
This code snippet sets up request routing for a WebKit page to log all network requests.
await Playwright.InstallAsync();
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Firefox.LaunchAsync();
var context = await browser.NewContextAsync();
var page = await context.NewPageAsync();
// Log and continue all network requests
await page.RouteAsync("**", (route, _) =>
{
Console.WriteLine(route.Request.Url);
route.ContinueAsync();
});
await page.GoToAsync("http://todomvc.com");