microsoft / Playwright Sharp
Programming Languages
Projects that are alternatives of or similar to Playwright Sharp
Playwright for .NET
🎭Website | .NET API reference
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 90.0.4421.0 | ✅ | ✅ | ✅ |
WebKit 14.0 | ✅ | ✅ | ✅ |
Firefox 86.0b10 | ✅ | ✅ | ✅ |
Headless execution is supported for all browsers on all platforms.
Usage
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);
Playwright Dependencies
Playwright Sharp relies on two external components: The Playwright driver and the browsers.
Playwright Driver
Playwright drivers will be copied to the bin
folder at build time. Nuget will rely on the RuntimeIdentifier to copy a platform-specific driver, or on the runtime used on dotnet publish.
If the RuntimeIdentifier is not set, all runtimes will be copied inside a runtimes folder. Then, the platform-specific driver will be picked at run-time.
Browsers
The way browsers are installed will vary depending on the use case scenario.
Playwright in test projects
If you use Playwright in test projects, all required browsers will be installed at build time.
Using Playwright in Docker
If you use the official Docker images, all the required browsers will be installed in that image. The minor version of the package will tell you which docker image tag to use. For instance, PlaywrightSharp 0.162.0 will work with the tag v1.6.2.
Using Playwright in a Remote Server.
If you run Playwright in a remote server. For instance, as part of a web application, you will need to run .\bin\playwright-cli.exe install
in Windows or ./bin/playwright-cli install
in OSX/Linux, as part of your deploy script.
Other possible scenarios.
If none of the scenarios mentioned above cover your scenario, you can install the browsers programmatically using await Playwright.InstallAsync();
Examples
Mobile and geolocation
This snippet emulates Mobile Safari on a device at a given geolocation, navigates to maps.google.com, performs an action, and takes a screenshot.
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Webkit.LaunchAsync(headless: 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://www.google.com/maps");
await page.ClickAsync(".ml-button-my-location-fab");
await page.WaitForLoadStateAsync(LifecycleEvent.Networkidle);
if ((await page.QuerySelectorAsync(".ml-promotion-no-thanks")) != null)
{
await page.ClickAsync(".ml-promotion-no-thanks");
}
await page.ScreenshotAsync("colosseum-iphone.png");
Evaluate in browser context
This code snippet navigates to example.com in Firefox and executes a script in the page context.
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);
Intercept network requests
This code snippet sets up request routing for a WebKit page to log all network requests.
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");