2021-04-06 22:23:55 -07:00
---
id: intro
2021-08-23 20:10:12 -07:00
title: "Getting started"
2021-04-06 22:23:55 -07:00
---
<!-- TOC -->
- [Release notes ](./release-notes.md )
2021-06-04 20:52:35 -07:00
## First project
2021-04-06 22:23:55 -07:00
2021-05-22 07:55:53 -07:00
Create a console project and add the Playwright dependency.
2021-06-02 09:23:06 -07:00
```bash
2021-06-05 14:33:36 -07:00
# Create project
2021-06-07 11:54:50 -07:00
dotnet new console -n PlaywrightDemo
cd PlaywrightDemo
2021-05-22 07:55:53 -07:00
2021-12-08 11:07:01 -08:00
# Add project dependency
2021-06-07 11:54:50 -07:00
dotnet add package Microsoft.Playwright
2021-12-08 11:07:01 -08:00
# Build the project
2021-06-07 11:54:50 -07:00
dotnet build
2021-12-08 11:07:01 -08:00
# Install required browsers
2021-12-09 17:14:30 -08:00
pwsh bin\Debug\netX\playwright.ps1 install
2022-01-18 00:28:53 +01:00
# If the pwsh command does not work (throws TypeNotFound), make sure to use an up-to-date version of PowerShell.
dotnet tool update --global PowerShell
2021-06-04 20:52:35 -07:00
```
Create a `Program.cs` that will navigate to `https://playwright.dev/dotnet` and take a screenshot in Chromium.
2021-04-06 22:23:55 -07:00
```csharp
2021-06-05 14:33:36 -07:00
using Microsoft.Playwright;
2021-05-15 10:56:10 -07:00
using System.Threading.Tasks;
2021-06-05 14:33:36 -07:00
class Program
2021-05-15 10:56:10 -07:00
{
2021-06-05 14:33:36 -07:00
public static async Task Main()
2021-05-15 10:56:10 -07:00
{
2021-06-05 14:33:36 -07:00
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 PageScreenshotOptions { Path = "screenshot.png" });
2021-05-15 10:56:10 -07:00
}
}
2021-04-06 22:23:55 -07:00
```
2021-06-04 20:52:35 -07:00
Now run it.
2021-05-22 07:55:53 -07:00
2021-06-02 09:23:06 -07:00
```bash
2021-05-22 07:55:53 -07:00
dotnet run
```
By default, Playwright runs the browsers in headless mode. To see the browser UI, pass the `Headless = false` flag while launching the browser. You can also use [`option: slowMo` ] to slow down execution. Learn more in the debugging tools [section ](./debug.md ).
2021-04-06 22:23:55 -07:00
```csharp
2022-01-26 16:46:16 -08:00
await playwright.Firefox.LaunchAsync(new BrowserTypeLaunchOptions
{
Headless = false,
SlowMo = 50,
2021-06-08 16:03:49 -03:00
});
2021-04-06 22:23:55 -07:00
```
2021-06-04 20:52:35 -07:00
## First test
You can choose to use NUnit test fixtures that come bundled with Playwright. These fixtures support running tests on multiple browser engines in parallel, out of the box. Learn more about [Playwright with NUnit ](./test-runners.md ).
```bash
2021-06-05 14:33:36 -07:00
# Create new project.
dotnet new nunit -n PlaywrightTests
2021-06-07 11:54:50 -07:00
cd PlaywrightTests
```
2021-06-05 14:33:36 -07:00
2021-06-07 11:54:50 -07:00
Install dependencies, build project and download necessary browsers. This is only done once per project.
2021-06-04 20:52:35 -07:00
2021-06-07 11:54:50 -07:00
```bash
2021-12-08 11:07:01 -08:00
# Add project dependency
2021-06-08 19:14:18 -07:00
dotnet add package Microsoft.Playwright.NUnit
2021-12-08 11:07:01 -08:00
# Build the project
2021-06-07 11:54:50 -07:00
dotnet build
2021-12-08 11:07:01 -08:00
# Install required browsers
2021-12-09 17:14:30 -08:00
pwsh bin\Debug\netX\playwright.ps1 install
2021-06-04 20:52:35 -07:00
```
2021-06-05 14:33:36 -07:00
Edit UnitTest1.cs file.
2021-06-04 20:52:35 -07:00
```csharp
using System.Threading.Tasks;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;
2021-06-05 14:33:36 -07:00
namespace PlaywrightTests
2021-06-04 20:52:35 -07:00
{
[Parallelizable(ParallelScope.Self)]
2021-06-05 14:33:36 -07:00
public class Tests : PageTest
2021-06-04 20:52:35 -07:00
{
2021-06-05 14:33:36 -07:00
[Test]
public async Task ShouldAdd()
{
int result = await Page.EvaluateAsync< int > ("() => 7 + 3");
Assert.AreEqual(10, result);
}
2021-06-04 20:52:35 -07:00
[Test]
public async Task ShouldMultiply()
{
int result = await Page.EvaluateAsync< int > ("() => 7 * 3");
Assert.AreEqual(21, result);
}
}
}
```
```bash
dotnet test -- NUnit.NumberOfTestWorkers=5
```
2021-04-06 22:23:55 -07:00
## Record scripts
2021-08-23 20:10:12 -07:00
[Command line tools ](./cli.md ) can be used to record user interactions and generate C# code.
2021-04-06 22:23:55 -07:00
2021-06-02 09:23:06 -07:00
```bash
2021-12-09 17:14:30 -08:00
pwsh bin\Debug\netX\playwright.ps1 codegen
2021-04-06 22:23:55 -07:00
```
2022-01-26 20:43:44 +01:00
## Install browsers via API
It's possible to run [Command line tools ](./cli.md ) commands via the .NET API:
```csharp
var exitCode = Microsoft.Playwright.Program.Main(new[] {"install"});
if (exitCode != 0)
{
throw new Exception($"Playwright exited with code {exitCode}");
}
```
2022-01-26 21:26:51 +01:00
## Bundle drivers for different platforms
Playwright by default does bundle only the driver for the .NET publish target runtime. If you want to bundle for additional platforms, you can
override this behavior by using either `all` , `none` or `linux` , `win` , `osx` in your project file.
```xml
< PropertyGroup >
< PlaywrightPlatform > all< / PlaywrightPlatform >
< / PropertyGroup >
```
or:
```xml
< PropertyGroup >
< PlaywrightPlatform > osx;linux< / PlaywrightPlatform >
< / PropertyGroup >
2022-01-26 17:39:36 -07:00
```
2022-01-26 21:26:51 +01:00
2021-04-06 22:23:55 -07:00
## System requirements
The browser binaries for Chromium, Firefox and WebKit work across the 3 platforms (Windows, macOS, Linux):
2021-04-30 16:44:30 +02:00
### Windows
Works with Windows and Windows Subsystem for Linux (WSL).
### macOS
Requires 10.14 (Mojave) or above.
### Linux
Depending on your Linux distribution, you might need to install additional
dependencies to run the browsers.
:::note
Only Ubuntu 18.04 and Ubuntu 20.04 are officially supported.
:::
2021-08-23 20:10:12 -07:00
See also in the [Command line tools ](./cli.md#install-system-dependencies )
2021-04-30 16:44:30 +02:00
which has a command to install all necessary dependencies automatically for Ubuntu
LTS releases.