Selenium ist ein beliebtes Open-Source-Framework zur Automatisierung von Webapplikationen. Mit fast zwei Jahrzehnten am Markt gehört es zu den alten Hasen der Testautomatisierung. Im Vergleich zu vielen anderen Werkzeugen kann es in ganz verschiedenen Browsern und auf verschiedenen Plattformen eingesetzt werden. Doch damit längst nicht genug: Es unterstützt mehrere Programmiersprachen und kann unkompliziert mit Tools für CI/CD-Pipelines wie Jenkins kombiniert werden. All dies macht Selenium zweifelsohne zu den beliebtesten Lösungen für automatisierte UI-Tests.
Geschichte und Meilensteine
Die Ursprünge von Selenium führen uns ins Jahr 2004. Hier entwickelte Jason Huggins bei ThoughtWorks, einem großen Technologiekonzern, ein internes Tool zum Testen von Websites. Über die Jahre arbeiteten mehrere Mitarbeiter an der Lösung, ehe Paul Hammant die Technologie zu „Selenium Remote Control“ (RC) ausbaute. Parallel zu dieser Entwicklung tüftelte ein Herr namens Simon Stewart an einer automatisierten Browser-Steuerung, dem sog. „WebDriver“. Später entschied man sich, diese beiden Tools in eine Lösung zusammenzuführen – hiermit wurde schließlich aus Selenium RC das „Selenium 2.0“.
Wussten Sie, dass der Name Selenium auf eine humorvolle Äußerung von Huggins zurückgeht. In einer E-Mail machte er sich über einen Wettbewerber lustig, indem er darauf hinwies, dass eine Vergiftung durch Quecksilber mit Selen (engl. selenium) behandelt werden kann.
Folgende fünf Meilensteine sollten in der Geschichte von Selenium genannt werden:
- JavaScriptTestRunner: Jason Huggins entwickelt bei der Firma ThoughWorks eine erste Technologie, die er JavaScriptTestRunner nennt.
- Selenium RC: Erstmalige Einbindung eines Proxy-Servers in Selenium von Paul Hammant
- Selenium 2: Zusammenführung von Webdriver und Selenium RC zu Selenium 2.0, was die direkte Interaktion mit dem Browser möglich macht.
- Selenium 3: Ausbau des WebDriver, Selenium RC hingegen wird nun endgültig aus dem Betrieb genommen
- Aktueller Stand – Selenium 4: Verbesserung und Einführung neuer Funktionalitäten, Browser-APIs und eine überarbeitete Grid-Architektur.
So funktioniert Selenium und der Webdriver
Selenium kann die Steuerung des Internetbrowsers über Befehle automatisieren. So ermöglicht es beispielsweise das Aufrufen von Webanwendungen, die Interaktion mit Elementen, die Dateneingabe, das Ausführen von Buttonklicks sowie die Prüfung von Inhalten. Dabei werden die Objekte im DOM (Document Object Model) stets über XPath oder CSS-Attribute identifiziert. Um mit dynamischen Inhalten zu interagieren, können konkrete Wartezeiten bestimmt wird.
Sobald ein entwickeltes Programmierskripte ausgeführt wird, dient das sog. JSON Wire Protocol als Kommunikationsprotokoll zwischen dem gewählten Webdriver (z.B. Chrome Webdriver für Google Chrome) und den Testskripten. Genauer gesagt sendet das Testskript HTTP-Anfragen im JSON-Format an den Webdriver. In den Anfragen wird genau definiert, welche Aktionen im Browser getätigt werden sollen, also z.B. Texteingaben oder Buttonsklicks. Der Webdriver dient nun als Server, er empfängt die Anfragen und übersetzt diese für den Browser. Zusammengefasst kann der Webdriver also als ein Vermittler zwischen Browsern und Testskripten verstanden werden.
Aus diesen Komponenten setzt sich Selenium zusammen
Selenium selbst setzt sich aus mehreren Komponenten zusammen, unter anderem:
- Selenium WebDriver – die Hauptkomponente, welche mit dem Browser kommuniziert.
- Selenium Grid – Bietet die Möglichkeit, mehrere Tests in verschiedenen Browsern parallel auszuführen.
- Selenium IDE – Eine browserbasierte IDE für das schnelle Aufzeichnen und Abspielen von Tests.
Exemplarische Selenium WebDriver Befehle
Im Nachfolgenden sollen einige Selenium Webdriver Befehle vorgestellt werden:
- Find Element: Elemente auf der Website werden mit driver.find_element(…) gefunden.
- Click Element: Navigationsaktionen und Browser-Klicks werden mit element.click() ausgeführt.
- Send Keys: Mit element.send_keys(„..“) können Eingaben im Browser gemacht werden.
- Wait: Für Timing-Probleme und das Laden dynamischer Inhalte kann driver.wait() verwendet werden.
Einsatzgebiet und Testarten mit Selenium
Selenium wurde ursprünglich für die Testautomatisierung von Webanwendungen konzipiert, findet heute aber auch teils bei der Automatisierung von komplexen Geschäftsprozessen (RPA) sowie im Webscraping und dem Perfomance-Testing Anwendung.
Im Bereich der Testautomatisierung kann es vor allem für folgende Testarten und Strategien verwendet werden:
- UI-Tests – Testen einzelner Funktionalitäten auf der Oberfläche
- End-to-End-Tests – Überprüfung ganzer Benutzerabläufe über verschiedene Komponenten
- Regressionstests – Sicherstellen, dass Änderungen und Neuerung, z.B. im Rahmen eines neuen Releases, keine anderen Fehler verursachen.
- Integration mit CI/CD – Selenium kann mit CI/CD-Pipelines und Tools wie Jenkins integriert
Was spricht für Selenium
- Cross-Browser-Kompatibilität:
- Selenium kann mit unterschiedlichsten Browsern interagieren (z.B. Chrome, Firefox, Safari, Edge und Internet Explorer). Dadurch kann es bestens für Cross-Browser-Testing genutzt werden.
- Viele Programmiersprachen:
-
- Selenium kann mit verschiedenen Programmiersprachen wie Java, Javascript und Python genutzt werden. Somit ist es vielseitig einsetzbar und lässt sich in verschiedene Entwicklungsumgebungen integrieren.
- Integration mit Testframeworks:
-
- Selenium lässt sich gut mit verschiedenen Testframeworks wie JUnit, Mocha, WebdriverIO und Cucumber kombinieren. So können Test-Suiten geschaffen werden, die effizient organisiert und verwaltet werden können.
- Effizienter Webdriver:
-
- Selenium sorgt mit dem integrierten Webdriver für eine effiziente API zur Steuerung des Browsern (z. B. Dateneingabe, Browserklicks, Formulareingaben und Navigation).
- Parallele Tests und Headless Mode
-
- Durch o.g. Komponente Selenium Grid können Tests parallel auf mehreren Maschinen und Browsern ausgeführt werden. Gerade bei einer großen Anzahl an Tests bietet dies große Vorteile. Außerdem können Selenium-Tests im Headless Mode ausgeführt werden.
- Open Source und große Community
-
- Selenium ist kostenlos zugänglich und hat eine riesige Community auf der ganzen Welt. Auch auf knifflige Fragen findet man durch Dokumentationen, Tutorials und Facebook-Gruppen stets schnell eine Lösung.
Abschließende Worte
Selenium ist ein leistungsstarkes und flexibles Tool zur Testautomatisierung von Webapplikationen. Es kann nicht nur in vielen Browser, sondern mit verdienen Programmiersprachen und Testframeworks eingesetzt werden. Durch die Vielseitigkeit und der einfachen Integration in CI/CD-Pipelines trägt es maßgeblich zur Qualitätssicherung komplexer Software bei.
Weiterführende Informationen: https://www.selenium.dev/