WebDriver BiDi: Actualización de estado de 2023

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

¿Qué es WebDriver BiDi?

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

Chromium también tiene su propio protocolo de automatización de navegadores propio: el protocolo de Herramientas para desarrolladores de Chrome, 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 CDP tiene. Por el contrario, CDP es más eficiente y potente, pero menos interoperable.

Por eso, en 2020, el grupo de trabajo de pruebas y herramientas de W3C comenzó a trabajar en WebDriver BiDi, un nuevo protocolo estándar de automatización de navegadores que acorta las distancias entre los protocolos de WebDriver Classic y CDP. ¡Lo mejor de ambos mundos! Consulte Una retrospectiva en el tiempo: la evolución de la automatización de pruebas y WebDriver BiDi, el futuro de la automatización entre navegadores para obtener más información.

El esfuerzo de WebDriver BiDi implica un 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 enviaron compatibilidad con el estándar WebDriver BiDi.

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

Registro con la tecnología de 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 no detectadas de JavaScript. Otro caso de uso es que desees escribir una prueba automatizada para verificar si una página web registra una advertencia o arroja una excepción cuando lo previsto. Estos problemas no se pueden resolver con la versión clásica de WebDriver 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();

A continuación, se muestra un ejemplo en el que se usa la compatibilidad experimental con 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.

Una hoja de ruta pública compartida

Todavía estamos completando la especificación de 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 los próximos trabajos de especificación e implementación en torno a casos de uso claros de extremo a extremo para los usuarios.

Interoperabilidad

Dado que el Grupo de trabajo especifica más funciones en conjunto, también creamos pruebas en la plataforma web para el protocolo WebDriver BiDi. Este paquete de pruebas compartido nos ayuda a verificar la precisión y la interoperabilidad de las implementaciones. Puedes ver los últimos resultados de la prueba para varios navegadores en el panel de WPT.

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

¿Te entusiasma el futuro de la automatización de navegadores con WebDriver BiDi? A continuación, te mostramos cómo puedes demostrar tu apoyo:

  • Actúa como pionero de la prueba y adopción y ayuda a diseñar el futuro de WebDriver BiDi.
  • ¡Comparte esta buena noticia! Comparte el proyecto en redes sociales con el hashtag #WebDriverBiDi.
  • Pide asistencia. Presenta una solicitud de función o consulta con tus herramientas favoritas cuáles son sus planes para adoptar WebDriver BiDi.
  • Participa en los debates sobre especificaciones.