WebDriver BiDi pronto para produção no Firefox, Google Chrome e Puppeteer

Matthias Rohmer
Matthias Rohmer

Na semana passada, anunciamos que o WebDriver BiDi estava pronto para produção no BrowserStack. Nesta semana, o verão do WebDriver BiDi continua com o Firefox 129 e o Puppeteer 23, que recebem suporte para produção no WebDriver BiDi.

A Mozilla tem sido um forte colaborador do WebDriver BiDi há mais de quatro anos, inicialmente ajudando a moldar o novo padrão e, em seguida, implementando-o gradualmente no Firefox, documentando perfeitamente o progresso dele com a Newsletter do Firefox WebDriver (em inglês).

Com o WebDriver BiDi agora pronto para produção no Firefox, o Puppeteer a partir da versão 23 oferece suporte estável ao Firefox por meio do WebDriver BiDi. Isso permite automatizar o Firefox com a mesma API concisa do Chrome. O suporte do Puppeteer para o Chrome DevTools Protocol (CDP) permanece inalterado.

Firefox, CDP e Puppeteer

O Puppeteer é uma ferramenta confiável para que os desenvolvedores automatizem navegadores baseados no Chromium usando o Chrome DevTools Protocol, também conhecido como CDP. Em 2019, o Puppeteer passou a oferecer suporte experimental ao Firefox.

Para que esse trabalho funcionasse, o Mozilla implementou e manteve um subconjunto do CDP no Firefox. Essa solução permitiu que o Firefox fosse automatizado com a API Puppeteer, mas tinha ressalvas:

  • Como o nome sugere, o CDP é usado pelo Chrome DevTools e precisa mudar de acordo com os requisitos do DevTools.
  • O CDP não é padronizado em uma especificação pública compartilhada, e a manutenção dele no Firefox exigiu comunicação e esforço constantes.
  • Como o Firefox implementou apenas um subconjunto do CDP, o Puppeteer nunca poderia garantir que a API completa funcionasse com o Firefox, o que gera confusão para os usuários.

Embora tenhamos mantido esse suporte com a Mozilla nos últimos anos, sabíamos que não era uma solução permanente. Com base nessa parceria e incluindo outros fornecedores importantes de navegadores e ferramentas, criamos o WebDriver BiDi.

O trabalho em equipe transforma sonhos em realidade

A equipe do Firefox tem trabalhado arduamente para implementar o WebDriver BiDi no Firefox. Ao mesmo tempo, a equipe do Puppeteer expandiu o suporte ao BiDi do WebDriver na API do Puppeteer. O objetivo das duas equipes era tornar todas as APIs necessárias para casos de uso de automação de produção disponíveis usando o WebDriver BiDi no Puppeteer, garantindo suporte no Chrome e no Firefox.

Painel da equipe compartilhada mostrando o número de testes aprovados nos últimos meses.
Painel da equipe compartilhada mostrando o número de testes aprovados nos últimos meses.

Isso permite que os usuários do Puppeteer selecionem o Firefox ou o Chrome para as automações, especificando a chave de configuração browser ao iniciar uma instância do Puppeteer.

import puppeteer from 'puppeteer';

const firefoxBrowser = await puppeteer.launch({
  browser: 'firefox', // WebDriver BiDi is used by default in Firefox.
});
const page = await firefoxBrowser.newPage();
...
await firefoxBrowser.close();

const chromeBrowser = await puppeteer.launch({
  browser: 'chrome',  
  protocol: 'webDriverBiDi', // CDP would be used by default for Chrome.
});
const page = await chromeBrowser.newPage();
...
await chromeBrowser.close();

Para saber mais sobre as novidades do Firefox 129 e o trabalho da Mozilla no WebDriver BiDi, consulte a postagem do blog Mozilla Hacks relacionada.

Suporte a CDP no futuro

O snippet de código anterior mostra que, para automatizar o Chrome usando o WebDriver BiDi com o Puppeteer, é necessário definir explicitamente protocol como webDriverBiDi. Isso ocorre porque, no Chrome, o Puppeteer continua usando o CDP por padrão para não interromper as automações existentes, mas também para continuar oferecendo suporte a automações especializadas nos recursos do Chrome.

O suporte ao CDP no Firefox foi descontinuado a partir do Firefox 129 e está programado para ser removido no final de 2024. Se você tiver automações que dependem do suporte ao CDP no Firefox, recomendamos migrar para o WebDriver BiDi. Se isso não for possível, entre em contato com dev-webdriver@mozilla.org (link em inglês) no seu caso de uso.