- Desde la versión 23, Puppeteer ofrece soporte oficial para Firefox, por lo que ahora es posible realizar automatización y pruebas end-to-end fácilmente tanto en Chrome como en Firefox
const browser = await puppeteer.launch({browser: "firefox"});
- Al igual que con Chrome, Puppeteer puede descargar y ejecutar la versión estable más reciente de Firefox
- El soporte para Firefox se basa en WebDriver BiDi, un protocolo multiplataforma entre navegadores ya implementado en Gecko y Chromium, y no en un protocolo de automatización exclusivo de Firefox
- Usar un protocolo multiplataforma permitirá dar soporte más fácilmente a más navegadores en el futuro
Contexto técnico
- Hasta hace poco, quienes querían automatización de navegadores tenían dos opciones principales
- Usar la API WebDriver de la W3C
- Usar APIs exclusivas de cada navegador (Chrome DevTools Protocol, Firefox Remote Debugging Protocol, etc.)
- Ambas opciones implicaban compromisos importantes
- La API WebDriver clásica está basada en HTTP y sigue un modelo de enviar comandos al navegador y esperar la respuesta
- Esto funciona bien para escenarios de automatización como cargar una página y verificar si se muestra un elemento, pero no es adecuado para casos de uso avanzados como recibir eventos del navegador o ejecutar varios comandos al mismo tiempo
- Las APIs específicas de cada navegador suelen estar diseñadas para soportar casos de uso complejos de las herramientas de desarrollador dentro del navegador, por lo que ofrecen un conjunto de funciones mucho más avanzado que WebDriver
- Por eso, los clientes de automatización de navegadores tenían que elegir entre usar un solo protocolo para soportar varios navegadores con un conjunto de funciones limitado, o bien ofrecer un conjunto de funciones más rico pero implementando capacidades por separado para cada navegador soportado
- Esto aumentaba el costo y la complejidad de crear una automatización multiplataforma de alta calidad
- La situación era parecida a la de antes de que existiera LSP (Language Server Protocol)
- WebDriver BiDi lleva a un protocolo estandarizado el conjunto de funciones de automatización que antes estaba limitado a protocolos específicos de cada navegador, para que pueda usarse en todos los navegadores y herramientas de automatización
Eliminación del soporte experimental de CDP (Chrome DevTools Protocol) en Firefox
- Como parte de los primeros esfuerzos para mejorar las pruebas multiplataforma entre navegadores, se ofreció una implementación parcial de CDP limitada a algunos comandos y eventos necesarios para soportar casos de uso de testing
- Sin embargo, al quedar claro que ese no era el rumbo para avanzar en la automatización multiplataforma, se detuvo el trabajo en esa línea
- Como resultado, dejó de mantenerse y no es compatible con funciones modernas de Firefox como el aislamiento de sitios
- Por ello, el soporte será eliminado a finales de 2024
Planes a futuro
- Aún hay algunas APIs que siguen sin estar soportadas
- APIs exclusivas de CDP
- APIs que requieren trabajo adicional de estandarización
- APIs que ya están estandarizadas, pero todavía no se han implementado
- Se definirán las prioridades a partir de la retroalimentación de los usuarios
1 comentarios
Comentarios de Hacker News
Que el equipo de Puppeteer dejara Google y se fuera a Microsoft para seguir desarrollando Playwright fue un golpe fuerte para Google
Aunque el protocolo WebDriver BiDi no es un protocolo para crear navegadores, parece que podría cumplir ese papel en casi un 90%
Playwright es compatible con todos los motores de renderizado modernos (Chromium, WebKit, Firefox)
Tengo curiosidad sobre el árbol de accesibilidad