Effiziente Browser-Treiber Verwaltung mit Selenium und WebDriverManager
Bei der Durchführung von automatisierten Browser-Tests für Software-Applikationen ist der Einsatz von Selenium bei Software-Entwicklern weit verbreitet. Um mit dem gewünschten Browser interagieren zu können, benötigt Selenium einen Browser-Treiber. Die Version des Browser-Treibers muss zur Version des verwendeten Browsers passen.
Aktuelle Browserversionen: Wichtig, aber manchmal nervig
Browser werden aufgrund von Sicherheitslücken und Erweiterungen in der Regel automatisch über Betriebssystem-Updates aktualisiert. Für Browser wie Chrome ist auch nur die aktuellste Version verfügbar, und es kann nicht ohne Weiteres eine ältere Version genutzt werden. Damit steht man bei der Verwendung von Selenium vor der Herausforderung, dass auch die Version des Browser-Treibers ständig angepasst werden muss.
Abhängig von der Umgebung sind verschiedene Browser-Versionen im Einsatz. Werden automatisierte Tests in CI/CD-Pipelines wie GitLab ausgeführt, dann werden Tests oftmals über Docker-Images durchgeführt, die möglicherweise eine ältere Browser-Version nutzen als die auf dem Laptop des Entwicklers
In vielen Fällen wird Selenium durch Frameworks für eine einfachere Verwendung abstrahiert. Ein Beispiel hierfür ist das Geb Framework. Die Version des zu nutzenden Browser-Treibers muss hier jedoch ebenfalls definiert werden. Dies kann beispielsweise in der zugehörigen Konfigurations-Datei GebConfig.groovy von Geb erfolgen und wie folgt aussehen:
String chromeDriverVersion = "122.0.6261.94"
if (Platform.current.is(Platform.WINDOWS)) {
currentPlatformName = Platform.WINDOWS.name()
chromeDriverZipFileName = "win64/chromedriver-win64.zip"
chromeDriverSubpath = "chromedriver-win64"
chromeDriverExecFileName = "chromedriver.exe"
}
...
Wie dargestellt erfolgt in nachfolgenden Schritten die Erkennung des aktuellen Betriebssystems und der entsprechende Treiber wird aus dem Internet heruntergeladen. Solche Dateien müssen jedoch ebenfalls regelmäßig gepflegt werden, was umständlich ist und nicht selten zu unnötigen Commits führt.
Automatisches Browser-Treiber-Management mit Selenium Manager und WebDriverManager
Im Idealfall existiert eine Möglichkeit, die Version des Browsers durch ein Programm oder eine Bibliothek ermitteln zu lassen und den benötigten Treiber automatisch herunterzuladen und bereitzustellen. Mit dem Selenium Manager gibt es ein Kommandozeilenprogramm, das nach diesem Prinzip funktioniert. Nutzt man allerdings Selenium nicht direkt, sondern kapselt es durch ein darüber liegendes Framework, sind wiederum zusätzliche Software-Installationen auf allen Test-Systemen notwendig.
Läuft die Applikation und das Testing unter Java mit einem der Build-Werkzeuge Maven oder Gradle, gibt es eine weitere elegante Möglichkeit. Mit WebDriverManager steht eine Bibliothek zur Verfügung, die lediglich als Abhängigkeit im Build-Werkzeug eingebunden werden muss.
Mit dem folgenden einzeiligen Aufruf kann beispielsweise der Treiber für den Chrome-Browser zur Verfügung gestellt werden:
WebDriverManager.chromedriver().setup();
Das Herunterladen, Bereitstellen und Cachen des Treibers erfolgt automatisiert im Hintergrund. Für die gängigen Browser stehen entsprechende Initialisierungsmethoden bereit. Der Vorteil ist hier, dass keine weiteren Tools installiert und verwendet werden müssen. Es funktioniert "OutOfTheBox" nach dem Auschecken des Codes, sowohl auf den Entwickler-Rechnern als auch in CI/CD-Pipelines.
Weniger Fehler bei der Testkonfiguration
WebDriverManager bietet eine elegante Möglichkeit zur Lösung des Umgangs mit verschiedenen Browser-Treibern, indem es diese automatisch herunterlädt und bereitstellt, was die Testdurchführung vereinfacht. Bei unseren Projekten hat sich diese Lösung bewährt und spart die in der Vergangenheit teilweise zeitintensiven Fehlersuchen.