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.