×
Selenium 4

Selenium 4: Was Sie wissen sollten



Nach fast 3 Jahren Entwicklungsarbeit wurde die nächste große Version von Selenium im Oktober 2021 veröffentlicht. Wir nehmen das zum Anlass, um uns die neuen Features anzuschauen und einen kleinen Blick in die Zukunft von Selenium zu werfen.

Eine kleine Geschichte über Selenium

Das Selenium Projekt begann 2004 als internes Tool, das dabei helfen sollte den Testprozess zu automatisieren. Ein paar Jahre später wurde Selenium nicht nur Open Source, sondern auch der de facto Standard für automatisiertes Testen von Webseiten. Mit dazu beigetragen hat auch die Unterstützung für alle großen Browser und Programmiersprachen. Selenium diente außerdem als Inspirationsquelle für das Test-Framework Appium, das sich auf mobile Anwendungen spezialisierte, die Syntax aus Selenium übernahm und mit Selenium Grid kompatibel ist.

Gleichzeitig wurde eine Initiative gestartet, welche das automatische Steuern von Browsern vereinheitlichen sollte. Heraus kam die W3C Webdriver Recommendation, die seitdem eine einheitliche Schnittstelle vorgibt. Selenium unterstützte das dazugehörige W3C Webdriver Protocol sehr früh, um vom bisher verwendeten JSON Wire Protocol schnell zu einem moderneren Standard zu wechseln. Im Dezember 2018 wurde die letzte Version von Selenium 3 veröffentlicht.

Selenium 3 vs. 4 - Die Unterschiede

Einer der wichtigsten architekturellen Änderungen ist die Abschaffung des JSON Wire Protocol zugunsten des W3C Webdriver Protocol. Dadurch wird Selenium 4 kompatibel mit dem W3C Webdriver Standard. Für die meisten Nutzer wird diese Änderung keine Auswirkungen haben, da alle Driver bereits das neue Protocol unterstützen und besonders alte Browser schon seit Selenium 3 nicht mehr unterstützt werden. Probleme könnten trotzdem auftreten, falls eine der Komponenten im Selenium Setup veraltet ist und die Nachrichten des W3C Protocol nicht korrekt verarbeitet. In einem solchen Fall sollte das Problem durch ein Update auf die neueste Version behoben werden.

Einige weitere große Änderungen betreffen das Selenium Grid. Der Quellcode wurde komplett neu geschrieben und die allgemeine Architektur wurde stark verändert. In früheren Versionen war der Hub eine einzige, große Server Anwendung, die sich um alle möglichen Operationen von Node Registrierung bis Session Scheduling kümmerte. In Selenium 4 wurde der Hub in unabhängige Komponenten aufgespalten, die getrennt voneinander laufen. Das neue Setup ist somit besser geeignet für moderne container-basierte Umgebungen wie beispielsweise Kubernetes. Außerdem kann das Grid eigenständig Docker Container starten, die eine spezielle Browserversion zum Testen beinhalten. Für Nutzer, die ein verteiltes Setup nicht benötigen, gibt es nach wie vor die Möglichkeit, den alten Hub zu starten. In dem Fall werden die Komponenten einfach alle auf derselben Maschine ausgeführt. Zu guter Letzt wurde auch die Benutzeroberfläche des Grids vollständig überarbeitet. Diese bietet nun mehr Information, insbesondere für Administratoren.

Selenium Grid UI
Die neue Benutzeroberfläche für Selenium Grid. Das Bild zeigt einen Node, der an das Grid angeschlossen ist.

Selenium 4 - Die Neuerungen

Nach knapp 3 Jahren Entwicklungszeit bringt Selenium 4 einige neue Funktionen und Verbesserungen. Der folgende Abschnitt behandelt die Wichtigsten davon. Für weitere Informationen empfehlen wir die offizielle Dokumentation.

Das wohl interessanteste Feature für den alltäglichen Gebrauch ist die Einführung der sogenannten Relative Locator. Diese können Elemente in räumlicher Nähe zu anderen Elementen lokalisieren. Betrachten wir das folgende Beispiel:

1
 RelativeLocator.with(By.tagName("input")).below(By.id("username"));

In diesem Fall würde das input Element ausgewählt werden, dass sich unter dem Element mit der ID ‘username’ befindet. Diese Methode eignet sich besonders in Fällen, in dem das gewünschte Ziel schwer zu lokalisieren ist, weil es beispielsweise keine ID besitzt, sich aber in räumlicher Nähe zu einem einfach zu identifizierenden Element befindet.

Ein weiteres großes Feature ist die Integration des Chrome DevTools Protocol (CDP). Es wurde ursprünglich von Google entwickelt und ist für fast alle großen Browser verfügbar. CDP kann verwendet werden, um beispielsweise Netzwerkanfragen zu imitieren oder Performance Metriken zu extrahieren. Diese Features können nun in bereits vorhandene Seleniumtests über die neue BiDirectional API integriert werden. Beispielsweise kann Selenium nun alle Javascript Exceptions sammeln, die während eines Tests geworfen werden:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Neuen Driver erstellen
ChromeDriver driver = new ChromeDriver();
//CDP Session instantiieren
DevTools devTools = driver.getDevTools();
devTools.createSession();

//Javascript Exception Listener registrieren
List<JavascriptException> jsExceptions = new ArrayList<>();
Consumer<JavascriptException> jsConsumer = jsExceptions::add;
devTools.getDomains().events().addJavascriptExceptionListener(jsConsumer);

//Test ausführen
driver.get("testfabrik.com");

//Falls Exceptions vorhanden, ausgeben.
if (!jsExceptions.isEmpty()){
  for (entry : jsExceptions){
    System.out.println(entry.getMessage());
  }
}
// Test ist fehlgeschlagen, falls Exceptions existieren.
assertTrue(jsExceptions.isEmpty());

Die Integration erlaubt es Testentwicklern mehr Informationen zu sammeln, nicht funktionale Eigenschaften leichter zu prüfen und Fehlerursachen schneller zu identifizieren. Zu Beachten ist, dass dieses Beispiel die CDP Implementierung direkt anspricht, da die entsprechende Funktion noch nicht in der BiDirectional API verfügbar ist. Ein Beispiel für ein verfügbares Feature wäre die Basic Auth Integration:

1
2
3
4
5
6
7
8
9
//Neuen Driver erstellen
ChromeDriver driver = new ChromeDriver();

//Basic Auth Daten registrieren
Predicate<URI> uriPredicate = uri -> uri.getHost().contains("examplepage.org");
((HasAuthentication) driver).register(uriPredicate, UsernameAndPassword.of("webmate", "password"));

//Webseite aufrufen
driver.get("https://examplepage.org/basicauth");

Die BiDirectional API sollte, wenn möglich, bevorzugt benutzt werden, da sie theoretisch eine stabilere Implementierung bietet.

Selenium 4.x - Die Zukunft

Die aktuelle Situation rund um Chrome Devtools Protocol und Safari Remote Web Inspector ist sehr ähnlich zur Situation vor der Einführung des W3C Webdriver Protocols. Deswegen kündigte das Selenium Projekt an, dass sie am neuen W3C WebDriver BiDi Protocol arbeiten. Das neue Protocol soll das bereits existierende W3C Webdriver Protocol, das auf einem command/Response Muster basiert, um einen Kanal erweitern, welchen der Browser benutzen kann, um Informationen zurück zum Client zu schicken. Das Ziel ist es eine stabilere Plattform für die Features von CDP und Co. zu bieten. Außerdem wird es dem Team erlauben die BiDirectional API weiter auszubauen.

Selenium 4 und webmate

Genau wie das Entwicklerteam von Selenium haben wir Selenium 4 als Anlass genommen, um den Teil unseren Codes zu überarbeiten, der sich um Selenium kümmert. Und genauso wie Selenium 4 ist unsere Unterstützung für Selenium 4 drop-in, benötigt also keine Anpassung auf der Seite unserer Nutzer. Lediglich die Selenium Bindings müssen auf die neueste Version aktualisiert werden. Darüber hinaus unterstützen wir alle neuen Features von Selenium 4, inklusive der BiDirectional API.

Wir sind außerdem dabei, neue Features zu entwickeln die auf den neuen Möglichkeiten von Selenium 4 basieren. Folgen Sie uns um weitere Informationen zu bekommen, sobald sie verfügbar sind. In der Zwischenzeit, probieren Sie doch unsere Selenium 4 Integration in webmate aus!

Wählen Sie Ihren Wunschtermin!

Zum Kalender