O Playwright é um framework de automação de testes web criado pela Microsoft em 2020. Ele permite escrever testes E2E (end-to-end) confiáveis para aplicações web, suportando nativamente Chromium, Firefox e WebKit (Safari) com uma única API.
O Playwright foi desenvolvido pela mesma equipe que criou o Puppeteer no Google, trazendo toda a experiência acumulada para uma nova ferramenta mais robusta e com suporte a múltiplos navegadores.
| Critério | Playwright | Cypress | Selenium |
|---|---|---|---|
| Multi-browser real | ✅ Chromium, Firefox, WebKit | ✅ Todos | |
| Auto-wait | ✅ Automático | ✅ Automático | ❌ Manual |
| Testes paralelos | ✅ Nativo e gratuito | Manual | |
| Testes de API | ✅ Integrado | ✅ Integrado | ❌ |
| Emulação mobile | ✅ iOS/Android | ❌ | |
| Multi-tab / Multi-janela | ✅ | ❌ | ✅ |
| Testes visuais | ✅ Nativo | Via plugins | Via plugins |
| Trace viewer | ✅ | ❌ | ❌ |
| Linguagens suportadas | TS, JS, Python, Java, C# | JS/TS | Muitas |
- Auto-wait inteligente: espera automaticamente elementos ficarem prontos antes de interagir
- Locators semânticos:
getByRole(),getByLabel(),getByText()alinhados com acessibilidade - Isolamento de contextos: cada teste roda em contexto de browser isolado
- Paralelismo gratuito: múltiplos workers sem custo adicional
- Trace viewer: grave e visualize cada passo do teste como um filme
- Codegen: grave testes navegando no browser com
npx playwright codegen - API testing integrado: teste backend e frontend com a mesma ferramenta
Ao longo deste guia você vai aprender a:
- Instalar e configurar o Playwright no seu sistema operacional
- Escrever testes usando locators semânticos modernos
- Usar assertions automáticas com
expect() - Organizar testes com Page Object Model e Fixtures
- Interceptar e mockar requisições de rede
- Escrever testes de API com
APIRequestContext - Fazer testes visuais com screenshots
- Executar testes em paralelo e integrá-los ao CI/CD
import { test, expect } from '@playwright/test';
test('login com sucesso', async ({ page }) => {
await page.goto('/login');
await page.getByLabel('E-mail').fill('usuario@email.com');
await page.getByLabel('Senha').fill('minha-senha');
await page.getByRole('button', { name: 'Entrar' }).click();
await expect(page).toHaveURL('/dashboard');
await expect(page.getByText('Bem-vindo!')).toBeVisible();
});Legível, confiável e sem waits manuais!
Ir para: Comunicação