Glossário · Automação de UI
Navegador headless
Em inglês: Headless browser
Também chamado de: navegadores headless, modo headless, headless Chrome, navegador sem interface
Definição
Um motor de navegador real rodando sem janela visível, usado para executar testes de UI em servidores de CI e em outras máquinas que não têm tela.
Um navegador headless carrega páginas, executa JavaScript, monta o DOM e trata as requisições de rede exatamente como um navegador normal, mas não desenha nada na tela. Os testes o controlam pelo mesmo protocolo de automação de um navegador com interface (headed). Como ele não precisa de servidor gráfico, é a forma padrão de rodar testes de UI em containers de CI e agentes de build.
Exemplo
O Playwright roda em modo headless por padrão. Você ativa uma janela visível quando está depurando:
npx playwright test # headless
npx playwright test --headed # show the browser
npx playwright test --ui # interactive UI mode
No Selenium 4, você pede o modo headless pelas opções do navegador:
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless=new");
WebDriver driver = new ChromeDriver(options);
FirefoxOptions options = new FirefoxOptions();
options.addArguments("-headless");
WebDriver driver = new FirefoxDriver(options);
Por que isso importa
- Roda em qualquer lugar. Agentes de build e containers Docker normalmente não têm tela, então execuções headed precisariam de um framebuffer virtual.
- Usa menos recursos do que um navegador com interface, então você consegue rodar mais workers em paralelo na mesma máquina.
- É um navegador de verdade. O Chrome e o Firefox headless modernos usam o mesmo motor de renderização das versões com interface, e é por isso que testes escritos em headless geralmente se comportam igual no modo headed.
Armadilhas comuns
- Diferenças de viewport. Um navegador headless pode iniciar com um tamanho de janela padrão diferente do seu navegador desktop. Defina o viewport explicitamente para que layouts responsivos se comportem de forma consistente.
- “Funciona headed, falha headless.” Normalmente isso é timing, não o modo headless em si: a execução headless é mais rápida ou mais lenta e expõe uma espera que está faltando. Capture um trace ou screenshot na falha em vez de mudar a CI para headed.
- Depurar às cegas. Ative screenshots, vídeo ou traces nos testes com falha para ver o que o navegador headless viu.
- Confundir headless com “não é um navegador”. Ferramentas que só baixam o HTML, sem executar JavaScript, não são navegadores headless e não conseguem testar uma single-page app moderna.