Puppeteer spricht jetzt mit Firefox 🎉 Aber Moment, das ist doch schon passiert? 🤔 Sehen wir uns WebDriver BiDi an, das neue Protokoll in Puppeteer, und finden heraus, was diese spannende Entwicklung für den Firefox-Automatisierungsablauf bedeutet.
WebDriver BiDi ist ein neues standardisiertes browserübergreifendes Automatisierungsprotokoll, das das Beste aus WebDriver Classic und Chrome DevTools Protocol (CDP) vereint. Es verspricht eine bidirektionale Kommunikation, die eine effizientere und leistungsfähigere Automatisierung sowie eine detailliertere Steuerung ermöglicht. Sie können den Fortschritt in der offiziellen Roadmap verfolgen.
Seit unserer letzten Statusmeldung arbeiten wir weiterhin eng mit der W3C-Arbeitsgruppe für Browsertests und -tools zusammen. Dank der Weiterentwicklungen von WebDriver BiDi werden in Puppeteer jetzt Funktionen wie Logging, Netzwerkereignisse und Formularübermittlungen implementiert.
Code anzeigen
Im folgenden Puppeteer-Script wird WebDriver BiDi in Aktion gezeigt. Es funktioniert nahtlos in Chrome und Firefox:
- Starten Sie den ausgewählten Browser mit der Protokolleinstellung.
- Konsolenmeldungen auf Fehler prüfen
- Rufen Sie eine Webseite auf, legen Sie die Abmessungen des Darstellungsbereichs fest und klicken Sie auf eine Schaltfläche.
- Prüfen Sie den Textinhalt und bestätigen Sie die Gleichheit.
import * as assert from 'node:assert';
import puppeteer from 'puppeteer';
// Arrange: Launch browser with WebDriver BiDi
const browser = await puppeteer.launch({
protocol: 'webDriverBiDi',
product: 'firefox', // or 'chrome'
});
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage();
// Arrange: Monitor console messages
page.on('console', message => {
if (message.type() != 'error') return;
console.log('RECEIVED: %s', message.text());
});
// Action
await page.setViewport({width: 600, height: 1041});
await page.goto('https://coffee-cart.app/?breakable=1');
const coffee = await page.waitForSelector('[data-test="Espresso"]');
await coffee.click();
// Assert
const checkout = await page.$('[data-test="checkout"]');
const total = await checkout.evaluate(el => el.textContent);
assert.equal(total, 'Total: $10.00');
browser.close();
Fortschritt von WebDriver BiDi in Puppeteer
Um die Funktionen von WebDriver BiDi in Puppeteer zu bewerten, haben wir die umfassende Puppeteer-Testsuite verwendet. Die BiDi-Implementierung von Puppeteer und WebDriver befindet sich noch in der Entwicklungsphase und bietet noch nicht alle Funktionen von Puppeteer mit Chrome und CDP. Wir möchten Ihnen aber einen Überblick über den aktuellen Stand geben.
Firefox:
- WebDriver BiDi hat ein Qualitätsniveau erreicht, das für praktische Automatisierungsaufgaben geeignet ist. Mozilla hat die Puppeteer-Tests für pdf.js erfolgreich von Firefox und CDP auf Firefox und WebDriver BiDi portiert.
- Über 55% der Tests werden mit WebDriver BiDi erfolgreich bestanden, was die wachsende Funktionalität unterstreicht.
- Insbesondere werden in über 82 neuen Tests WebDriver BiDi effizient eingesetzt, was den Weg für weitere Verbesserungen ebnet.
Chrome:
- Chrome erreicht derzeit eine Bestehensquote von 68% mit WebDriver BiDi und beweist damit eine zuverlässige Funktion. Im Vergleich zum CDP-basierten Ansatz gibt es zwar noch Optimierungsmöglichkeiten, aber dieser Ansatz verspricht spannende zukünftige Entwicklungen.
Bestimmte Funktionen wie der Cookie-Zugriff, das Abfangen von Netzwerkanfragen, bestimmte Emulationsfunktionen und Berechtigungen werden derzeit noch standardisiert. Sie werden in Puppeteer integriert, sobald sie fertig sind. In der Zwischenzeit finden Sie hier eine vollständige Liste der Puppeteer-Funktionen, die von WebDriver BiDi unterstützt werden: Vollständige Liste der Puppeteer-Funktionen, die von WebDriver BiDi unterstützt werden.
Unterstützt Puppeteer Firefox nicht schon?
Puppeteer bot zwar zuvor experimentellen Support für Firefox mit einer eingeschränkten und nicht browserübergreifenden Implementierung von CDP, war aber aufgrund von Einschränkungen keine nachhaltige Lösung.
Die neue experimentelle BiDi-Implementierung von Firefox und WebDriver behebt diese Probleme.
Wir wissen, dass du möglicherweise weitere Fragen hast, z. B.:
- Wird der CDP-Support von Firefox eingestellt?
- Werden alle Puppeteer-Funktionen unterstützt?
Ausführliche Antworten und weitere Informationen findest du in der speziellen Ankündigung von Firefox.
Spannende Zeiten vor uns
Browserübergreifende Tests sind eine der wichtigsten Anforderungen von Entwicklern. Deshalb freuen wir uns, die Integration von WebDriver BiDi in Puppeteer voranzutreiben. Dies ist ein Wendepunkt hin zu einer reibungsloseren und effizienteren browserübergreifenden Automatisierung. Wir empfehlen Ihnen, WebDriver BiDi mit Puppeteer auszuprobieren.
WebDriver BiDi wird in Zukunft das Standardprotokoll für Puppeteer sein und so den Weg für eine konsistente und leistungsstarke Automatisierung ebnen.
Wenn beim Ausführen von Puppeteer-Tests mit WebDriver BiDi Probleme auftreten, können Sie diese in unserem Puppeteer-Problem-Tracker melden.