Klick-Klick und los?

Selenium IDE: Capture-and-Replay-Testing
Keine Kommentare

Selenium, in seiner (noch) aktuellen Version 3, besteht aus drei Bestandteilen: Selenium WebDriver, Selenium IDE und Selenium Grid. Während Selenium WebDriver im Grunde ein API bereitstellt, um programmatisch Tests zu schreiben, erlaubt Selenium Grid die Ausführung von mit Selenium WebDriver implementierten Tests auf mehreren Systemen und über mehrere Plattformen hinweg. Was aber ist nun die Selenium IDE?

Bei der Selenium IDE handelt es sich um ein Tool, welches man als Browser-Erweiterung installiert und das es dann ermöglicht, die Aktionen, die Benutzer*innen einer Webseite ausführen, aufzuzeichnen, um sie später erneut auszuführen. Der Begriff dafür lautet „Capture-and-Replay“-Tool, oder auch „Mitschnittwerkzeug“. Das ISTQB-Glossar definiert den Begriff „Mitschnittwerkzeug“ wie folgt:

„(Ein Mitschnittwerkzeug ist) Ein Werkzeug zur Unterstützung der Testausführung. Eingaben der Benutzer werden während der manuellen Testdurchführung zum Erzeugen von ausführ- und wiederholbarer Testskripten aufgezeichnet und verwendet. Solche Testwerkzeuge werden häufig zur Unterstützung automatisierter Regressionstests genutzt.“

Die Browsererweiterungen liegen für den Chrome- sowie den Firefox-Browser vor, entsprechende Downloadlinks finden Sie im chrome web store und auf der Firefox-ADD-ONS-Seite. Dieser Artikel bezieht sich auf die Erweiterung für Chrome, welche unter dem Link aus dem chrome web store heraus dem Browser hinzugefügt werden kann.

Hinweis: Dieser Artikel bezieht sich auf die Version 3.17.0 vom 17.03.2020. Eine neuere (stabile) Version stand zum Zeitpunkt des Schreibens dieser Zeilen nicht zur Verfügung. Im entsprechenden Github-Projekt ist ein Projekt „Selenium IDE 4“ hinterlegt, so dass davon auszugehen ist, dass ähnlich wie bei Selenium WebDriver und Selenium Grid an einer Version 4 gearbeitet wird. Zu Selenium Grid sehen Sie bitte auch Kasten 1.

Selenium GRID

Mit Selenium Grid wird Selenium WebDriver um die Möglichkeit erweitert, viele Testfälle auf vielen Umgebungen zur gleichen Zeit ausführen zu können, um so die Testausführungzeit deutlich zu verringern. Die Enge Verbundenheit zu Selenium WebDriver wird auch dadurch ausgedrückt, dass sich beide Teilprojekte eine ineinander verflochtene Dokumentation teilen, während Selenium IDE eine vollständig eigene erhalten hat.
Eben jene Dokumentation weist auch darauf hin, dass Selenium Grid in seiner Version 3 nicht mehr unterstützt wird, und das Selenium Projekt die Verwendung von Selenium Grid 4 nahelegt.

Selenium Grid 4 ist nicht nur eine neue Version von Grid 3, der Code wurde komplett neu geschrieben. Ein kurzer Artikel würde dieser mächtigen Technologie nicht gerecht werden, daher sei zunächst auf den JAXenter-Artikel von Sven Ruppert verwiesen. Obgleich dieser schon etwas betagt ist, beinhaltet er die grundlegenden Fakten.

Nach erfolgter Installation wird Selenium IDE den bereits vorhandenen Erweiterungen hinzugefügt und kann mit einem einfachen Klick gestartet werden, womit sich zugleich ein Fenster öffnet (Abb. 1).

Abb. 1: Begrüssung durch Selenium IDE nach Start der Chrome-Extension

Nach Auswahl der Option Record a new test in a new project gibt man zunächst den Namen des neuen Projekts ein und setzt dann die Basis-URL des Projekts – der Name des Projekts soll „jaxenter selenium ide“ lautet, die Base-Url http://www.jaxenter.de. Mit einem Klick auf Start recording wird diese URL nun auch direkt im Browser geöffnet, und man kann sofort mit der Aufzeichnung von User-Interaktionen beginnen. Zunächst belassen wir es bei ein paar Klicks auf die Navigation. Nach schließen des Browsers zeigt sich die Oberfläche von Selenium IDE wie in Abb. 2. Nach beenden der Aufnahme wird man gefragt, wie man den soeben aufgenommenen Testfall nennen möchte – die Wahl fällt auf den absolut sprechenden Namen test01.

Abb. 2: Die erste Testaufzeichnung

Man sieht in der Abbildung bereits, dass fünf Testschritte erzeugt aufgezeichnet worden sind:

  1. Öffne /, hiermit ist die Baseurl http://www.jaxenter.de gemeint
  2. Setze die Größe des Browserfensters auf 1680×1050
  3. „Klicke“ auf das Menu-Item 33 der Navigation, also den Navigationspunkt Artikel
  4. „Klicke“ auf das Menu-Item 36 der Navigation, also den Navigationspunkt Videos
  5. Schließe den Browser (und beende damit den Test)

Hinweis: Wenn Sie dieses Beispiel nachspielen, kann es, je nachdem, wie schnell Sie Ihre Mausklicks durchführen, sein, dass auch Mouse Hover etc. als einzelne Testschritte mit aufgezeichnet werden.

Durch einen Klick auf den Button Run current test kann man diesen Testfall auch noch mal ausführen lassen, was zur Logausgabe aus Abbildung 3 führt.

Jeder einzelne Testschritt besteht aus einem Command, einem Target und einem Value. Commands sind, wie der Name bereits andeutet, Befehle, die auf ein bestimmtes Target (Ziel) ausgeführt werden. Commands wie open, click oder close sind recht selbsterklärend. Selenium IDE bietet in einer Dropdown-Box eine umfangreiche Anzahl an weiteren Commands zur Verfügung, um Prüfungen etc. durchführen zu können. Targets bezeichnen die konkreten Webelemente einer Webseite, mit welchen im Rahmen eines Tests interagiert werden soll. Values beschreibt konkrete Werte, mit welchen z.B. ein Eingabefeld gefüllt werden kann.

Jetzt ist natürlich das Öffnen einer Website sowie das „klicken“ auf zwei Navigationslinks, verbunden mit einem abschließenden Schließen des Browsers, kein sehr aussagekräftiger Testfall.

Daher wird der Testfall um folgende Schritte erweitert (wobei der bisherige Schritt 5 nun an das Ende gestellt wird):

  1. Öffne das Sucheingabefeld
  2. Trage „andreas monschau“ in das Eingabefeld ein
  3. Bestätige die Eingabe
  4. Prüfe, ob der Text „Ihre Suche für „andreas monschau“ ergab 14 Treffer“ erscheint
  5. Schließe den Browser (und beende damit den Test)

Abb. 4: Erweiterter Testfall

Als Nebeneffekt dieser neuen Testschritte konnten wir nun die neuen Commands type, send keys sowie verify text kennenlernen. Zur Testdurchführung sind entsprechende Eingabewerte wie „andreas monschau“ notwendig, oder eben jener Text, dessen Existenz auf der zu untersuchenden Webseite zu prüfen ist (hier sei der Hinweis gestattet, dass zum Erscheinen dieses Online-Artikels die Anzahl der Treffer noch etwas gestiegen sein sollte). Selenium IDE hat auch das Betätigen der Return-Taste, nach erfolgter Eingabe des Suchwertes „andreas monschau“, korrekt interpretiert und kann dies bei erneutem Abspielen reproduzieren.

Speichert man das komplette Projekt, kommt in diesem Fall eine Datei mit dem Namen heraus. Es handelt sich hierbei um eine JSON-Datei, die man sich dann auch direkt ansehen kann (einen Auszug daraus finden Sie in Listing 1).

{
  "id": "818da13d-fe3d-43cb-859f-0fafb8de3be1",
  "version": "2.0",
  "name": "jaxenter selenium ide",
  "url": "https://jaxenter.de",
  "tests": [{
    "id": "ae1a295f-a249-4b85-9661-0fe1acf8a112",
    "name": "test01",
    "commands": [{
      "id": "f1e3dba5-9a3a-4a00-9642-235074645c45",
      "comment": "",
      "command": "open",
      "target": "/",
      "targets": [],
      "value": ""
    }, {
      "id": "9c2d27c2-7304-4f82-884b-fb74875c713b",
      "comment": "",
      "command": "click",
      "target": "css=#menu-item-33 > a",
      "targets": [
        ["css=#menu-item-33 > a", "css:finder"],
        ["xpath=//a[contains(text(),'Artikel')]", "xpath:link"],
        ["xpath=//li[@id='menu-item-33']/a", "xpath:idRelative"],
        ["xpath=//a[contains(@href, 'https://jaxenter.de/artikel')]", "xpath:href"],
        ["xpath=//li[3]/a", "xpath:position"]
      ],
      "value": ""
    }, 
(…)
{
      "id": "d3dc0332-bade-4f51-af95-922e0a8c805b",
      "comment": "",
      "command": "type",
      "target": "name=s",
      "targets": [
        ["name=s", "name"],
        ["css=.search-input", "css:finder"],
        ["xpath=//input[@name='s']", "xpath:attributes"],
        ["xpath=//input", "xpath:position"]
      ],
      "value": "andreas monschau"
    }
(…)

Selenium IDE bietet einen sehr großen Umfang an vordefinierten Commands, und viele davon kann man nicht per Aufnahme in seinen Testfall einbinden (z.B. store text, set speed oder wait for element editable). In solchen Fällen muss man selber Hand anlegen, um den gewünschten Effekt eines Testfalls zu erzielen.

Aus diesem recht pragmatischen Ansatz lässt sich bereits ableiten, dass das Erstellen von automatisierten Tests mit Hilfe von Selenium IDE insgesamt recht einfach und intuitiv erfolgen kann. Allerdings bietet Selenium IDE noch viel mehr:

  • Es existiert ein Command-Line-Runner, welcher es ermöglicht, die aufgezeichneten Testfälle auch gegen andere Browser oder gar auf einer Selenium-Grid-Umgebung auszuführen
  • Testfälle lassen sich in komplexe Testsuites zusammenfassen
  • Quelltexte von Testfällen lassen sich exportieren, z.B. als Java JUnit-Tests oder Python pytest
  • Es ist möglich, Selenium IDE mit Hilfe von Plug-ins deutlich zu erweitern
  • Selenium IDE bietet relativ komplexe Möglichkeiten, Bedingungen und Schleifen in die Tests mit einzubringen

Eine umfangreiche Beschäftigung mit diesen Themen würde den Umfang dieses Online-Artikels mehr als nur sprengen. Zu den Themenkomplexen Command-Line-Runner, Plug-ins und Export finden Sie Informationen unter den entsprechenden Links.

Bedingungen und Schleifen sind auf jeden Fall ein interessantes Thema, wenn man den Kontrollfluss oder die Abläufe innerhalb der Selenium IDE-Testfälle stärker steuern möchte. Verwendet werden hier als Schlüsselwörter klassische JavaScript-Ausdrücke. Es sei der Hinweis gestattet, das zumindest die Version von Selenium IDE, welche diesem Artikel zugrundeliegt, in der Hinsicht etwas Buggy ist, nicht jede Art von if-Statement wirklich funktioniert und die Fehlermeldungen sich durchaus zwischen den Plug-ins für den Firefox- und den Chrome-Browser unterscheiden.

WebDriver oder IDE?

Selenium IDE ist ein recht zugängliches Tool, auch Nicht-Entwickler*innen kommen damit zügig zu Ergebnissen. Kombiniert mit den Möglichkeiten der erweiterten Steuerung des Programmflusses sowie dem Command-Line-Runner könnte man glatt auf die Idee kommen, dass man Selenium WebDriver gar nicht benötigt, um Webanwendungen zu testen. Allerdings bedarf es einem Selenium WebDriver, um volle objektorientierte Konzepte und Frameworks nutzen zu können, nur hier kann man auch mit dem Page Object Pattern arbeiten, um gute und robuste Testfälle zu implementieren. Selenium IDE eignet sich wiederum sehr gut als Einstieg in die Thematik Browserautomatisierung (insbesondere für Personen mit nur rudimentären Programmierkenntnissen, die Hürde ist nicht hoch, im Vergleich zu Selenium WebDriver, wo man im Idealfall bereits eine Programmiersprache beherrscht. Es bietet sich ebenfalls an, Selenium IDE für das Prototyping von Testfällen zu verwenden. Beide Ansätze haben ihre Berechtigung.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Abonnieren
Benachrichtige mich bei
guest
0 Comments
Inline Feedbacks
View all comments
X
- Gib Deinen Standort ein -
- or -