- A partir da versão 23 do Puppeteer, o Firefox passa a ter suporte oficial, permitindo agora realizar automação e testes end-to-end com facilidade no Chrome e no Firefox
const browser = await puppeteer.launch({browser: "firefox"});
- Assim como no Chrome, o Puppeteer também pode baixar e executar a versão estável mais recente do Firefox
- O suporte ao Firefox é baseado no WebDriver BiDi, um protocolo cross-browser atualmente implementado no Gecko e no Chromium, e não em um protocolo de automação exclusivo do Firefox
- Ao usar um protocolo cross-browser, fica mais fácil oferecer suporte a mais navegadores no futuro
Contexto técnico
- Até recentemente, quem queria automação de navegador tinha duas opções principais
- Usar a API W3C WebDriver
- Usar APIs específicas de cada navegador (Chrome DevTools Protocol, Firefox Remote Debugging Protocol etc.)
- Ambas as opções envolvem trade-offs significativos
- A API WebDriver clássica é baseada em HTTP e segue um modelo de enviar comandos ao navegador e aguardar as respostas
- Isso funciona bem para cenários de automação como carregar páginas e verificar se elementos estão visíveis, mas não é adequado para casos de uso mais avançados, como receber eventos do navegador ou executar vários comandos ao mesmo tempo
- As APIs específicas de navegador geralmente são projetadas para dar suporte aos casos de uso complexos das ferramentas de desenvolvedor dentro do navegador, por isso oferecem um conjunto de recursos muito mais avançado do que o WebDriver
- Por isso, clientes de automação de navegador precisavam escolher entre usar um único protocolo para oferecer suporte a vários navegadores com um conjunto limitado de recursos, ou oferecer um conjunto mais rico de funcionalidades, mas implementar recursos separadamente para cada navegador suportado
- Isso aumentava o custo e a complexidade de criar uma boa automação cross-browser
- A situação era parecida com o que existia antes do desenvolvimento do LSP (Language Server Protocol)
- O WebDriver BiDi leva para um protocolo padronizado o conjunto de recursos de automação que antes ficava restrito a protocolos específicos de navegador, tornando-os utilizáveis em todos os navegadores e ferramentas de automação
Remoção do suporte experimental ao CDP (Chrome DevTools Protocol) no Firefox
- Como parte dos esforços iniciais para melhorar os testes cross-browser, foi oferecida uma implementação parcial do CDP, limitada a alguns comandos e eventos necessários para dar suporte a casos de uso de testes
- No entanto, à medida que ficou claro que esse não era o caminho para a evolução da automação cross-browser, o trabalho nessa direção foi interrompido
- Como resultado, isso deixou de ser mantido e não é compatível com recursos modernos do Firefox, como isolamento de sites
- Por isso, o suporte será removido no fim de 2024
Planos daqui para frente
- Ainda há algumas APIs que não são suportadas
- APIs exclusivas do CDP
- APIs que exigem trabalho adicional de padronização
- APIs que já têm padrão, mas ainda não foram implementadas
- As prioridades serão definidas com base no feedback dos usuários
1 comentários
Comentários do Hacker News
Foi um grande golpe para o Google quando a equipe do Puppeteer saiu da empresa, foi para a Microsoft e continuou desenvolvendo o Playwright
O protocolo WebDriver BiDi não é exatamente um protocolo para criar navegadores, mas parece que consegue cumprir quase 90% desse papel
O Playwright oferece suporte a todos os motores de renderização modernos (Chromium, WebKit, Firefox)
Curiosidade sobre a árvore de acessibilidade