WebDriver BiDi: Statusupdate 2023

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

Was ist WebDriver BiDi?

WebDriver ist ein Browser-Automatisierungsprotokoll, das als W3C-Standard definiert ist und in ChromeDriver, GeckoDriver und WebKitDriver implementiert ist.

Chromium hat auch ein eigenes proprietäres 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 es fehlen Funktionen, die CDP bietet. Im Gegensatz dazu ist CDP effizienter und leistungsfähiger, aber weniger interoperabel.

Aus diesem Grund hat die W3C Browser Testing and Tools Working Group 2020 mit der Arbeit an WebDriver BiDi begonnen, einem neuen Standardprotokoll für die Browserautomatisierung, das die Lücke zwischen den WebDriver Classic- und CDP-Protokollen schließt. Das Beste aus beiden Welten! Weitere Informationen finden Sie unter Rückblick: Die Entwicklung der Testautomatisierung und WebDriver BiDi – die Zukunft der plattformübergreifenden Automatisierung.

Die BiDi-Unterstützung für WebDriver umfasst Standardisierungsarbeiten, die Erstellung von Webplattformtests und Implementierungen für verschiedene Browser-Engines.

Wo stehen wir jetzt?

2022 wurde sowohl in Chrome/ChromeDriver 106 als auch in Firefox 102 der WebDriver-BiDi-Standard unterstützt.

Seitdem wurde WebDriver BiDi in beliebten Frameworks eingeführt. So konnten die größten Probleme von Entwicklern behoben werden, indem häufig angeforderte Funktionen wie die Protokollierungsunterstützung freigeschaltet wurden.

Logging mit WebDriver BiDi

Ein häufiger Anwendungsfall ist die automatische Überprüfung, ob eine Webseite ohne Console-Protokolle, Warnungen oder Fehler und ohne nicht aufgefangene JavaScript-Ausnahmen geladen wird. Ein weiterer Anwendungsfall ist, dass Sie einen automatisierten Test schreiben möchten, um zu prüfen, ob auf einer Webseite wie vorgesehen eine Warnung protokolliert oder eine Ausnahme ausgelöst wird. Diese Probleme können nicht mit WebDriver Classic gelöst werden, da es nicht bidirektional ist. WebDriver BiDi macht das jetzt möglich.

Hier ist 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 für die Verwendung der experimentellen BiDi-Unterstützung von WebDriver in 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();

Dieselben Funktionen sind auch über andere Abstraktionsschichten wie WebdriverIO verfügbar.

Eine freigegebene öffentliche Roadmap

Wir arbeiten derzeit in Zusammenarbeit mit anderen Browseranbietern und Branchenakteuren, die an der W3C-Arbeitsgruppe teilnehmen, an der WebDriver-BiDi-Spezifikation. Die Gruppe hat sich vor Kurzem auf eine gemeinsame Roadmap geeinigt, um die anstehenden Spezifikations- und Implementierungsarbeiten auf klare End-to-End-Anwendungsfälle für Nutzer auszurichten.

Interoperabilität

Wenn die Arbeitsgruppe gemeinsam weitere Funktionen festlegt, erstellen wir auch Webplattformtests für das WebDriver-BiDi-Protokoll. Mit dieser gemeinsamen Testsuite können wir die Korrektheit und Interoperabilität von Implementierungen überprüfen. Die neuesten Testergebnisse für verschiedene Browser finden Sie im WPT-Dashboard.

WebDriver BiDi unterstützen: Wie können Sie helfen?

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

  • Seien Sie einer der ersten Tester und Nutzer und gestalten Sie die Zukunft von WebDriver BiDi mit.
  • Weitersagen! Teile das Projekt in den sozialen Medien mit dem Hashtag #WebDriverBiDi.
  • Wenden Sie sich an den Support. Reichen Sie einen Funktionsantrag ein oder erkundigen Sie sich bei Ihren bevorzugten Tools nach den Plänen zur Einführung von WebDriver BiDi.
  • Beteiligen Sie sich an den Diskussionen zu den Spezifikationen.