WebDriver BiDi: Actualización de estado de 2023

En este artículo, se ofrece una descripción general de las novedades de WebDriver BiDi en 2023.

¿Qué es BiDi de WebDriver?

WebDriver es un protocolo de automatización de navegadores, definido como un estándar del W3C, con implementaciones en ChromeDriver, GeckoDriver y WebKitDriver.

Chromium también tiene su propio protocolo de automatización de navegadores propietario: el Protocolo de Chrome DevTools o CDP.

Existen algunas diferencias fundamentales entre estos dos protocolos: WebDriver es un estándar interoperable, pero el protocolo es menos eficiente y carece de las funciones que tiene CDP. En cambio, CDP es más eficiente y potente, pero menos interoperable.

Por eso, en 2020, el grupo de trabajo de herramientas y pruebas de navegadores del W3C comenzó a trabajar en WebDriver BiDi, un nuevo protocolo estándar de automatización de navegadores que cierra la brecha entre los protocolos WebDriver Classic y CDP. Lo mejor de ambos mundos. Para obtener más información, consulta Un repaso de la evolución de la automatización de pruebas y WebDriver BiDi: el futuro de la automatización multinavegador.

El esfuerzo de WebDriver BiDi implica trabajo de estandarización, la creación de pruebas de plataforma web y las implementaciones para diferentes motores de navegador.

¿Dónde estamos ahora?

En 2022, Chrome/ChromeDriver 106 y Firefox 102 incluyeron compatibilidad con el estándar BiDi de WebDriver.

Desde entonces, WebDriver BiDi se adoptó en frameworks populares y abordó los principales problemas de los desarrolladores desbloqueando funciones muy solicitadas, como la compatibilidad con el registro.

Registros con tecnología WebDriver BiDi

Un caso de uso común es verificar automáticamente que una página web se cargue sin registros, advertencias ni errores de la consola, y sin excepciones de JavaScript no detectadas. Otro caso de uso es que tal vez quieras escribir una prueba automatizada para verificar que una página web registre una advertencia o arroje una excepción cuando se desee. Estos problemas no se pueden resolver con WebDriver clásico porque no es bidireccional. WebDriver BiDi ahora lo hace posible.

A continuación, se muestra un ejemplo de implementación del segundo caso de uso con las vinculaciones de lenguaje JavaScript de 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();

Este es un ejemplo que usa la compatibilidad experimental de WebDriver BiDi de 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();

La misma funcionalidad está disponible a través de otras abstracciones, como WebdriverIO.

Hoja de ruta pública compartida

Seguimos desarrollando la especificación WebDriver BiDi en colaboración con otros proveedores de navegadores y partes interesadas de la industria que participan en el grupo de trabajo de W3C. Recientemente, el grupo acordó una hoja de ruta compartida, que alinea el próximo trabajo de especificación e implementación en torno a casos de uso claros de extremo a extremo para los usuarios.

Interoperabilidad

A medida que el grupo de trabajo especifica colectivamente más funciones, también creamos pruebas de la plataforma web para el protocolo BiDi de WebDriver. Este conjunto de pruebas compartido nos ayuda a verificar la corrección y la interoperabilidad de las implementaciones. Puedes ver los resultados de las pruebas más recientes para varios navegadores en el panel de WPT.

Compatibilidad con BiDi de WebDriver: ¿Cómo puedes ayudar?

¿Te entusiasma el futuro de la automatización de navegadores con WebDriver BiDi? Para demostrar tu apoyo, haz lo siguiente:

  • Sé un verificador y usuario pionero y ayuda a definir el futuro de WebDriver BiDi.
  • ¡Comparte esta buena noticia! Comparte el proyecto en redes sociales con el hashtag #WebDriverBiDi.
  • Solicita asistencia. Solicita una función o consulta con tus herramientas favoritas qué planes tienen para adoptar WebDriver BiDi.
  • Participa en los debates sobre las especificaciones.