6 pontos por xguru 2024-08-08 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
xguru 2024-08-09

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 Google não percebeu o quanto as ferramentas de automação de navegador eram importantes para sua estratégia de agentes de IA
    • O Google teve que abandonar o Puppeteer e depender de MS/Playwright, ou encontrar um novo caminho para o Puppeteer
    • O WebDriver BiDi evolui as vantagens do Chrome DevTools Protocol (CDP) de forma padronizada
  • O protocolo WebDriver BiDi não é exatamente um protocolo para criar navegadores, mas parece que consegue cumprir quase 90% desse papel

    • O Gecko evoluiu muito desde o Servo e hoje em dia tem um desempenho bastante bom
    • É muito mais fácil criar um navegador baseado em Chromium do que um baseado em Gecko
    • Dá para usar a API para navegar, interceptar requisições, ler o console, executar JS etc.
    • Seria bom poder remover o chrome do navegador e criar um navegador personalizado
  • O Playwright oferece suporte a todos os motores de renderização modernos (Chromium, WebKit, Firefox)

  • Curiosidade sobre a árvore de acessibilidade

    • O motivo de a árvore de acessibilidade ter sido removida do Playwright é que ela era um dump das estruturas internas de dados específicas de cada engine
    • A árvore de acessibilidade resume todos os elementos semânticos da página, sendo excelente para testes de snapshot ou testes BDD
    • Seria ótimo se a árvore de acessibilidade fosse padronizada nos principais motores de navegador
    • Do ponto de vista do desenvolvimento web, também seria bom poder acessá-la em outras camadas, como CSS e DOM