Selenium Tests mit Edge

Selenium Framework bietet per sé sehr einfache Möglichkeit an die Tests mit unterschiedlichen Web Browsern durchzuführen und damit die Cross-Browser Test Strategie umzusetzen. Während die Einbindung von gängigen Browsern wie Chrome oder Firefox i.d.R. unproblematisch erfolgt, gilt es bei der Einbindung von Edge und Internet Explorer einige Besonderheiten zu beachten, die in diesem Blog zusammengefasst werden. Die Lösungen werden nachfolgend mit C# aufgezeigt. Die Vorgehensweise ist aber auch auf andere Sprachen wie Java übertragbar.

Selenium Tests mit Internet Explorer einrichten

Um die Selenium Tests mit Internet Explorer in C# in Visual Studio vorzubereiten, geht man wie üblich folgendermaßen vor:

  1. Selenium Web Driver für Internet Explorer über Nuget Paket Manager zum Testprojekt hinzufügen

    Selnium Interent Explorer Nuget Pakete

  2. Selenium WebDriver als Instanz von InternetExplorerDriver erstellen und in dem Testverlauf verwenden

IWebDriver driver = new InternetExplorerDriver(Environment.CurrentDirectory);

Leider scheitert die initiale Testdurchführung mit Internet Explorer beim ersten Mal, da hier noch einige Besonderheiten zu beachten gibt:

  1. IE Driver verweigert die Testdurchführung, falls in den Einstellungen von Internet Explorer das Zoom Level auf einen anderen Wert als 100% gesetzt ist.
  2. IE Driver verweigert die Testdurchführung, falls in den Sicherheitseinstellungen von Internet Explorer der „geschützter Modus“ nicht in allen Zonen gleich gesetzt ist.
  3. Die Testfälle, die in Chrome und Firefox stabil laufen, können in Internet Explorer aufgrund von anderem Timing- und Ladeverhalten häufig fehlschlagen, weil die gesuchten UI Elemente noch nicht verfügbar sind

Das Problem 1 und 2 lässt sich zwar auch manuell lösen, aber wenn man die Tests auf entfernten Systemen durchführen möchten, ist es empfehlenswert die erforderlichen Settings programmatisch im Test zu setzen. Dazu verwendet man das InternetExplorerOptions Objekt.

Die Driver-Instanziierung würde dann etwa so aussehen:

 
InternetExplorerOptions ieOpt = new InternetExplorerOptions();
ieOpt.IgnoreZoomLevel = true;
ieOpt.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
IWebDriver driver = new InternetExplorerDriver(Environment.CurrentDirectory, ieOpt);

Um das Problem 3 mit Timings zu lösen empfiehlt es sich an den problematischen Stellen die expliziten Waits von Selenium zusätzlich einzubauen. Das stabilisiert die Testdurchführung mit Internet Explorer und schadet der Testdurchführung mit Chrome und Firefox auch nicht.

Beispiel:

 
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(ExpectedConditions.ElementExists(By.Name("myTextbox"))); 

 

Selenium Tests mit Edge einrichten

Die Vorgehensweise bei der Einrichtung von Selenium Tests mit Edge in C# unterscheidet sich zurzeit noch von der oben skizzierten Vorgehensweise, da bis jetzt der Edge Driver leider noch nicht über ein Nuget Paket hinzugefügt werden kann.

Erschwerend kommt noch hinzu, dass die Vorgehensweise sich teilweise auch stark unterscheidet, abhängig davon welche Edge Version z.Z. auf dem Testsystem installiert ist.

Man unterscheidet zwischen:

  1. „Uralt Legacy“ Edge Version kleiner als 18
  2. „Legacy“ Edge Version zwischen 18 und 19
  3. „Neue“ Edge Version auf Chromium-Basis mit aktueller Version 79 oder höher

Edge Version ermitteln

Aus diesem Grund muss man zuerst herausfinden, welche Edge Version auf dem System installiert ist, um die richtige Vorgehensweise anwenden zu können.

Bei den beiden älteren Versionen 1 und 2 öffnet man dazu die Einstellungen von Edge und scrollt im Tab bis nach ganz unten, bis man die Information über die „EdgeHTML“ Version findet. Dieser Info entnimmt man, ob die Version 18,19 oder älter installiert ist.

Falls bereits die allerneuste Chromium-Edge Variante installiert ist, dann findet man die Versionsinformationen in Edge Einstellungen, im Menü „Hilfe und Support“ -> „Über Microsoft Edge“.

Weitere Vorgehensweise variiert je nach Version.

Edge Web Driver heruterladen und einbinden

1. Den „richtigen“ Edge Web Driver von Microsoft Web Seite herunterladen

a). Auf der Microsoft Web Seite findet man die Web Driver nur für Chromium oder uralte Legacy Edge Version. Dort sucht man den Driver, der exakt die gleiche Versionsnummer hat, wie Edge und lädt diesen herunter.

b). Wer dagegen eine „Legacy“ Edge Version hat, kann den Driver nicht selbst herunterladen, sondern muss dazu unter Windows 10 Einstellungen unter „Update und Sicherheit“ auf dem Reiter „Für Entwickler“ die Option „Entwickler Modus“ aktivieren.

Selenium WebDriver für Edge über Windows 10 Systemeinstellungen herunterladen

Daraufhin installiert Windows den zum Edge passenden Web Driver automatisch in das Systemverzeichnis „C:\Windows\System32“.

2. Edge Web Driver in Testprojekt einbinden

Der in Schritt 1 heruntergeladene Web Driver befindet sich entweder im Zip Ordner (Fall a) oder im Ordner „C:\Windows\System32“ (Fall b).

Aber auch hier gibt es Unterschiede: bei den beiden alten Legacy Edge Versionen heißt die Binary „MicrosoftWebDriver.exe“. Bei der neuen Chromium Variante heißt die Datei leider anders, nämlich „msedgedriver.exe“.

Sobald Sie die richtige Datei gefunden haben, kopieren Sie diese Datei in das Projektverzeichnis. Daraufhin zeigt Visual Studio die neue Datei automatisch in der Projektstruktur.

Für die neue Chromium Edge Version muss die Driver Datei manuell von „msedgedriver.exe“ auf die richtige Bezeichnung „MicrosoftWebDriver.exe“ umbenannt werden.

Nun müssen „nur“ noch die Eigenschaften der Driver Datei in Visual Studio Projekt Explorer bearbeitet werden, um sicherzustellen, dass beim Build Visual Studio die neue Binary Datei ebenfalls in das Ziel-Verzeichnis kopiert.

Dazu setzen sie die Eigenschaften

  • „Build Action“ auf „Content
  • „Copy to output directory“ auf „Always if newer“

3. Nachdem die Vorbereitungen abgeschlossen sind, kann man im letzten Schritt nun den Edge Driver instanziieren und in dem Testverlauf verwenden

 
IWebDriver driver = new EdgeDriver(Environment.CurrentDirectory); 

 

WebDriver Instanziierung abstrahieren

Um die gesamte Entscheidungslogik „wie der jeweilige WebDriver für unterschiedlichen Browser Typen und Versionen eingerichtet und instanziiert werden soll“ nur ein einziges Mal zentral für alle Tests bereitzustellen, empfiehlt es sich die oben beschriebene Logik in eine „WebDriverFactory“ Klasse auszulagern. Dadurch kann die Bereitstellung des passenden Web Drivers in jedem Test auf einen Einzeiler reduziert werden, etwa so:

 IWebDriver driver = new WebDriverFactory.CreateWebDriver(browserType); 

 

Alexander Heimlich on Linkedin
Alexander Heimlich
Redakteur auf Testautomtisierung.org
Geschäftsführer, Schulungsleiter bei SimplyTest GmbH, Nürnberg
www.simplytest.de
Passionierter Softwareentwickler und Testautomatisierungsverfechter mit langjähriger beruflicher Erfahrung als Softwareentwickler, Test Automation Manager, Teamleiter und Projektleiter
0 Kommentare

Dein Kommentar

An Diskussion beteiligen?
Hinterlasse uns Deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.