Playwright é um framework de automação de testes que simplifica os testes em navegadores com uma única API para Chromium, Firefox e WebKit. É rápido, confiável e amplamente adotado, com mais de 1,2 milhão de downloads semanais.
Principais benefícios:
- Velocidade: o modo headless executa testes de 2x a 15x mais rápido do que os testes tradicionais.
- Eficiência: reduz o uso de CPU e memória.
- Suporte a vários navegadores: funciona perfeitamente com Chromium, Firefox e WebKit.
- Integração com CI/CD: integra-se facilmente a pipelines de automação.
Configuração rápida:
- Instale o Playwright:
npm init playwright@latest - Configure para testes headless (modo padrão).
- Execute testes em vários navegadores com comandos simples.
| Recurso | Testes tradicionais | Testes headless |
|---|---|---|
| Velocidade | Mais lenta | Até 15x mais rápida |
| Uso de recursos | Alto | Menor |
| Suporte a navegadores | Limitado | Chromium, Firefox, WebKit |
Com o Playwright, você pode testar conteúdos dinâmicos com eficiência, lidar com vários navegadores e até simular dispositivos e condições de rede. Pronto para começar? Vamos ver como configurá-lo e criar seu primeiro teste.
Curso completo de Playwright 2024
Primeiros passos com Playwright
Siga estas etapas para configurar o Playwright no modo headless e começar a testar.
Etapas de instalação
Antes de começar, verifique se o sistema atende a estes requisitos:
- Node.js: v18, v20 ou v22
- Windows: 10/Server 2016 ou mais recente
- macOS: 13 Ventura ou posterior
- Linux: Debian 12, Ubuntu 22.04 ou Ubuntu 24.04 (x86-64/arm64)
Para configurar o Playwright rapidamente, execute:
npm init playwright@latest
Esse comando inicializa o Playwright e gera:
- Um arquivo de configuração
- Scripts de teste de exemplo
- Um fluxo do GitHub Action
- Um modelo básico de teste
Prefere a instalação manual? Use os seguintes comandos:
npm i -D @playwright/test
npx playwright install
Configurando o modo headless
Por padrão, o Playwright executa testes no modo headless e exibe os resultados diretamente no terminal. Para manter tudo atualizado, use:
npm install -D @playwright/test@latest
npx playwright install --with-deps
Configuração de testes em vários navegadores
Testar em vários navegadores é simples com o Playwright. Atualize seu arquivo playwright.config.ts desta forma:
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
{ name: 'chromium', use: { ...devices['Desktop Chrome'] } },
{ name: 'firefox', use: { ...devices['Desktop Firefox'] } },
{ name: 'webkit', use: { ...devices['Desktop Safari'] } },
],
});
Veja como executar os testes:
- Todos os navegadores:
npx playwright test - Um único navegador:
npx playwright test --project webkit - Vários navegadores:
npx playwright test --project webkit --project firefox
Compatibilidade de navegadores do Playwright:
| Navegador | Windows | macOS | Linux |
|---|---|---|---|
| Chromium | ✓ | ✓ | ✓ |
| Firefox | ✓ | ✓ | ✓ |
| WebKit | ✓ | ✓ | ✓ |
Ao instalar o Playwright, ele baixa automaticamente as versões necessárias dos navegadores e as armazena localmente. Isso garante ambientes de teste consistentes em diferentes plataformas e máquinas.
Agora que o Playwright está configurado, você está pronto para criar seu primeiro teste.
Criando seu primeiro teste
Depois de configurar o Playwright, veja como criar e executar seu primeiro teste.
Exemplo de script de teste básico
Comece criando um arquivo chamado first-test.spec.ts e adicione o código a seguir. Depois, execute o teste com o comando npx playwright test first-test.spec.ts:
import { test, expect } from '@playwright/test';
test('basic navigation test', async ({ page }) => {
await page.goto('https://playwright.dev');
const title = await page.title();
await expect(title).toBe('Playwright');
});
Guia de interação com elementos
Veja como interagir com elementos no Playwright:
test('element interactions', async ({ page }) => {
// Fill out a text field
await page.getByRole('textbox').fill('[email protected]');
// Click a button
await page.getByRole('button', { name: 'Submit' }).click();
// Check a checkbox
await page.getByLabel('Remember me').check();
// Select an option from a dropdown
await page.getByLabel('Country').selectOption('United States');
});
Estes são alguns métodos comuns de localizador que você pode usar:
| Tipo de localizador | Exemplo | Caso de uso |
|---|---|---|
| Função | getByRole('button') | Para elementos acessíveis |
| Rótulo | getByLabel('Password') | Para campos de formulário |
| Texto | getByText('Sign up') | Para texto visível |
| TestId | getByTestId('submit-button') | Para atributos personalizados |
Métodos de verificação de testes
Para garantir que seus testes sejam confiáveis, use asserções para verificar os resultados:
test('verification examples', async ({ page }) => {
// Check if an element is visible
await expect(page.getByRole('heading')).toBeVisible();
// Verify the text content of an element
await expect(page.getByTestId('status')).toHaveText('Success');
// Confirm the URL after navigation
await expect(page).toHaveURL(/.*dashboard/);
// Ensure a button is enabled
await expect(page.getByRole('button')).toBeEnabled();
});
Para depurar, você pode executar o Playwright no modo de interface com este comando:
npx playwright test --ui
O Playwright executa cada teste em um contexto de navegador separado, garantindo um ambiente limpo sempre. Esse isolamento evita interferências entre os testes e, com o modo headless, mantém a execução rápida e eficiente.
sbb-itb-23997f1
Recursos avançados de testes
O Playwright amplia os recursos básicos de teste ao oferecer ferramentas que aumentam a confiabilidade e expandem os cenários de teste.
Testando conteúdo dinâmico
O Playwright simplifica os testes de conteúdo web dinâmico com seus mecanismos de espera integrados e asserções voltadas para a web. Ele garante que os elementos estejam prontos para interação, eliminando a necessidade de timeouts manuais, que frequentemente levam a testes não confiáveis [2].
Veja como testar conteúdo dinâmico de forma eficaz:
// Wait for API response before proceeding
await page.waitForResponse(response =>
response.url().includes('/api/data') &&
response.status() === 200
);
// Wait for dynamic content updates
await page.waitForFunction(() => {
const element = document.querySelector('.dynamic-content');
return element && element.textContent.includes('Updated');
});
Em situações com problemas intermitentes de rede, você pode adicionar mecanismos de repetição:
// Retry mechanism for flaky elements
const retryOptions = {
timeout: 30000,
intervals: [1000, 2000, 5000]
};
await page.waitForSelector('.loading-content', retryOptions);
A seguir, veja como o Playwright oferece suporte à emulação de dispositivos e à simulação de condições de rede.
Testes de dispositivos e rede
O Playwright inclui um registro integrado de dispositivos para emular diversos aparelhos. Esse recurso ajuda a testar diferentes tamanhos de tela e configurações de user-agent [5][6].
Veja um exemplo de emulação de dispositivo:
const iPhone = playwright.devices['iPhone 13'];
const context = await browser.newContext({
...iPhone,
locale: 'en-US',
geolocation: { longitude: -122.084, latitude: 37.422 },
permissions: ['geolocation']
});
Para testar condições de rede, você pode usar manipuladores de rota:
// Simulate slow network conditions
await page.route('**/*.{jpg,png,jpeg}', route => {
return new Promise(resolve => {
setTimeout(() => {
route.continue();
}, 5000); // 5-second delay
});
});
// Mock API responses
await page.route('/api/data', route => {
route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({ status: 'success' })
});
});
Opções de gravação de testes
O Playwright oferece suporte à gravação de artefatos como capturas de tela, vídeos e rastreamentos para ajudar na depuração. Essas opções podem ser configuradas no arquivo playwright.config.js:
| Tipo de gravação | Configuração | Melhor caso de uso |
|---|---|---|
| Capturas de tela | screenshot: 'only-on-failure' | Capturar o estado visual durante falhas de teste |
| Vídeo | video: 'retain-on-failure' | Gravar a execução dos testes que falharam |
| Rastreamento | trace: 'on-first-retry' | Gerar logs detalhados para depuração |
Veja como ativar esses recursos:
// playwright.config.js
module.exports = {
use: {
screenshot: 'only-on-failure',
video: 'retain-on-failure',
trace: 'on-first-retry'
}
};
"O Playwright espera que os elementos estejam aptos a receber ações antes de executá-las... eliminando a necessidade de timeouts artificiais — a principal causa de testes instáveis." - Documentação do Playwright [2]
Todos os artefatos gravados são armazenados no diretório test-results, oferecendo informações valiosas para solucionar problemas. Os vídeos são salvos automaticamente quando o contexto do navegador é fechado [7].
Otimização de desempenho dos testes
Melhorar o desempenho dos testes no Playwright envolve o uso inteligente da execução paralela, o gerenciamento eficaz de contextos de navegador e estratégias de repetição bem planejadas. Esses métodos ajudam a garantir que os testes sejam executados com eficiência sem comprometer a confiabilidade.
Executando testes em paralelo
O Playwright permite executar testes em vários processos de trabalho, o que pode reduzir significativamente o tempo necessário para concluir uma suíte de testes. Você pode configurar a execução paralela em playwright.config.ts:
export default {
fullyParallel: true,
workers: 4,
maxFailures: 5
};
Dentro de um arquivo de teste, você pode ativar a execução paralela desta forma:
test.describe.configure({ mode: 'parallel' });
test.describe('User Authentication', () => {
test('login flow', async ({ page }) => {
// Test implementation
});
test('registration flow', async ({ page }) => {
// Test implementation
});
});
Para evitar conflitos de dados entre processos de trabalho, use identificadores exclusivos:
const testId = `user_${process.env.TEST_WORKER_INDEX}_${Date.now()}`;
const userEmail = `test_${testId}@example.com`;
Depois que o paralelismo estiver configurado, o próximo passo é gerenciar contextos de navegador com eficiência.
Gerenciamento de contextos do navegador
Usar contextos de navegador separados garante ambientes de teste isolados, semelhantes ao uso de perfis anônimos. Isso mantém os testes independentes e evita conflitos de estado.
Veja um exemplo de criação e uso de um contexto de navegador:
const context = await browser.newContext({
viewport: { width: 1280, height: 720 },
userAgent: 'Playwright/1.32.0',
storageState: './auth.json'
});
await test.step('Verify dashboard', async () => {
const page = await context.newPage();
await page.goto('https://app.example.com/dashboard');
// Test implementation
});
await context.close();
Algumas estratégias comuns de contexto de navegador incluem:
- Novo contexto por teste: garante que cada teste tenha seu próprio ambiente isolado.
- Contexto de autenticação compartilhado: reduz etapas repetidas de login ao reutilizar dados de autenticação.
- Testes com vários usuários: simula interações de vários usuários ao mesmo tempo.
Depois de garantir ambientes limpos e isolados, o próximo foco é lidar com falhas transitórias por meio de estratégias de repetição.
Estratégias de repetição de testes
As repetições podem ajudar a lidar com testes instáveis causados por problemas de tempo ou instabilidade do ambiente. Você pode configurar repetições no arquivo de configuração do Playwright:
export default {
retries: process.env.CI ? 2 : 0,
expect: {
timeout: 10000,
toPass: { intervals: [1000, 2000, 5000] }
}
};
Para asserções que podem exigir várias tentativas, use polling:
await expect
.poll(async () => {
const element = page.locator('.dynamic-content');
return await element.textContent();
}, {
intervals: [1000, 2000, 10000],
timeout: 60000
})
.toBe('Expected Value');
"Embora as repetições aumentem a confiabilidade dos testes, o uso excessivo pode ocultar problemas como timeouts e condições de corrida. É fundamental resolver as causas-raiz para obter testes estáveis, aplicando repetições de forma criteriosa, com restrições e registro de dados sobre padrões instáveis." – Cerosh Jacob [8]
Para garantir que a página esteja totalmente carregada antes de executar os testes:
await page.waitForLoadState('networkidle', { timeout: 5000 });
await page.waitForSelector('.content-ready');
Integração entre Playwright e Latenode
A integração do Playwright com a plataforma low-code da Latenode simplifica os testes web e a automação de fluxos. Essa combinação permite que as equipes criem testes avançados sem precisar de conhecimentos profundos de programação.
A Latenode complementa a funcionalidade do Playwright ao ampliar a automação para requisitos mais abrangentes de fluxos.
Visão geral da Latenode
A Latenode é uma plataforma low-code projetada para integração e automação de fluxos, aproveitando a tecnologia de navegador headless. Seu criador visual de fluxos facilita a criação e o gerenciamento de configurações de testes automatizados sem escrever códigos complexos.
Veja um exemplo de como a automação de navegador da Latenode pode ser configurada:
// Example of a Latenode workflow configuration
const workflowConfig = {
browserAutomation: {
viewport: { width: 1920, height: 1080 },
headless: true,
scenarios: ['login', 'data-extraction', 'form-submission']
}
};
Vantagens da integração
Combinar Playwright e Latenode traz diversos benefícios técnicos:
| Recurso | Benefício |
|---|---|
| Criador visual de fluxos | Simplifica a configuração em comparação com métodos tradicionais de programação |
| Geração de código com assistência de IA | Gera scripts de teste do Playwright automaticamente |
| Integração integrada com banco de dados | Gerencia dados e resultados de testes com eficiência |
| Suporte a vários navegadores | Executa testes em Chromium, Firefox e WebKit |
Essa integração aprimora os fluxos de teste e melhora os processos de automação.
Casos de uso de automação
Essa combinação oferece suporte a diversos casos práticos de automação. Por exemplo:
// Example of a multi-browser test workflow
async function crossPlatformTest() {
const workflow = await latenode.createWorkflow({
name: 'E2E Testing Suite',
browser: playwright.chromium,
integrations: ['slack', 'jira']
});
await workflow.addStep({
type: 'ui-test',
script: async ({ page }) => {
await page.goto('https://app.example.com');
await page.fill('#username', process.env.TEST_USER);
await page.click('#submit');
}
});
}
Para testes em larga escala, o plano Prime da Latenode (US$ 297/mês) oferece suporte a até 1,5 milhão de execuções de fluxo. Esse plano é ideal para equipes que precisam de ferramentas avançadas de colaboração e relatórios detalhados.
Além disso, os recursos de banco de dados integrados da Latenode ajudam as equipes a gerenciar dados e resultados de testes sem infraestrutura adicional. Relatórios e análises automatizados facilitam a identificação de tendências e o aprimoramento eficaz das estratégias de teste.
Conclusão
O Playwright oferece diversos recursos avançados e melhorias de desempenho que o tornam uma escolha de destaque para testes automatizados. Veja uma recapitulação rápida de suas principais vantagens.
Principais vantagens
Os testes de navegador headless do Playwright aumentam significativamente o desempenho ao ignorar tarefas de renderização desnecessárias. Os testes mostram que o modo headless pode ser executado de 2x a 15x mais rápido do que os testes tradicionais em navegadores [3].
Alguns dos principais benefícios de desempenho incluem:
- Execução mais rápida de testes
- Menor consumo de recursos
- Mais eficiência em pipelines de CI/CD
| Aspecto de teste | Comparação de desempenho |
|---|---|
| Velocidade de web scraping | 56,21 segundos (headless) vs. 73,77 segundos (com interface) [1] |
| Uso de recursos | Menor uso de CPU e memória [1] |
| Suporte a navegadores | Chrome (64,16%), Safari (19,62%), Edge (4,87%) [12] |
Esses benefícios, combinados com as estratégias de configuração e teste discutidas anteriormente, fazem do Playwright uma ferramenta poderosa para automação escalável e eficiente.
Como começar
O desempenho e a escalabilidade do Playwright fazem dele uma excelente escolha para fluxos modernos de teste. Como explica Arjun Attam, Gerente Sênior de Produto da Microsoft:
"Os testes automatizados de ponta a ponta se tornaram mais importantes do que nunca. As equipes estão lançando produtos mais rápido e criando aplicativos que funcionam em um conjunto crescente de dispositivos. Esse aumento de velocidade e de destinos web coloca uma pressão imensa sobre o processo de testes, e a automação é essencial." [10]
Para começar a usar o Playwright em testes headless:
- Instale o Node.js e o Playwright executando
npm init playwright@latest[9]. - Crie seu primeiro arquivo de teste, como
example.spec.js. - Execute os testes com
npx playwright test[4].
Para uma integração perfeita, conecte o Playwright ao seu pipeline de CI/CD usando ferramentas como Jenkins ou GitHub Actions [9]. Sua API unificada permite testes consistentes em Chrome, Firefox e WebKit sem exigir alterações de código específicas para cada navegador [12].
O modo headless do Playwright se destaca em ambientes que exigem alto desempenho e em pipelines de CI/CD, nos quais o feedback rápido é crucial [11]. Sua capacidade de lidar com várias instâncias de navegador com eficiência faz dele uma ótima escolha para operações de teste em larga escala.


