Selenium 4 & Screenshots
Softwareentwicklungsprojekte leben vom Einsatz moderner Testwerkzeuge, welche die Projektbeteiligten bei ihrer Arbeit unterstützen. Selenium gibt es seit dem Jahr 2004 und wirkt ggf. etwas angestaubt, aber trotzdem ist es nicht aus der Mode. Mit Selenium 4 holt es zu den neuen Herausfordern auf. Mit dieser Blogreihe möchte ich zeigen, was Selenium 4 bringt und wie sich mit einfachen Mitteln wichtige Funktionen einbauen lassen wie z. B. Screenshots, Videos, Reports und Ansätze von KI. Dabei versuche ich, die Ansätze nach ihrem Mehrwert (The Good) und ihren Herausforderungen (The Bad) zu bewerten sowie ggf. nützliche Hinweise (… and the Useful) zu geben.
Jason Huggins begann bereits 2004 mit der Arbeit an Selenium als internem Projekt zum Testen von Webseiten. Mit der Zeit entwickelte sich Selenium zum führenden Werkzeug in vielen Entwicklungsprojekten oder diente als Grundlage für andere Testwerkzeuge. Aktuell fühlt sich das Framework schon etwas altbacken an, aber es besticht gegenüber seinen Herausforderern mit einer breiten Unterstützung von Sprachen (Ruby, Java, Python, C#, JavaScript) und Browsern (Firefox, Internet Explorer, Safari, Opera, Chrome, Edge u. a.).
Was ist neu in Selenium 4?
Die Version 4, die für 2020 angekündigt ist, versucht, Selenium nun in die Moderne zu holen. Dazu gehören folgende Neuerungen:
WebDriver API wird W3C Standard | Damit wird es nur noch einen WebDriver für alle Browser geben. |
Selenium4 IDE TNG | „TheNextGeneration“ Selenium IDE basiert auf Node JS und steht neben Firefox auch für Chrome bereit. Es lassen sich parallele Testläufe starten und es gibt erweiterte Testprotokollinformationen (Testergebnis, Laufzeit etc.). |
Verbessertes WebDriver Grid | Das Einrichten sowie die Administration und der Docker-Support wurden verbessert. |
Außerdem | Es gibt eine bessere UI und das Reporting / Logging wurden optimiert. |
Dokumentation | Mit Version 4 soll es eine ausführliche Dokumentation und neue Tutorials geben. |
Mit Version 4 setzt sich Selenium aus folgenden Teilen zusammen: dem Selenium WebDriver, der Selenium IDE und dem Selenium Grid. Der Selenium WebDriver ist eine Sammlung von verschiedenen Programmiersprachintegrationen, um Browser für eine Testautomatisierung anzusteuern. Die Selenium IDE ist ein Chrome oder Firefox Add-on, um direkt aus dem Browser mit der Testautomatisierung ohne Programmierkenntnisse zu starten und ermöglicht die Aufnahme und das Abspielen von Testfällen im Browser. Das Selenium Grid ermöglicht die gesteuerte und gleichzeitige Testdurchführung auf verschiedenen Maschinen und unterstützt die Administration unterschiedlicher Testumgebungen von einem zentralen Punkt aus. Damit lässt sich ein Testfall gegen verschiedene Browser- bzw. Betriebssystem-Kombinationen testen oder es lässt sich eine Liste von Testfällen skaliert auf mehreren Maschinen verteilt durchführen.
Selenium 4
The Good | The Bad | … and the Useful |
---|---|---|
WebDriver API → W3C Standardized Selenium 4 IDE TNG Improved WebDriver Grid Documentation | New challenger like cypress etc. Selenium 4 was announced for 2019 | Latest Selenium 4 Alpha version 4.0.0-alpha-5 |
Screenshots können beim Testen helfen!
Neuere Frameworks zur Testautomatisierung besitzen bereits eine Funktion zur Erzeugung von Screenshots. Doch mit ein paar Codezeilen lässt sich auch in Seleniumtests die Möglichkeit für die Ablage von Screenshots einbauen.
private void screenShot(RemoteWebDriver driver, String folder, String filename) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");
String timestamp = dateFormat.format(new Date());
try {
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File(folder + filename + "_" + timestamp + ".png"));
}
catch (IOException e) {
System.out.println(e.getMessage());
}
}
Dabei sollte man aber immer bei der Erzeugung und der Ablage der Datei auf den Einsatzzweck von Screenshots achten. Screenshots können zum einen dem Debugging dienen und auf Probleme hinweisen. Darum ist es sinnvoll, ggf. die Screenshots nur dann zu erzeugen, wenn Probleme auftreten. Nach diesem Ansatz kann man die Screenshot-Funktionalität um einen flexiblen und globalen Schalter erweitern, der sich je nach Notwendigkeit setzen lässt.
Zum anderen können Screenshots der Dokumentation der Testergebnisse dienen und in manchen Projekten sogar vorgeschrieben sein, da hier gesetzliche oder andere Vorgaben eingehalten werden müssen. Dann muss die Ablage der Screenshots nachvollziehbar sein und sich jede erzeugte Datei einen Testfall und dem zugehörigen Testlauf zuordnen lassen. Nach diesem Ansatz muss der Dateiname einen Verweis auf den Testfall und einen passenden Zeitstempel haben. Darüber hinaus muss auch das Ablageverzeichnis für diesen einen Testlauf erzeugt und benannt werden.
Screenshots
The Good | The Bad | … and the Useful |
---|---|---|
Ermöglicht den Nachweis des Ergebnisses des Testlaufs | Kann nur einen Moment darstellen | Kann auch zum „Debuggen“ genutzt werden |
Im meinem nächsten Beitrag erstellen wir ein Video der Testdurchführung.