Selenium-Tutorial: So nutzen Sie das Cross-Browser-Testing-Framework

In der heutigen Webentwicklung ist es von entscheidender Bedeutung, dass Sie eine Anwendung für die verschiedenen Displaygrößen der Besucher bzw. Nutzer aufbereiten. Der responsive Ansatz, bei dem sich das veröffentlichte Webprojekt automatisch an die technischen Voraussetzungen des jeweiligen Geräts anpasst, hat sich dabei als unangefochtene Standardlösung herauskristallisiert. Ebenso wichtig wie eine hohe Flexibilität in Sachen Displaygröße ist für eine moderne Website aber eine bestmögliche Browserkompatibilität: Für User sollte es nämlich keinen Unterschied spielen, ob sie eine Seite mit Firefox, Chrome, Safari oder einem anderen Webclient aufrufen.

Das sogenannte Cross-Browser-Testing spielt aus diesem Grund bei der Programmierung von Webprojekten seit Jahren eine wichtige Rolle. Eines der beliebtesten Tools für die Durchführung solcher Tests ist das von ThoughtWorks veröffentlichte Framework Selenium, das wir in diesem Tutorial genauer in den Blick nehmen.

Was ist Selenium bzw. Selenium WebDriver?

Um den Entwicklungsprozess einer Zeit- und Kosten-Applikation in Python zu optimieren, kreierte Jason Huggins 2004 mit dem JavaScriptTestRunner das Kernstück des heute als Selenium bekannten Web-Testing-Frameworks. Zunächst kam das Tool ausschließlich intern in der Software-Firma ThoughtWorks zum Einsatz, bei der Huggins zu diesem Zeitpunkt arbeitete. Nach seinem Wechsel zu Google (2007) trieb er dort die Weiterentwicklung und Fehlerausbesserung der Software voran, die mittlerweile quelloffen (Apache-2.0-Lizenz) und somit für die breite Masse verfügbar war. Infolge eines Zusammenschlusses mit der API WebDriver erhielt das Testing-Framework den bis heute aktuellen Namen Selenium bzw. Selenium WebDriver.

Die heutige Version von Selenium basiert ausschließlich auf HTML und JavaScript und erlaubt es Entwicklern, Interaktionen mit einer Webanwendung zu testen und aufzunehmen, um diese anschließend beliebig oft – und vollständig automatisiert – zu wiederholen. Die entscheidenden Komponenten, die diesen Testing-Prozess möglich machen, sind folgende:

  • Selenium Core: Das Kernmodul enthält die Basisfunktionalität des Frameworks, also u. a. den JavaScriptTestRunner sowie die grundlegende Testbefehls-API.
  • Selenium IDE: Bei Selenium IDE handelt es sich um die Entwicklungsumgebung des Testing-Frameworks, die u. a. als Basis der IDE-Erweiterung für Chrome und Firefox dient. Diese wird für das Aufnehmen und Abspielen von Tests benötigt.
  • Selenium WebDriver: WebDriver ist die entscheidende Schnittstelle für die Simulation von Nutzerinteraktionen in jedem beliebigen Browser – ob Firefox, Chrome, Edge, Safari oder Internet Explorer. Seit 2018 ist die API ein offizieller W3C-Standard.
  • Selenium Grid: Selenium Grid ist eine Erweiterung von WebDriver bzw. dessen Vorgänger Selenium Remote Control (RC), die das parallele Ausführen von Tests auf mehreren Servern ermöglicht. Auf diese Weise lässt sich die Testdauer erheblich verkürzen.
Zur Anzeige dieses Videos sind Cookies von Drittanbietern erforderlich. Ihre Cookie-Einstellungen können Sie hier aufrufen und ändern.

Wo kommt Selenium WebDriver zum Einsatz?

Selenium ist im Testing-Umfeld eine feste Größe und insbesondere als Grundgerüst verschiedenster Programme in diesem Spektrum gefragt. Zu den bekanntesten Beispielen zählt etwa das Ende-zu-Ende-Framework Protractor, das speziell für das Testen von Angular- und AngularJS-Applikationen entworfen wurde und zur Simulation von Nutzerinteraktionen auf die WebDriver-API zurückgreift. Auch die Testautomatisierungssoftware Appium, die für native und hybride Mobile Apps konzipiert ist, nutzt die standardisierte Schnittstelle, um einfach und bequem Tests in der favorisierten Programmiersprache durchführen zu können.

Auch der sehr bekannte, cloudbasierte Webservice BrowserStack setzt auf Selenium: Der in Indien entwickelte Dienst, der nach einer kostenfreien Testphase in verschiedenen kostenpflichtigen Abonnements genutzt werden kann, nutzt das Testing-Framework als Basis für seine automatisierten Desktop- und Mobile-Tests.

Hinweis

Als Open-Source-Software lässt sich Selenium bzw. Selenium WebDrive natürlich auch unabhängig von bereits existierenden Programmen wie den oben genannten Lösungen einsetzen. Mit den verschiedenen Komponenten, die mittlerweile in dem Framework kombiniert werden, ist dies – entsprechendes Know-how vorausgesetzt – problemlos möglich.

Selenium-WebDriver-Tutorial: So nutzen Sie das Framework für Ihre Webtests

Wer eigene Testfälle mit Selenium erstellen möchte, ohne von einem externen Service bzw. Software-Hersteller abhängig zu sein, benötigt hierfür keine speziellen Programmierkenntnisse. Browser-Testing mithilfe des Frameworks ist nämlich auch deshalb so unkompliziert, weil Sie die Testskripte in diversen Sprachen schreiben können – u. a. in JavaScript, Java, C#, Ruby und Python. Im nun folgenden Selenium-Tutorial sollen die Einrichtung und Nutzung des Frameworks exemplarisch am Beispiel von Python demonstriert werden.

Hinweis

Die nachfolgenden Schritte dieses Selenium-WebDriver-Tutorials setzen voraus, dass eine aktuelle Version von Python installiert ist.

Schritt 1: Installation von Selenium

Für den Einsatz von Selenium WebDriver stehen Clients sowie eine Reihe von Bibliotheken zur Verfügung, die zusammen als „Language Bindings“ (dt. „Sprachbindungen“) bezeichnet werden und die Basis des Frameworks bzw. des Testing-Verfahrens bilden. Sie müssen allerdings nur die Client-Treiber und Bibliotheken für die Sprache installieren, in der Sie Ihre Skripte schreiben möchten.

In unserem Selenium-WebDriver-Tutorial benötigen wir die Language Bindings für Python, die sich standardmäßig mit dem Python-Paketmanager pip und dem folgenden Befehl installieren lassen:

pip install selenium

Alternativ laden Sie das Source-Paket unter dem zuvor ausgezeichneten Link herunter, entpacken das tar.gz-Archiv und verwenden die setup.py-Datei, um die Installation durchzuführen. In diesem Fall lautet der erforderliche Befehl:

python setup.py install

Im zweiten Schritt gilt es, den Treiber des Browsers herunterzuladen und zu installieren, mit dem sich Selenium verbinden soll. Firefox setzt beispielsweise den Treiber geckodriver voraus, dessen offizielle Releases Sie in folgendem GitHub-Repository finden. Eine komplette Auflistung der Treiber für die wichtigsten Browser (Chrome, Edge, Internet Explorer, Safari etc.) finden Sie in den offiziellen Selenium-Online-Dokumentationen.

Hinweis

Wenn Sie Selenium per Remote-Verbindung verwenden möchten, müssen Sie außerdem die Selenium-Serverkomponente installieren. Entsprechende Installationspakete finden Sie auf der offiziellen Downloadseite des Frameworks (unter der Sparte „Selenium Server (Grid)“). Beachten Sie dabei, dass die Ausführung der Serveranwendung eine aktuelle Version der Java-Laufzeitumgebung (JRE) voraussetzt.

Schritt 2: Wahl der passenden Entwicklungsumgebung (IDE)

Nachdem Sie die Voraussetzungen geschaffen haben, um Selenium WebDriver zu nutzen, können Sie mit dem Schreiben von Testing-Skripten für Ihr Webprojekt beginnen. Zu diesem Zweck genügt prinzipiell der favorisierte Code-Editor – empfehlenswert ist in diesem Fall aber die Verwendung einer Python-IDE (bzw. einer Entwicklungsumgebung für die Sprache, mit der Sie arbeiten möchten), um Ihre Produktivität zu maximieren. Bekannte und beliebte Lösungen sind beispielsweise folgende Vertreter:

  • PyCharm: Die Python-IDE PyCharm erhalten Sie wahlweise in einer kostenfreien, quelloffenen Community- oder einer kostenpflichtigen Professional-Edition. Skripte für Selenium-Tests können Sie aber in jedem Fall mit beiden Varianten schreiben. Als Betriebssysteme werden Windows, Linux und macOS unterstützt.
  • PyDev: PyDev ist ein Python-Plug-in für die Entwicklungsumgebung Eclipse, die grundsätzlich für die Entwicklung von Java-Applikationen konzipiert ist. Die Erweiterung lässt sich entweder über die Projektseite oder direkt über den Update-Manager herunterladen und installieren. PyDev bzw. Eclipse läuft auf allen gängigen Windows-, macOS- und Linux-Systemen.

Schritt 3: Python-Skript für das Browser-Testing (Firefox) mit Selenium erstellen

Haben Sie die gewünschte Lösung parat, können Sie damit beginnen, individuelle Skripte für die Automatisierung von Browserinteraktionen unter Zuhilfenahme von Selenium-Klassen und -Funktionen zu schreiben. In diesem Selenium-Tutorial kreieren wir exemplarisch ein Python-Skript für Firefox, das – im Mozilla-Browser – automatisch die Suchmaschine Google aufruft, einen Suchbegriff eintippt und die Ergebnisse im Anschluss auswertet bzw. aufzeichnet. In Code-Form übertragen, sehen diese automatisierten Schritte wie folgt aus:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# Firefox-Sitzung erstellen
driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.maximize_window()

# Webanwendung aufrufen
driver.get("http://www.google.de")
# Textbox lokalisieren
search_field = driver.find_element_by_id("lst-ib")
search_field.clear()

# Suchbegriff eingeben und bestätigen
search_field.send_keys("Suchbegriff")
search_field.submit()

# Liste der Suchergebnisse abrufen, die infolge der Suche angezeigt werden
# unter Zuhilfenahme der Methode find_elements_by_class_name
lists= driver.find_elements_by_class_name("_Rm")

# Alle Elemente durchlaufen und individuellen Text wiedergeben
i=0
for listitem in lists:
  print (listitem.get_attribute("innerHTML"))
  i=i+1
  if(i>10):
    break

# Browserfenster schließen
driver.quit()

Die Bedeutung der einzelnen Komponenten des Skripts fasst die folgende Tabelle übersichtlich zusammen:

Codezeile(n) Bedeutung
from selenium import webdriverfrom selenium.webdriver.common.keys import Keys Zunächst wird das WebDriver-Modul geladen, um die Klassen und Methoden für den Support der verschiedenen Browser zu implementieren. Gleich im Anschluss lädt das Skript das Setup für die virtuelle Tastatur, um im späteren Verlauf Tastatureingaben simulieren zu können.
driver = webdriver.Firefox()driver.implicitly_wait(30)driver.maximize_window() Im zweiten Schritt wird eine Firefox-Instanz erstellt, die sich später mit Selenium-Befehlen steuern lässt. Für den Start des Browsers ist ein Timeout von 30 Sekunden vorgesehen, zudem soll das Browserfenster maximiert werden.
driver.get("http://www.google.de") Nun ruft das Skript die deutschsprachige Google-Seite auf, die hier als Basis für die automatisierten Nutzerinteraktionen dient.
search_field = driver.find_element_by_id("lst-ib")search_field.clear() Ist die Suchmaschine aufgerufen, sucht das Skript nach der Text-Box der Google-Suche, die durch das ID-Attribut "lst-ib" gekennzeichnet ist. Sobald es lokalisiert ist, wird das Suchfeld zunächst mit der clear()-Methode geleert.
search_field.send_keys("Suchbegriff")search_field.submit() Es folgt die Eingabe des Textes „Suchbegriff“ und deren Bestätigung per submit()-Methode.
lists= driver.find_elements_by_class_name("_Rm") Die einzelnen Suchresultate werden in der Folge als <a>-Elemente aufgelistet. Damit sie sich durch die Methode find_elements_by_class_name ansteuern lassen, wird diese an dieser Stelle im Skript eingeführt.
i=0for listitem in lists: print (listitem.get_attribute("innerHTML")) i=i+1 if(i>10): break Im letzten aktiven Schritt gibt das Skript die Liste der erzielten Treffer wieder, wobei es sich auf die ersten zehn Einträge mit <a>-Tag beschränkt.
driver.quit() Die abschließende Codezeile sorgt dafür, dass die Browser-Instanz wieder beendet wird.
Hinweis

Das in diesem Selenium-Tutorial verwendete Beispiel zeigt eindrucksvoll, wie gut das Framework für das Browser-Testing geeignet ist. Es zeigt aber auch, dass Selenium WebDrive ebenso interessant für das Web Scraping mit Python ist, das ebenfalls zu den vielfältigen Nutzungsmöglichkeiten der TestinGoogle Workspace zählt. Ausführlichere Informationen darüber, was es mit dieser Datensammlung aus dem Web auf sich hat, erhalten Sie in unserem Artikel „Was ist Web Scraping?“.

Selenium WebDriver: Nicht für alle Szenarien geeignet

Selenium bzw. Selenium WebDriver gibt Ihnen erstklassige Tools an die Hand, um wichtige Website-Daten zu sammeln und Nutzerinteraktionen zu simulieren. Allerdings ist auch das Open-Source-Framework nicht für alle Einsatzbereiche geeignet, wie die Entwickler in ihrer Aufstellung der „Worst Cases“ deutlich machen. Zu den Fällen bzw. Website-Inhalten, die Sie mit Selenium nicht testen bzw. erfassen können, zählen demnach folgende:

  • Captchas: Die bestens bekannten und weit verbreiteten Captchas sind speziell zum Schutz vor Bots und Spam entwickelt worden und damit auch nicht für Automatisierungsprozesse mit Selenium verfügbar. Die Eingabe-Tests sollten Sie daher während des Testings bzw. Scrapings deaktivieren oder vorübergehend durch ein alternatives Element ersetzen.
  • Datei-Downloads: Den Download von Dateien können Sie in Selenium-Instanzen zwar per simuliertem Link-Klick starten, den Fortschritt des Downloadprozesses zeigt die API aber nicht an.
  • HTTP-Antwort-Codes: Selenium birgt gewisse Schwächen im Umgang mit HTTP-Status-Codes. Diese Nachteile lassen sich allerdings im Bedarfsfall durch den Einsatz eines zusätzlichen Proxys ausgleichen.
  • Log-in bei Drittanbieter-Services: Ob Social-Media-Plattform, Cloud-Service oder E-Mail-Konto – eine Anmeldung bei Drittanbietern über eine Selenium-Sitzung ist nicht zu empfehlen. Zum einen stellen die Anbieter solcher Services eigene APIs zu Testzwecken zur Verfügung, zum anderen ist das Testing mit dem Framework in solchen Fällen sehr schwerfällig.
  • Performance-Testing: Für reine Leistungstests ist Selenium WebDrive nicht geeignet, da das Framework hierfür schlicht nicht konzipiert ist.