Selenium war lange Zeit DAS Tool für unser End-to-End-Monitoring. Selenium bot uns eine solide Basis für automatisierte Tests und ermöglichte es, die Anwendungen unserer Kunden ausführlich zu monitoren. Die breite Browserunterstützung und die große Entwicklergemeinschaft waren definitiv Vorteile, die uns bei unserer Arbeit behilflich waren. Allerdings stießen wir auf Schwierigkeiten bei der Aufnahme von Videos während der Testläufe. Während Selenium standardmäßig Screenshots erfassen kann, erfordert die Aufnahme von Videos zusätzlichen Aufwand und komplexe Konfigurationen.
In anderen Projekten begannen wir Playwright zu nutzen und stellten fest, dass es in vielerlei Hinsicht Selenium das Wasser reichen konnte. Insbesondere beeindruckte uns die Geschwindigkeit, mit der Playwright Tests ausführt. Darüber hinaus bietet Playwright eine eingebaute Videoaufnahmefunktion, die nahtlos in unsere Testläufe integriert werden konnte.
Angesichts dieser Vorteile haben wir uns entschieden, unseren Ansatz für das End-to-End-Monitoring zu überdenken. Im Folgenden werden wir vier Gründe im Detail vorstellen, warum wir diesen Wechsel vollzogen haben und wie sich diese Entscheidung ausgewirkt hat.
Geschwindigkeit
Ein signifikanter Faktor, der unseren Wechsel zu Playwright maßgeblich beeinflusst hat, ist die Geschwindigkeit bei der Testausführung. Tatsächlich waren einige unserer Tests mit Playwright um das Doppelte schneller als mit Selenium. Diese gesteigerte Geschwindigkeit ermöglicht es uns, mehr Testläufe pro Tag durchzuführen, was zu einer erhöhten Anzahl von Ergebnissen führt, die wir unseren Kunden zur Verfügung stellen können. Dies trägt dazu bei, die Reaktionsfähigkeit auf potenzielle Probleme zu verbessern.
Videoaufnahmen
Ein weiterer überzeugender Grund für unseren Umstieg auf Playwright war die integrierte Unterstützung für Videoaufnahmen während der Testläufe. Im Gegensatz zu Selenium, wo die Aufnahme von Videos zusätzliche Tools und komplizierte Konfigurationen erfordert, bietet Playwright diese Funktion out-of-the-box. Dazu muss man dem Browser nur eine Option mit dem gewünschten Pfad zur Videodatei mitgeben:
Bei Selenium empfiehlt es sich Videoaufzeichnungen über ein Selenium Grid abzubilden. Selenium Grid ist ein Tool, das Teil des Selenium-Test-Frameworks ist und speziell dafür entwickelt wurde, automatisierte Tests parallel auf mehreren Maschinen und in verschiedenen Browser-Umgebungen auszuführen. Es gibt einen zentralen Server, der Testanforderungen von Clients entgegennimmt und an entsprechende Nodes weiterleitet. Ein Node ist eine Ausführungseinheit, auf der die Tests in den gewünschten Browsern laufen. Mithilfe von Chrome-Instanzen, die bei Bedarf als Docker-Container erstellt werden, können die Sitzungen aufgezeichnet werden. Eine genaue Anleitung findet man hier: https://medium.com/@trivedevops/dynamic-selenium-grid-cluster-deployment-and-video-recording-integration-c8f9c0695055
Eine alternative Möglichkeit zum Selenium-Grid ist die Aufnahme vieler Screenshots während des Tests und die anschließende Zusammensetzung zu einem Video.
Um Videos mit Hilfe von Screenshots aufzunehmen, muss FFMPEG auf dem Rechner installiert sein.
Für Mac/Linux mithilfe von brew:
brew update
brew upgrade
brew install ffmpeg
Für Windows: https://phoenixnap.com/kb/ffmpeg-windows
Damit kontinuierlich während des Tests Screenshots gemacht werden, könnte man eine entsprechende Funktion (hier „ffmpegOutPrintScreenshots“) ins Logging einbauen. Mittels ffmpeg werden dann die einzelnen Bilder zu einem Video zusammengesetzt (hier „stopRecording“):
Auto-Waits & -Checks
Ein entscheidender Vorteil von Playwright sind die integrierten Auto-Waits und -Checks. Diese Funktionen erleichtern die Handhabung von Asynchronität und machen unsere Tests robuster und zuverlässiger. Playwright führt relevante Checks automatisch durch, um sicherzustellen, dass Elemente verfügbar und für Interaktionen bereit sind. Im Vergleich dazu erfordert Selenium oft die explizite Angabe von „ExpectedConditions“, um auf Elemente zu warten, bevor Interaktionen möglich sind. Obwohl diese Vorgehensweise in bestimmten Situationen Vorteile bieten kann, wie beispielsweise bei komplexen Anwendungen mit dynamischen Inhalten, erleichtert die automatische Handhabung von Wartezeiten und Checks durch Playwright die Implementierung und Wartung unserer Tests erheblich.
Bei Selenium müssen dafür die ExpectedConditions „visibilityOf“ und „elementToBeClickable“ explizit aufgerufen werden:
Automatisches Scrollen zu Elementen
Ein weiterer überzeugender Grund für unseren Wechsel zu Playwright ist die automatische Scrollfunktion, die Playwright bietet. Im Gegensatz zu Selenium scrollt Playwright automatisch zu den gesuchten Elementen, was zu robusteren Tests führt. Das automatische Scrollen gewährleistet, dass Elemente, die sich außerhalb des sichtbaren Bereichs befinden, automatisch in den sichtbaren Bereich des Browserfensters verschoben werden, bevor Interaktionen stattfinden. Dies reduziert die Wahrscheinlichkeit von Fehlern und Flakiness in den Tests erheblich. Obwohl es möglich ist, das Scrollen in Selenium manuell zu implementieren, ist dies oft fehleranfällig und führt zu instabileren Tests.
Bei Selenium lässt sich dieses Verhalten so umsetzen, indem man zunächst überprüft, ob ein bestimmtes Element im aktuellen Viewport (sichtbaren Bereich) des Browsers liegt (isElementInViewport ) und wenn nicht, an die entsprechende Stelle scrollt (scrollIntoViewAndClick):
Fazit
Insgesamt lässt sich festhalten, dass sowohl Selenium als auch Playwright ihre eigenen Stärken und Anwendungsfälle haben. Während Selenium seit langem ein etabliertes Werkzeug für Browserautomatisierungstests ist und für bestimmte Szenarien weiterhin relevant bleibt, hat sich unser Wechsel zu Playwright für das End-to-End-Monitoring als äußerst lohnenswert erwiesen. Das End-to-End-Monitoring unterscheidet sich grundlegend vom traditionellen funktionalen Testing, da es weniger darum geht, einzelne Funktionen zu testen, sondern vielmehr darum, die Performance geschäftskritischer Services aus Sicht der Nutzer zu überwachen. In diesem Kontext erweist sich Playwright als überlegen, da seine Geschwindigkeit, eingebaute Videoaufnahmefunktion und andere fortgeschrittene Features besonders relevant sind. Die Fähigkeit von Playwright, automatische Wartezeiten, Checks und das automatische Scrollen zu implementieren, führt zu robusteren und zuverlässigeren Tests, die besser zur Überwachung von Services geeignet sind.