Latenode

Navegador Headless Playwright: Ferramenta de Testes Rápida e Confiável

Conheça uma poderosa ferramenta de testes que acelera os testes em navegadores com uma única API para vários navegadores, aumentando a eficiência e a confiabilidade.

10 min de leitura
Testes automatizados em vários navegadores com Playwright

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:

  1. Instale o Playwright: npm init playwright@latest
  2. Configure para testes headless (modo padrão).
  3. Execute testes em vários navegadores com comandos simples.
RecursoTestes tradicionaisTestes headless
VelocidadeMais lentaAté 15x mais rápida
Uso de recursosAltoMenor
Suporte a navegadoresLimitadoChromium, 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:

NavegadorWindowsmacOSLinux
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 localizadorExemploCaso de uso
FunçãogetByRole('button')Para elementos acessíveis
RótulogetByLabel('Password')Para campos de formulário
TextogetByText('Sign up')Para texto visível
TestIdgetByTestId('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çãoConfiguraçãoMelhor caso de uso
Capturas de telascreenshot: 'only-on-failure'Capturar o estado visual durante falhas de teste
Vídeovideo: 'retain-on-failure'Gravar a execução dos testes que falharam
Rastreamentotrace: '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:

RecursoBenefício
Criador visual de fluxosSimplifica a configuração em comparação com métodos tradicionais de programação
Geração de código com assistência de IAGera scripts de teste do Playwright automaticamente
Integração integrada com banco de dadosGerencia dados e resultados de testes com eficiência
Suporte a vários navegadoresExecuta 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 testeComparação de desempenho
Velocidade de web scraping56,21 segundos (headless) vs. 73,77 segundos (com interface) [1]
Uso de recursosMenor uso de CPU e memória [1]
Suporte a navegadoresChrome (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:

  1. Instale o Node.js e o Playwright executando npm init playwright@latest [9].
  2. Crie seu primeiro arquivo de teste, como example.spec.js.
  3. 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.

References

FAQ

Frequently Asked Questions

O modo headless executa Chromium, Firefox ou WebKit sem uma interface visível, permitindo testes automatizados e web scraping mais rápidos com a mesma API unificada usada em navegadores com interface.

Isso foi útil? Compartilhe →

Escrito por

Vasiliy Datsenko

Head of Customer Support

Vasiliy Datsenko é Head of Customer Support na Latenode e um escritor de automação focado em produto. Seu trabalho conecta conversas com clientes, pesquisa de automação de fluxos de trabalho, casos de uso de IA e educação prática sobre produtos para equipes que tentam automatizar processos de negócios reais.

Perfil do autor →

Verificado por

Oleg Zankov

CEO da Latenode, Especialista em No-code

Com uma filosofia enraizada em inovação, resolução de problemas e experiência do usuário, estou focado em capacitar equipes a criar integrações personalizadas e automatizar fluxos de trabalho com facilidade e eficiência. Trazendo uma vasta experiência em desenvolvimento de negócios, empreendedorismo tecnológico e desenvolvimento de software, reconheci a necessidade de uma solução de integração mais acessível, escalável e adaptável. Assim, nasceu a Latenode.com. Com nossa plataforma, as empresas podem aproveitar o poder da tecnologia sem a necessidade de conhecimentos extensos em programação. Apaixonado por promover um futuro onde a tecnologia nos serve, e não o contrário, minha missão é tornar processos complexos simples. Acredito em democratizar a tecnologia e equipar as equipes com as ferramentas para inovar, crescer e ter sucesso em um mundo cada vez mais digital.

Perfil do autor →

Continue lendo