# 14.4 ¿Qué es Playwright?

[Playwright](https://playwright.dev/dotnet/) es una nueva opción para crear tus pruebas desarrollada por Microsoft con algunos programadores de puppeter, otro framework de testing creado por google.

Puedes realizar tus pruebas con C#, javascript, typescript, python o java. Soporta los navegadores  Chrome y Microsoft Edge (con [Chromium](https://www.chromium.org/)), Safari (con [WebKit](https://webkit.org/)) y Firefox.

Lo puedes instalar con el comando npm para nodeJS.

```
npm i -D playwright
```

O con el comando dotnet tool para c#.

```
dotnet tool install --global Microsoft.Playwright.CLI
```

### Ejemplo

Un ejemplo básico con javascript es el siguiente:

```
const { webkit } = require('playwright');

(async () => {
  const browser = await webkit.launch();
  const page = await browser.newPage();
  await page.goto('http://www.google.com');
  await page.screenshot({ path: `example.png` });
  await browser.close();
})();
```

### Generar scripts

Puedes generar tus scripts con el comando playwright codegen seguido de la página que deseas probar.

`playwright codegen wikipedia.org`

Se abrirá un navegador y te va a generar el codigo por cada acción que realices

![](https://3731331968-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LKmGSg4qhizjqeDPHJC%2Fuploads%2FNpzx39vVrr7ZSxzNkCql%2Fimage.png?alt=media\&token=28107b5d-1eb7-471e-945c-3f20d81c3a63)

Este es el código generado

```csharp
using Microsoft.Playwright;
using System;
using System.Threading.Tasks;
class Program
{
    public static async Task Main()
    {
        using var playwright = await Playwright.CreateAsync();
        await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
        {
            Headless = false,
        });
        var context = await browser.NewContextAsync();
        // Abre una nueva página
        var page = await context.NewPageAsync();
        // Navega a la página https://www.wikipedia.org/
        await page.GotoAsync("https://www.wikipedia.org/");
        // Da click en un input con el nombre search
        await page.ClickAsync("input[name=\"search\"]");
        // Escribe la palabra Testing al input con el nombre search
        await page.FillAsync("input[name=\"search\"]", "Testing");
        // Da clic en el texto Pruebas de Software
        await page.ClickAsync("text=Pruebas de software");
        // Assert.AreEqual("https://es.wikipedia.org/wiki/Pruebas_de_software", page.Url);
    }
}
```

### Ventajas y Desventajas

Ventajas:

* Incluye por defecto auto waits por lo que tienes que agregar código para esperar a que un elemento este visible.
* Puedes simular la llamada al servicio rest y sustituir la respuesta por datos fijos.
* Al igual que selenium, cypress puedes grabar los pasos y te genera el código.
* Si soporta múltiples dominios, iframes, tabs, navegadores.
* También graba videos y screenshots de los tests
* Es rápido y te permite reutilizar el contexto del browser

Desventajas:

* No soporta Internet Explorer 11 ni Edge no basado en Chromium.
* Tiene poco tiempo que salió por lo tanto no hay tanta información, cursos

Tiene soporte en Discord&#x20;
