WebDriver BiDi: atualização de status de 2023

Neste artigo, você encontra uma visão geral das novidades do WebDriver BiDi em 2023.

O que é o WebDriver BiDi?

O WebDriver é um protocolo de automação do navegador, definido como um padrão W3C, com implementações no ChromeDriver, GeckoDriver e WebKitDriver.

O Chromium também tem o próprio protocolo de automação de navegador: o Chrome DevTools Protocol, ou CDP.

Há algumas diferenças fundamentais entre esses dois protocolos: o WebDriver é um padrão interoperável, mas é menos eficiente e não tem os recursos do CDP. Em contrapartida, o CDP é mais eficiente e poderoso, mas menos interoperável.

Por isso, em 2020, o grupo de trabalho W3C Browser Testing and Tools começou a trabalhar no WebDriver BiDi, um novo protocolo padrão de automação de navegadores que preenche a lacuna entre os protocolos WebDriver Classic e CDP. O melhor dos dois mundos! Para mais informações, leia Uma retrospectiva no tempo: a evolução da automação de testes e WebDriver BiDi: o futuro da automação entre navegadores.

A iniciativa do WebDriver BiDi envolve trabalho de padronização, criação de testes de plataforma da Web e implementações para diferentes mecanismos de navegador.

Onde estamos agora?

Em 2022, o Chrome/ChromeDriver 106 e o Firefox 102 lançaram suporte para o padrão WebDriver BiDi.

Desde então, o WebDriver BiDi passou a ser adotado em frameworks conhecidos, abordando os principais aspectos problemáticos dos desenvolvedores ao desbloquear recursos muito solicitados, como o suporte à geração de registros.

Geração de registros com a tecnologia WebDriver BiDi

Um caso de uso comum é verificar automaticamente se uma página da Web é carregada sem nenhum registro, aviso ou erro do console e sem exceções de JavaScript não capturadas. Você também pode programar um teste automatizado para verificar se uma página da Web registra um aviso ou gera uma exceção quando pretendido. Esses problemas não podem ser resolvidos usando o WebDriver Classic porque ele não é bidirecional. O WebDriver BiDi agora torna isso possível.

Confira um exemplo de implementação do segundo caso de uso usando as vinculações da linguagem JavaScript do Selenium:

import * as assert from 'node:assert';
import { Builder, LogInspector } from 'selenium-webdriver';
import chrome from 'selenium-webdriver/chrome.js';

const driver = new Builder()
  .forBrowser('chrome')
  .setChromeOptions(new chrome.Options().enableBidi())
  .build();

const inspector = await LogInspector(driver);
await inspector.onConsoleEntry((entry) => {
  console.log(`Console message received: [${
    entry.type}][${entry.level}] ${entry.text}`);
});

await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html');
await driver.findElement({ id: 'consoleLog' }).click();

await driver.quit();

Veja um exemplo de suporte experimental BiDi do WebDriver BiDi do Puppeteer:

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({
  protocol: 'webDriverBiDi',
  headless: 'new',
});

const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage();

page.on('console', (message) => {
  console.log(`Console message received: [${
    message.type()
  }] ${message.text()}`);
});

await page.goto(`https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html`);
await page.evaluate(() => {
  document.querySelector('#consoleLog').click();
});

await browser.close();

A mesma funcionalidade está disponível em outras abstrações, como WebdriverIO.

Um roteiro público compartilhado

Ainda estamos desenvolvendo a especificação WebDriver BiDi em colaboração com outros fornecedores de navegadores e partes interessadas do setor que participam do Grupo de trabalho do W3C. O grupo concordou recentemente com um roteiro compartilhado, alinhando a especificação e o trabalho de implementação futuros em torno de casos de uso completos e claros para o usuário.

Interoperabilidade

Como o grupo de trabalho especifica coletivamente mais recursos, também criamos testes da plataforma Web para o protocolo BiDi do WebDriver. Esse pacote de testes compartilhado nos ajuda a verificar a precisão e a interoperabilidade das implementações. É possível conferir os resultados mais recentes para vários navegadores no painel do WPT.

Compatibilidade com o WebDriver BiDi: como você pode ajudar?

Está animado com o futuro da automação de navegadores com o WebDriver BiDi? Veja como você pode mostrar seu apoio:

  • Seja um testador e usuário iniciais e ajude a moldar o futuro do WebDriver BiDi.
  • Conte para todo mundo! Compartilhe o projeto nas redes sociais usando a hashtag #WebDriverBiDi.
  • Peça ajuda. Envie uma solicitação de recurso ou confira os planos das suas ferramentas favoritas para adotar o WebDriver BiDi.
  • Participe das discussões sobre especificações.