Glosario · Automatización de UI
Navegador headless
En inglés: Headless browser
También llamado: modo headless, navegador sin interfaz, navegador sin cabeza, headless
Definición
Un motor de navegador real que se ejecuta sin ventana visible, usado para ejecutar pruebas de UI en servidores de CI y otras máquinas sin pantalla.
Un navegador headless carga páginas, ejecuta JavaScript, construye el DOM y gestiona las peticiones de red exactamente igual que un navegador normal, pero no dibuja nada en pantalla. Las pruebas lo controlan mediante el mismo protocolo de automatización que un navegador con interfaz (headed). Como no necesita servidor gráfico, es la forma predeterminada de ejecutar pruebas de UI en contenedores de CI y agentes de build.
Ejemplo
Playwright se ejecuta en modo headless por defecto. Activas una ventana visible cuando depuras:
npx playwright test # headless
npx playwright test --headed # show the browser
npx playwright test --ui # interactive UI mode
En Selenium 4, el modo headless se pide a través de las opciones del 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 qué importa
- Funciona en cualquier sitio. Los agentes de build y los contenedores Docker normalmente no tienen pantalla, así que las ejecuciones con interfaz necesitarían un framebuffer virtual.
- Usa menos recursos que un navegador con interfaz, así que puedes ejecutar más workers en paralelo en la misma máquina.
- Es un navegador real. Las versiones headless modernas de Chrome y Firefox usan el mismo motor de renderizado que sus versiones con interfaz, y por eso las pruebas escritas en headless suelen comportarse igual en modo headed.
Problemas habituales
- Diferencias de viewport. Un navegador headless puede arrancar con un tamaño de ventana predeterminado distinto al de tu navegador de escritorio. Define el viewport de forma explícita para que los layouts responsivos se comporten de forma consistente.
- “Funciona con interfaz, falla en headless”. Normalmente es un problema de tiempos, no del modo headless en sí: la ejecución headless es más rápida o más lenta y deja al descubierto una espera que falta. Captura un trace o una captura de pantalla en los fallos en lugar de pasar la CI a modo headed.
- Depurar a ciegas. Activa capturas de pantalla, vídeo o traces en las pruebas fallidas para ver lo que vio el navegador headless.
- Confundir headless con “no es un navegador”. Las herramientas que solo descargan HTML, sin ejecutar JavaScript, no son navegadores headless y no pueden probar una single-page app moderna.