Aproveite o poder do WebDriver BiDi: automação do Chrome e do Firefox com o Puppeteer

O Puppeteer agora fala com o Firefox! 🎉 Mas espere, não ainda não foi? 🤔 Vamos conhecer o WebDriver BiDi, o novo protocolo do Puppeteer, e descobrir o que esse desenvolvimento incrível significa para o fluxo de trabalho de automação do Firefox.

O WebDriver BiDi é um novo protocolo de automação padronizado entre navegadores que combina o melhor do WebDriver Classic e do Chrome DevTools Protocol (CDP). Ela promete comunicação bidirecional, permitindo uma automação mais eficiente e capaz, além de controle granular. Acompanhe o progresso no roteiro oficial (link em inglês).

Desde nossa atualização de status anterior, continuamos trabalhando em estreita colaboração com o grupo de trabalho de ferramentas e testes de navegador W3C. Agora, o Puppeteer implementa recursos como geração de registros, eventos de rede e envios de formulário, graças aos avanços do WebDriver BiDi.

Mostrar o código

O script Puppeteer a seguir mostra o WebDriver BiDi em ação e funciona perfeitamente no Chrome e no Firefox:

  1. Inicie o navegador escolhido com a configuração do protocolo.
  2. Monitore as mensagens do console em busca de erros.
  3. Acesse uma página da Web, defina as dimensões da janela de visualização e clique em um botão.
  4. Verifique o conteúdo do texto e declare a igualdade.
import * as assert from 'node:assert'; 
import puppeteer from 'puppeteer';

// Arrange: Launch browser with WebDriver BiDi
const browser = await puppeteer.launch({
  protocol: 'webDriverBiDi',
     product: 'firefox', // or 'chrome'
});
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage();

// Arrange: Monitor console messages
page.on('console', message => {
  if (message.type() != 'error') return;
  console.log('RECEIVED: %s', message.text());
});

// Action
await page.setViewport({width: 600, height: 1041});
await page.goto('https://coffee-cart.app/?breakable=1');

const coffee = await page.waitForSelector('[data-test="Espresso"]');
await coffee.click();

// Assert 
const checkout = await page.$('[data-test="checkout"]');
const total = await checkout.evaluate(el => el.textContent);
assert.equal(total, 'Total: $10.00');

browser.close();

Progresso do WebDriver BiDi no Puppeteer

Para avaliar os recursos do WebDriver BiDi no Puppeteer, usamos o abrangente pacote de testes do Puppeteer (em inglês). Embora a implementação do Puppeteer e do WebDriver BiDi ainda esteja em desenvolvimento e ainda não tenha todos os recursos do Puppeteer com o Chrome e o CDP, queremos dar a você uma visão clara da situação.

Firefox:

  • O WebDriver BiDi atingiu um nível de qualidade adequado para tarefas práticas de automação. O Mozilla portou os testes do Puppeteer para o pdf.js do Firefox e do CDP para o Firefox e o WebDriver BiDi.
  • Mais de 55% dos testes são aprovados com o WebDriver BiDi, demonstrando sua funcionalidade crescente.
  • Em especial, mais de 82 novos testes usam o WebDriver BiDi de forma eficiente, abrindo caminho para mais melhorias.

Chrome:

  • Atualmente, o Chrome está atingindo uma taxa de aprovação de 68% com o WebDriver BiDi, demonstrando uma funcionalidade confiável. Embora haja espaço para mais otimização em comparação com a abordagem baseada em CDP, esses avanços futuros e empolgantes promissores.

Alguns recursos, como acesso a cookies, interceptação de solicitações de rede, recursos específicos de emulação e permissões, ainda estão em padronização ativa. Elas serão integradas ao Puppeteer assim que estiverem prontas. Enquanto isso, confira a lista completa de recursos do Puppeteer com suporte do WebDriver BiDi.

O Puppeteer já não era compatível com o Firefox?

A Puppeteer oferecia suporte experimental para o Firefox usando uma implementação de CDP limitada e para diferentes navegadores, mas apresentava limitações e não era uma solução sustentável.

A nova implementação experimental do Firefox e do WebDriver BiDi resolve esses problemas.

Sabemos que você pode ter outras dúvidas, como:

  • O suporte ao CDP do Firefox será desativado?
  • Todos os recursos do Puppeteer são compatíveis?

Para conferir respostas detalhadas e mais informações, confira o aviso dedicado do Firefox.

Tempos incríveis pela frente

Os testes em vários navegadores têm sido uma das principais necessidades dos desenvolvedores, por isso estamos felizes em liderar a integração do WebDriver BiDi com o Puppeteer, que marca um ponto de virada para uma experiência de automação entre navegadores mais simples e eficiente. Incentivamos você a explorar o WebDriver BiDi com o Puppeteer.

No futuro, o WebDriver BiDi se tornará o protocolo padrão da Puppeteer, abrindo caminho para uma experiência de automação consistente e capacitada.

Se tiver problemas ao executar testes do Puppeteer com o WebDriver BiDi, abra o Issue Tracker do Puppeteer (em inglês).