WebDriver BiDi: atualização de status de 2023

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

O que é o BiDi do WebDriver?

O WebDriver é um protocolo de automação de 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 reservado: o Chrome DevTools Protocol, ou CDP.

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

Por isso, em 2020, o Grupo de Trabalho de Testes e Ferramentas de Navegadores do W3C começou a trabalhar no WebDriver BiDi, um novo protocolo padrão de automação de navegador que preenche a lacuna entre os protocolos WebDriver Classic e CDP. O melhor dos dois mundos! Leia Um olhar para o passado: a evolução da automação de testes e WebDriver BiDi: o futuro da automação entre navegadores para mais informações.

O esforço do WebDriver BiDi envolve o trabalho de padronização, a criação de Testes de plataformas da Web e implementações para diferentes mecanismos de navegador.

Onde estamos agora?

Em 2022, o Chrome/ChromeDriver 106 e o Firefox 102 passaram a oferecer suporte ao padrão BiDi do WebDriver.

Desde então, o WebDriver BiDi foi adotado em frameworks populares, resolvendo os principais problemas dos desenvolvedores ao desbloquear recursos muito solicitados, como o suporte a registros.

Geração de registros com o WebDriver BiDi

Um caso de uso comum é verificar automaticamente se uma página da Web é carregada sem registros, avisos ou erros no console e sem exceções não detectadas do JavaScript. Outro caso de uso é criar 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 com o WebDriver Classic porque não é bidirecional. Agora isso é possível com o WebDriver BiDi.

Confira um exemplo de implementação do segundo caso de uso usando as vinculações de 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 que usa o suporte experimental WebDriver BiDi do Puppeteer (em inglês):

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 o WebdriverIO.

Um roteiro público compartilhado

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

Interoperabilidade

À medida que o grupo de trabalho especifica mais recursos, também criamos testes de plataforma Web para o protocolo WebDriver BiDi. Esse pacote de testes compartilhado nos ajuda a verificar a correção e a interoperabilidade das implementações. É possível visualizar os resultados dos testes mais recentes para vários navegadores no Painel do WPT.

Como posso ajudar a oferecer suporte ao BiDi do WebDriver?

Você está animado com o futuro da automação de navegadores com o WebDriver BiDi? Confira como você pode demonstrar seu apoio:

  • Seja um testador e usuário inicial e ajude a moldar o futuro do WebDriver BiDi.
  • Divulgue a notícia! Compartilhe o projeto nas mídias sociais usando a hashtag #WebDriverBiDi.
  • Peça ajuda. Envie uma solicitação de recurso ou verifique com suas ferramentas favoritas os planos de adoção do WebDriver BiDi.
  • Participe nas discussões sobre especificações.