- Ab Puppeteer Version 23 wird Firefox offiziell unterstützt, sodass sich Automatisierung und End-to-End-Testing nun einfach in Chrome und Firefox durchführen lassen
const browser = await puppeteer.launch({browser: "firefox"});
- Genau wie bei Chrome kann Puppeteer die neueste stabile Version von Firefox herunterladen und ausführen
- Die Firefox-Unterstützung basiert nicht auf einem Firefox-spezifischen Automatisierungsprotokoll, sondern auf WebDriver BiDi, einem browserübergreifenden Protokoll, das derzeit in Gecko und Chromium implementiert ist
- Durch die Nutzung eines browserübergreifenden Protokolls können künftig einfacher weitere Browser unterstützt werden
Technischer Hintergrund
- Bis vor Kurzem gab es für alle, die Browser-Automatisierung wollten, zwei wesentliche Optionen
- Nutzung der W3C WebDriver API
- Nutzung browserspezifischer APIs (Chrome DevTools Protocol, Firefox Remote Debugging Protocol usw.)
- Beide Optionen bringen erhebliche Trade-offs mit sich
- Die klassische WebDriver API ist HTTP-basiert und folgt einem Modell, bei dem Befehle an den Browser gesendet und auf Antworten gewartet wird
- Das funktioniert gut für Automatisierungsszenarien wie das Laden einer Seite und das Prüfen, ob Elemente angezeigt werden, ist aber für fortgeschrittene Anwendungsfälle wie das Empfangen von Events aus dem Browser oder das gleichzeitige Ausführen mehrerer Befehle ungeeignet
- Browserspezifische APIs bieten im Allgemeinen einen Funktionsumfang, der WebDriver deutlich voraus ist, da sie üblicherweise dafür entworfen wurden, komplexe Anwendungsfälle der Entwicklerwerkzeuge im Browser zu unterstützen
- Daher mussten Clients für Browser-Automatisierung entweder mehrere Browser mit einem einzigen Protokoll und eingeschränktem Funktionsumfang unterstützen oder einen reichhaltigeren Funktionsumfang anbieten, dafür aber Features für jeden unterstützten Browser separat implementieren
- Das erhöhte die Kosten und die Komplexität für die Erstellung guter browserübergreifender Automatisierung
- Die Situation war ähnlich wie vor der Entwicklung des LSP (Language Server Protocol)
- WebDriver BiDi überführt den Funktionsumfang für Automatisierung, der zuvor auf browserspezifische Protokolle beschränkt war, in ein standardisiertes Protokoll, damit er in allen Browsern und Automatisierungs-Tools genutzt werden kann
Entfernung der experimentellen CDP-Unterstützung (Chrome DevTools Protocol) in Firefox
- Als Teil der frühen Arbeiten zur Verbesserung browserübergreifender Tests wurde eine partielle Implementierung von CDP bereitgestellt, die auf einige Befehle und Events beschränkt war, die für Test-Anwendungsfälle nötig sind
- Da jedoch klar wurde, dass dies nicht die Richtung für die Weiterentwicklung browserübergreifender Automatisierung ist, wurden die Arbeiten daran eingestellt
- Infolgedessen wird sie nicht mehr gepflegt und ist nicht mit modernen Firefox-Funktionen wie Site Isolation kompatibel
- Daher soll die Unterstützung Ende 2024 entfernt werden
Ausblick
- Einige APIs werden weiterhin noch nicht unterstützt
- CDP-exklusive APIs
- APIs, die zusätzliche Standardisierungsarbeit erfordern
- APIs, für die es zwar einen Standard gibt, die aber noch nicht implementiert sind
- Über das Feedback der Nutzer sollen Prioritäten gesetzt werden
1 Kommentare
Hacker-News-Kommentare
Dass das Puppeteer-Team Google verlassen und zu Microsoft gewechselt ist, um dort Playwright weiterzuentwickeln, war ein großer Schlag für Google
Das WebDriver-BiDi-Protokoll ist zwar kein Protokoll zum Erstellen von Browsern, aber es scheint fast 90 % dieser Rolle erfüllen zu können
Playwright unterstützt alle modernen Rendering-Engines (Chromium, WebKit, Firefox)
Frage zur Accessibility-Tree