O Que É um Teste de Navegador Headless?
Um teste de navegador headless roda um navegador real sem uma janela visível, conduzindo um web app programaticamente para verificar se ele se comporta corretamente.
Testar um web app adequadamente significa rodá-lo em um navegador real, com renderização real, JavaScript real, layout real. Mas servidores de CI não têm tela. Um navegador headless resolve isso: é um motor de navegador completo rodando sem uma UI visível, controlado por código. É como testes end-to-end e de componente rodam em servidores.
O que headless significa
Um navegador headless é um navegador normal, Chromium, Firefox, WebKit, rodando sem renderizar para uma tela. Todo o resto é real: o DOM, o motor JavaScript, a pilha de rede. Seu código de teste o conduz, clicando, digitando, navegando, e lê o resultado, tudo sem um display.
Por que o CI usa modo headless
Runners de CI são máquinas headless sem display gráfico. Rodar um navegador de forma headless permite que testes de navegador completos executem nesses servidores. O modo headless também é mais rápido que renderizar para uma tela, o que importa quando uma suíte lança um navegador muitas vezes.
Um exemplo rápido
Frameworks de teste lançam o navegador em modo headless por padrão no CI, então o conduzem através da página.
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
await page.goto("https://example.com");Pegadinhas comuns
- Bibliotecas de sistema faltando que o navegador precisa em um container.
- Diferenças entre renderização headless e com display.
- Fontes e locales que diferem de uma máquina de desenvolvedor.
- Instabilidade de timing ao aguardar UI assíncrona.
Testes de navegador headless no CI
Esses testes são a espinha dorsal do teste E2E e visual no pipeline, mas também são os mais propensos a instabilidades de timing transitórias e precisam de um ambiente consistente com as dependências corretas do navegador. Rodá-los em paralelo em runners rápidos e isolados e reexecutar automaticamente falhas transitórias os mantém confiáveis. Latchkey fornece runners isolados e retries de falhas transitórias que se adequam bem a isso.
Principais conclusões
- Um navegador headless é um navegador real rodando sem UI visível.
- O CI usa modo headless porque runners não têm display.
- Esses testes são poderosos, mas propensos a instabilidade de timing.