Selenium in der Testautomatisierung: automatisierte Qualitätssicherung für Web-Applikationen

Gillian Trombke in selenium Testautomatisierung WebDriver automatisiertes Testen Browser Automatisierung Software Testing Qualitätssicherung Selenium IDE Selenium Grid Cross-Browser Testing Web Applications HTML JavaScript Test Tools Softwareentwicklung dynamischer Content Test Skript Regressionstests Selenium Python Automatisierungs Frameworks · 11.09.2024 · 7 Min. Lesezeit

Selenium ermöglicht die Automatisierung von Browser-interaktiven Tests, was zu einer beschleunigten Testdurchführung und einer verbesserten Qualität von Web-Applikationen führt. Wir geben Ihnen einen Überblick über die wichtigsten Informationen, Voraussetzungen und was sie bei der Benutzung von Selenium unbedingt wissen sollten.

Die digitale Welt und damit auch die der Softwareentwicklung ist ständig im Wandel. Nicht erst durch die zuletzt rasante AI-Entwicklung ist ein Anstieg der Komplexität qualitativ hochwertiger Software deutlich zu erkennen. Dies bringt allerdings auch komplexer werdende Anforderungen an die Software mit sich, die effiziente und zuverlässige Softwaretests erfordern. Eine Automatisierung dieser Tests ist in vielen Fällen alternativlos. Unter den zahlreichen Tools, die für diese Automatisierung zur Verfügung stehen, ragt Selenium als eine der führenden Optionen heraus.

Einführung in Selenium

Was ist Selenium?

Selenium ist ein Open-Source-Framework, das für die Testautomatisierung von Web-Applikationen entwickelt wurde. Insbesondere hebt sich Selenium durch seine Flexibilität hervor, da es sowohl verschiedenste Browser, Betriebssysteme sowie Programmiersprachen unterstützt.

Selenium bietet mit der Selenium IDE und dem Selenium WebDriver zwei verschiedene Möglichkeiten automatisierte Tests zur Validierung von Web-Applikationen zu erstellen. Die Selenium IDE bietet eine Capture-and-Replay-Option für Firefox und Chrome. Doch schnell werden sie feststellen, dass sie am Selenium WebDriver nicht vorbeikommen, wenn sie robuste Regressionstest automatisieren möchten. Der WebDriver bietet Ihnen die Möglichkeit robuste Skripts in ihrer eigenen Lieblingsprogrammiersprache zu coden.

Die Bedeutung von Selenium in der Testautomatisierung

Selenium wird von einigen der bedeutendsten Software-Unternehmen der Welt verwendet. So testen beispielsweise Google, Microsoft, Amazon oder Facebook ihre Web-Applikationen mit Selenium-Automatisierungen. Die Vorteile, wegen denen Selenium nicht nur von diesen Unternehmen geschätzt wird, sind vielfältig: Die Selenium-Community ist groß und entwickelt das Framework laufend weiter. Ebenso ist es für Anfänger aufgrund der einfachen Handhabung leicht zu erlernen. Darüber hinaus bietet Selenium auch marktspezifische Vorteile. Tests lassen sich in komplexen Szenarien, parallel sowie über verschiedene Browser zeitgleich automatisieren. Eines der beliebtesten Testframeworks von Selenium ist JUnit, ein auf Java basiertes Framework, das eine Reihe spezieller Funktionen für Testfälle anbietet.

Grundlagen der Selenium-Testautomatisierung

Voraussetzungen für den Einsatz von Selenium

Selenium wurde entwickelt, um Web-Applikationen automatisiert testen zu können. Andere Applikation, wie etwa eine Desktop- oder Mobile-App, sind für eine Testautomatisierung mit Selenium nicht geeignet. Der WebDriver bietet Bibliotheken für viele verschiedene Sprachen, sodass sie ihre Lieblingsprogrammiersprache für die Validierung ihrer Applikation wählen können. Selbst wenn sie bislang keinerlei Erfahrungen im Coding haben, ist das Erstellen von Testskripten aufgrund des knapp zu haltenden Codes sowie der großen Anzahl an guten Tutorials keine unlösbare Herausforderung. Einige Hardskills sind dennoch von großem Vorteil. So sollten sie beispielsweise HTML- und CSS-Kenntnisse mitbringen oder vorher einen Crashkurs zum Quellcode einer Website machen. Elementar ist ebenso das Verständnis wie sie Elemente über den XPath auf einer Seite lokalisieren können. Für das Finden von Website-Elementen, sollten sie zudem den Umgang mit dem Entwicklertool des Browsers beherrschen.

Einrichtung

Sollten Sie sich für Selenium entschieden haben, dann müssen sie zunächst das Framework richtig einrichten. Voraussetzung dafür ist eine aktuelle Version der Programmiersprache, welche sie für ihr Testprojekt verwenden möchten. Ebenfalls notwendig ist eine geeignete IDE, in der sie die Testskripte coden und das Testprojekt umsetzen können. Die Basis des eigentlichen Selenium-Frameworks sind sogenannte ‚Language Bindings‘. Diese enthalten die Clients und Bibliotheken für den Selenium WebDriver für eine Vielzahl von verschiedenen Programmiersprachen. Neben den ‚Language Bindings‘ muss der Treiber des Browsers installiert werden über den die Automatisierung laufen soll. Auch hier können sie aus vielen verschiedenen Browsertreibern auswählen.

Eine Übersicht über alle verfügbaren ‚Binding Languages‘ und Browsertreibern finden sie in der Online-Dokumentation von Selenium. Dort finden sie ebenfalls eine Anleitung zur korrekten Einrichtung.

Anwendung von Selenium in der Praxis

Aufbau eines Automatisierungsskriptes

Ein Selenium WebDriver-Skript ist immer ähnlich aufgebaut, sodass ein Test immer nach dem gleichen Schema abläuft. Zu Beginn wird der Browser über den WebDriver gestartet und zur Ziel-Website navigiert. Über XPaths wird ein Web-Element auf der Website lokalisiert, mit dem dann eine oder mehrere Useraktionen ausgeführt werden. Abschließend geschieht der eigentliche Test und es wird validiert, ob die tatsächliche Browserantwort auf die ausgeführte Aktion mit der erwarteten Reaktion auf die ausgeführte Aktion übereinstimmt.

Auch hierzu finden sie in der offiziellen Online-Dokumentation mehr Informationen und Code-Beispiele für die verschiedenen unterstützten Programmiersprachen.

Browserübergreifendes Testen / Skalierbarkeit / Testabdeckung

Skalierbarkeit ist jederzeit ein wichtiges Thema bei der Automatisierung von Webanwendungen. Gelingt es Tests auf verschiedenen Browsern mit verschiedenen Versionen und Betriebssystemen zu testen, kann die Testabdeckung in einem möglichst kleinem Zeitfenster maximiert werden. Dabei bietet der Selenium WebDriver selbst die Möglichkeit, Tests sequenziell laufen zu lassen. Dies kann aber bei einer großen Vielzahl von Tests auch zu Problemen führen. Selenium Grid kann hierbei Abhilfe leisten. Es ist darauf spezialisiert Tests unter mehreren Kombinationen von Browsern und Betriebssystemen auszuführen, jedoch geschieht auch dies nicht gleichzeitig. Um Tests zeitgleich auszuführen, eignet sich eine Cloud-basierte Lösung am besten. Diese ermöglicht es die Tests auf mehreren Betriebsgeräten mit unterschiedlichen Browsern gleichzeitig laufen zu lassen.

Herausforderungen und Lösungen mit Selenium

Wer eine Testautomatisierung mit Selenium aufbauen will, muss sich einiger Herausforderungen bewusst sein. Die wohl häufigste Herausforderung ist das Handling von Popups und Alerts. Dabei handelt es sich um Benachrichtigungsfenster, die eine Eingabe von Daten oder die Bestätigung zum Fortfahren verlangen. Man unterscheidet hier zwischen Benachrichtigungen auf Browser-Ebene, webbasierte Warnungen und Popups auf Betriebsystemebene. Je nachdem mit welcher Art man es zu tun hat, sind unterschiedliche Arten des Umgangs zu beachten.

Browserbasierte Pop-Ups unterscheiden sich vom jeweiligen genutzten Browser. Anders als die webbasierten Warnungen, die sehr gut über die im WebDriver enthaltenen Alerts-Schnittstelle gelöst werden können, müssen diese für jeden Browser anders behandelt werden. Dies erfordert ein wenig mehr Komplexität in den Skripten, ist aber keine unlösbare Herausforderung. Schwieriger wird es mit den Pop-Ups auf Betriebssystemebene, da der WebDriver nur mit dem Browser interagieren kann. Sollten sie im Rahmen ihrer Testautomatisierung darauf angewiesen sein, Interaktionen mit dem Betriebssystem einzubauen, kommen sie nicht um Tools von Drittanbietern herum, die Sie in ihre Automatisierung einbauen können.

Eine weitere Herausforderung die in der Testautomatisierung immer wieder zu schaffen macht, sind dynamische Inhalte.

  1. Diese werden durch folgende Eigenschaften charakterisiert:
  2. Sie erscheinen erst nach einer bestimmten Zeit auf der Seite
  3. Elemente werden durch bestimmte Benutzeraktionen sichtbar/unsichtbar
  4. Die Verfügbarkeit von Elementen unterscheidet sich je nach Benutzerrechten
  5. Elemente können dynamische Attribute, wie sich ständig ändernde IDs, besitzen.

Für den ersten Fall, Inhalte, die nach einer bestimmten Zeit erscheinen, bietet es sich an auf diese Inhalte zu warten. Dabei unterscheidet man zwischen impliziten und expliziten Waits. Beim impliziten Warten übergibt man eine absolute Zeit (z. B. 30 Sekunden), bis die gewünschte Interaktion mit dem Element beginnt. Beim expliziten Warten, definiert man genau die Bedingung, auf die gewartet werden soll. Zum Beispiel bis ein Element klickbar ist (elementToBeClickable()), oder etwa ein bestimmter Alert auftaucht (alertIsPresent()). Hierbei ist auch eine Dauer anzugeben, wie lange maximal auf die Bedingung gewartet werden soll. Handelt es sich um Objekte mit dynamischen Attributen, greifen sie am besten auf benutzerdefinierte XPath- oder CSS-Selektoren zurück.

Eine ebenfalls häufige Fehlerquelle in Selenium-Automatisierungen ist die Synchronisationszeit von Webelementen. Treten hier Zeitüberschreitungen oder Probleme mit dem Laden von Elementen auf, schlagen die Testskripte fehl. Dies liegt oft daran, dass Elemente dann noch nicht in einem Zustand vorliegen, in dem mit ihnen interagiert werden kann. So können die Elemente beispielsweise noch nicht anklickbar, nicht aktiv oder noch unsichtbar sein. Bei dieser Fehlerquelle handelt es sich um falsch-fehlgeschlagene Testergebnisse, de aber durch stabile Skripte vermieden werden können.

Auch hier bietet es sich wie bei den dynamischen Objekten an implizite und explizite Waits einzubauen. Ebenso können Timeout-Methoden, wie beispielsweise ein Lode Page Timeout, verwendet werden (pageLoadTimeout(Duration.ofSeconds(50))).

Nicht zu unterschätzen ist in den letzten Jahren der Fortschritt von Bots, mit denen sich Hacker Zugriff auf vertrauliche Informationen von Nutzern verschaffen möchten. Um das zu verhindern, greifen viele Websites auf das sogenannte Captcha zurück. Jeder kennt sie als „Wählen Sie alle Bilder aus auf denen eine Ampel zu sehen ist“. Um sicher zu gehen, dass sie nur durch menschliche Aktivität gelöst werden können, müssen diese Website-Komponenten zwangsläufig dynamisch sein. Da keine Bots dazu in der Lage sind diese Captchas zu lösen, heißt das unausweichlich aber auch, dass dies auch keine Testskripte der Welt erledigen können.

Hier haben Sie nun zwei Möglichkeiten: Schalten sie Captchas in ihrer Testumgebung ab oder fügen sie Waits in ihre Testskripte ein, die ihnen ein Zeitfenster geben um die Captchas manuell zu lösen.

Zum Schluss und nicht weniger wichtig, sollte erwähnt werden, dass Selenium aufgrund von gewissen Einschränkungen keine umfassenden Berichte erstellen kann. Dies sollte sie bei ihrer Testautomatisierung stets berücksichtigen und für die Erstellung und Pflege der Testberichte genügend Zeit einplanen.

Selenium wäre aber nicht Selenium, wenn es hier nicht auch Möglichkeiten gäbe, das Framework anzupassen. Es gibt eine Vielzahl von Tools, die für die Erstellung von Berichten in ihre Selenium-Automatisierung integriert werden können. Beispiele für solche Tools sind unter anderem TestNG, JUnit oder Allure.

Fazit


Selenium eröffnet Möglichkeiten für effiziente und zuverlässige Softwaretests. Durch seine vielseitigen Funktionen bietet es einen klaren Mehrwert für Entwickler und Tester. Nutzen sie die Vielseitigkeit von Selenium um die Qualität ihrer Software zu steigern.

Weitere Artikel