Produktionsfertiger WebDriver BiDi in Firefox, Chrome und Puppeteer

Matthias Rohmer
Matthias Rohmer

Erst letzte Woche haben wir gemeinsam mit BrowserStack angekündigt, dass WebDriver BiDi in BrowserStack für die Produktion bereit ist. Diese Woche geht es mit WebDriver BiDi weiter: Firefox 129 und Puppeteer 23 erhalten Produktionssupport für WebDriver BiDi.

Mozilla ist seit über vier Jahren ein wichtiger Mitwirkender bei WebDriver BiDi. Zunächst hat das Unternehmen dazu beigetragen, den neuen Standard zu entwickeln, und ihn dann nach und nach in Firefox implementiert. Die Fortschritte wurden im Firefox WebDriver Newsletter dokumentiert.

Da WebDriver BiDi nun produktionsreif in Firefox ist, bietet Puppeteer ab Version 23 stabile Unterstützung für Firefox über WebDriver BiDi. Auf diese Weise können Sie Firefox mit derselben prägnanten API wie Chrome automatisieren. Die Unterstützung von Puppeteer für das Chrome DevTools Protocol (CDP) bleibt unverändert.

Firefox, CDP und Puppeteer

Puppeteer ist ein zuverlässiges Tool für Entwickler, mit dem sich Chromium-basierte Browser mit dem Chrome DevTools Protocol (CDP) automatisieren lassen. 2019 erhielt Puppeteer experimentelle Unterstützung für Firefox.

Damit dies funktioniert, hat Mozilla einen Teil des CDP in Firefox implementiert und verwaltet. Mit dieser Lösung konnte Firefox mit der Puppeteer API automatisiert werden, es gab jedoch einige Einschränkungen:

  • Wie der Name schon sagt, wird die CDP von den Entwicklertools von Chrome verwendet und muss entsprechend den Entwicklertools-Anforderungen geändert werden.
  • Die CDP ist nicht in einer gemeinsamen, öffentlichen Spezifikation standardisiert. Die Verwaltung in Firefox erforderte eine kontinuierliche Kommunikation und Anstrengungen.
  • Da Firefox nur einen Teil von CDP implementiert hat, konnte Puppeteer nie garantieren, dass seine vollständige API mit Firefox funktioniert. Das führte zu Verwirrung bei den Nutzern.

Wir sind froh, dass wir diese Unterstützung in den letzten Jahren gemeinsam mit Mozilla aufrechterhalten konnten. Wir wussten aber immer, dass dies keine dauerhafte Lösung ist. Auf dieser Partnerschaft aufbauend und in Zusammenarbeit mit anderen großen Browser- und Toolanbietern haben wir WebDriver BiDi entwickelt.

Teamarbeit macht den Traum

Das Firefox-Team arbeitet mit Hochdruck an der Implementierung von WebDriver BiDi in Firefox. Gleichzeitig hat das Puppeteer-Team die WebDriver-BiDi-Unterstützung für die Puppeteer API erweitert. Ziel beider Teams war es, alle für die Produktionsautomatisierung erforderlichen APIs mit WebDriver BiDi in Puppeteer verfügbar zu machen und so die Unterstützung sowohl in Chrome als auch in Firefox zu gewährleisten.

Gemeinsam genutztes Team-Dashboard mit der Anzahl der bestandenen Tests in den letzten Monaten
Gemeinsam genutztes Team-Dashboard mit der Anzahl der bestandenen Tests in den letzten Monaten.

So können Puppeteer-Nutzer beim Starten einer Puppeteer-Instanz den Konfigurationsschlüssel browser angeben, um entweder Firefox oder Chrome für ihre Automatisierungen auszuwählen.

import puppeteer from 'puppeteer';

const firefoxBrowser = await puppeteer.launch({
  browser: 'firefox', // WebDriver BiDi is used by default in Firefox.
});
const page = await firefoxBrowser.newPage();
...
await firefoxBrowser.close();

const chromeBrowser = await puppeteer.launch({
  browser: 'chrome',  
  protocol: 'webDriverBiDi', // CDP would be used by default for Chrome.
});
const page = await chromeBrowser.newPage();
...
await chromeBrowser.close();

Weitere Informationen zu den Neuerungen in Firefox 129 und zu den Arbeiten von Mozilla an WebDriver BiDi finden Sie im entsprechenden Blogpost auf Mozilla Hacks.

Unterstützung für CDPs in Zukunft

Das vorherige Code-Snippet zeigt, dass Sie protocol explizit auf webDriverBiDi setzen müssen, um Chrome mit WebDriver BiDi und Puppeteer zu automatisieren. Das liegt daran, dass Puppeteer für Chrome standardmäßig CDP verwendet, um bestehende Automatisierungen nicht zu beeinträchtigen, aber auch um Automatisierungen zu unterstützen, die auf die Funktionen von Chrome spezialisiert sind.

Die Unterstützung von CDP in Firefox wird ab Firefox 129 eingestellt und wird Ende 2024 entfernt. Wenn Sie bereits Automatisierungen haben, die auf der CDP-Unterstützung in Firefox basieren, empfehlen wir Ihnen dringend, zu WebDriver BiDi zu migrieren. Wenn das nicht möglich ist, wenden Sie sich mit Ihrem Anwendungsfall an dev-webdriver@mozilla.org.