WebDriver BiDi: Statusupdate 2023

In diesem Artikel erhalten Sie einen Überblick über die Neuerungen bei WebDriver BiDi im Jahr 2023.

Was ist WebDriver BiDi?

WebDriver ist ein Browserautomatisierungsprotokoll, definiert als W3C-Standard, mit Implementierungen in ChromeDriver, GeckoDriver und WebKitDriver.

Chromium verfügt auch über ein eigenes Browser-Automatisierungsprotokoll: das Chrome DevTools Protocol (CDP).

Es gibt einige grundlegende Unterschiede zwischen diesen beiden Protokollen: WebDriver ist ein interoperabler Standard, aber das Protokoll ist weniger effizient und verfügt nicht über Funktionen von CDP. Im Gegensatz dazu ist CDP effizienter und leistungsfähiger, aber weniger interoperabel.

Aus diesem Grund begann die W3C Browser Testing and Tools Working Group 2020 mit der Arbeit an WebDriver BiDi, einem neuen Standardprotokoll zur Browserautomatisierung, das die Lücke zwischen den Protokollen WebDriver Classic und CDP schließt. Das Beste aus beiden Welten! Weitere Informationen finden Sie in den Artikeln Ein Blick in die Vergangenheit: Die Entwicklung der Testautomatisierung und WebDriver BiDi – die Zukunft der browserübergreifenden Automatisierung.

Die Arbeit mit WebDriver BiDi umfasst die Standardisierung, die Erstellung von Webplattform-Tests und Implementierungen für verschiedene Browser-Engines.

Wo sind wir jetzt?

Seit 2022 unterstützen Chrome/ChromeDriver 106 und Firefox 102 den WebDriver BiDi-Standard.

Seitdem wurde WebDriver BiDi in beliebten Frameworks eingesetzt und hat die gefragten Funktionen wie die Protokollierungsunterstützung genutzt, um die Probleme der wichtigsten Entwickler zu lösen.

Logging mit WebDriver BiDi

Ein häufiger Anwendungsfall besteht darin, automatisch zu überprüfen, ob eine Webseite ohne Konsolenprotokolle, Warnungen oder Fehler und ohne nicht abgefangene JavaScript-Ausnahmen geladen wird. Ein weiterer Anwendungsfall ist, dass Sie einen automatisierten Test schreiben möchten, um zu überprüfen, ob eine Webseite eine Warnung protokolliert oder gegebenenfalls eine Ausnahme auslöst. Diese Probleme können mit WebDriver Classic nicht gelöst werden, da es nicht bidirektional ist. Mit WebDriver BiDi ist dies jetzt möglich.

Hier sehen Sie eine Beispielimplementierung des zweiten Anwendungsfalls mit den JavaScript-Sprachbindungen von 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();

Hier ein Beispiel mit der experimentellen WebDriver BiDi-Unterstützung von 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();

Die gleiche Funktionalität ist über andere Abstraktionen wie WebdriverIO verfügbar.

Eine gemeinsame öffentliche Roadmap

Wir erarbeiten die WebDriver BiDi-Spezifikation in Zusammenarbeit mit anderen Browseranbietern und Branchenbeteiligten, die Teil der W3C Working Group sind, noch immer. Die Gruppe hat sich vor Kurzem auf eine gemeinsame Roadmap geeinigt, um die bevorstehenden Spezifikationen und Implementierungsmaßnahmen auf klare Anwendungsfälle für die Nutzer abzustimmen.

Interoperabilität

Da die Arbeitsgruppe gemeinsam weitere Funktionen spezifiziert, erstellen wir auch Web Platform Tests für das WebDriver BiDi-Protokoll. Diese freigegebene Testsuite hilft uns dabei, die Richtigkeit und Interoperabilität der Implementierungen zu prüfen. Die aktuellen Testergebnisse für verschiedene Browser finden Sie im WPT-Dashboard.

Unterstützung von WebDriver BiDi: Wie können Sie helfen?

Seien Sie gespannt auf die Zukunft der Browserautomatisierung mit WebDriver BiDi? So kannst du deine Unterstützung zeigen:

  • Erstmaliger Tester und -Adopter sein und die Zukunft von WebDriver BiDi mitgestalten
  • Weitersagen! Teile das Projekt unter dem Hashtag #WebDriverBiDi in den sozialen Medien.
  • Bitten Sie um Unterstützung. Reichen Sie eine Funktionsanfrage ein oder informieren Sie sich in Ihren bevorzugten Tools über ihre Pläne für die Einführung von WebDriver BiDi.
  • Nehmen Sie an den Spezifikationsdiskussionen teil.