Selenium WebDriver Plugin

Aus expecco Wiki (Version 2.x)
Zur Navigation springen Zur Suche springen

Deutsche Version | English Version

Achtung[Bearbeiten]

Das Webtest Selenium WebDriver Plugin ersetzt das bisherige Selenium Web Test Plugin. Zur Automatisierung wird Selenium WebDriver verwendet (Driver für gängige Browser werden von uns mitgeliefert), der das bisher verwendete Selenium RC ersetzt. Dies wurde einerseits notwendig, da die SeleniumRC Schnittstelle von neuen Browsern nicht mehr unterstützt wird, andererseits, sinnvoll, da auch andere UI Technologien mit diesem Protokoll angesprochen werden können.

Sie können dieses Protokoll nur noch mit älteren Browsern verwenden, und wir empfehlen dringend, auf die neue Version umzusteigen.
Hinweise zur Migration älterer Testsuiten finden Sie unten.

Einleitung[Bearbeiten]

Mit dem Selenium WebDriver Plugin können Sie Tests von Webapplikationen erstellen oder auch diese automatisieren (*). Das Plugin kann (und wird üblicherweise) zusammen mit dem GUI-Browser verwendet werden, der das Erstellen von Tests oder automatisierten Browseraktionen unterstützt. Zudem ist damit das Aufzeichnen von Abläufen möglich.

(*) tatsächlich gibt es auch WebDriver-Schnittstellen um z.B. Windows-Apps oder OPS-Fenster zu manipulieren. Insofern gibt es für dieses Plugin weitere Einsatzbereiche.

Einstellungen[Bearbeiten]

Das Plugin verwendet die Java-Bridge und benötigt daher eine Java-Installation. Sie können diese in den Einstellungen unter Erweiterungen -> Java Bridge angeben. Wichtig ist hier das Feld Pfad zur Java-Installation, wo Sie ein JDK oder JRE angeben können. Ist nichts angegeben, versucht expecco java im PATH zu finden.

JDKPfadEinstellungen.png

Für das Selenium WebDriver Plugin selbst gibt es ebenfalls Einstellungsmöglichkeiten, die Sie unter Erweiterungen -> Webtest (Selenium WebDriver) finden. Hier können Sie zum Beispiel die Adresse zu einem remote laufenden Selenium-Server angeben oder eine andere Jar-Datei für Selenium angeben. Einstellungen zu den verschiedenen Browser-Typen teilen sich auf die Unterseiten Beliebte Browser und Andere Browser auf. Dort können Sie den Pfad zur Browser-Ausführungsdatei oder zum Webdriver angeben, der verwendet werden soll. Diese Felder können Sie alle leer lassen, expecco wird dann automatisch danach suchen.

Browser-Unterstützung[Bearbeiten]

Das Plugin unterstützt die Browser Chrome/Chromium, Edge, Firefox, Internet Explorer und Opera.
Safari unter OSX muss zumindest in der Version 10 vorliegen und OSX muss mindestens die El Capitan Version sein. Zur Kommunikation wird die WebDriver Schnittstelle verwendet; somit kann der getestete Browser sowohl lokal als auch auf einem entfernten Rechner laufen.

Da inzwischen eine Vielzahl von weiteren Browsen, Geräten und graphischen Oberflächen eine WebDriver Schnittstelle anbieten, können auch diese - z.T. mit eingeschränktem Funktionsumfang - über diese automatisiert werden. So gibt es z.B. auch Schnittstellen für Windows Mobilgeräte oder Desktopanwendungen.

WebDriver aktualisieren[Bearbeiten]

Für jeden Browsertyp gibt es einen Driver, über den das Starten und Ansteuern der Browserfenster funktioniert. Für die wichtigsten Browser finden sich im Lieferumfang aktuelle Driverversionen. Da die Browser fortlaufend aktualisiert werden, teilweise sogar automatisch, müssen Sie früher oder später neue Driverversionen herunterladen. Legen Sie diese dann in Ihrem expecco-Installationsverzeichnis bei den anderen Versionen ab, und zwar unter:

packages/exept/expecco/plugin/seleniumWebDriver/lib/XXX

(unter Microsoft Windows Betriebssystemen mit "\” anstatt "/"), wobei "XXX" für das Betriebssystem steht (Windows, Linux, OSX etc.).

Im Verbindungsdialog warnt expecco, wenn eine Driverversion nicht zur Browserversion passt. In manchen Fällen kann das aber auch nur daran liegen, dass diese Version zum Zeitpunkt der Auslieferung noch nicht bekannt war. Manche Kombinationen können trotz der Warnung funktioniert, aber das können wir im Einzelfall nicht garantieren.

Daher können Sie bei einer solchen Warnung immer die Option "Diese Warnung nicht mehr anzeigen" anwählen, damit diese Driver-Browser-Versionskombination in ihren Settings als "kompatibel" vermerkt wird, und in Zukunft nicht mehr gemeldet wird. Dies sollten Sie aber nur machen, wenn Sie sicher sind, dass Ihre Tests nach wie vor korrekt ausgeführt werden. Da wir hier selbst bisweilen auf Kompatibilitätsprobleme stoßen, und nicht immer gleich klar ist, woran es liegt, empfehlen wir aber den Driver zu aktualisieren.

Für Chrome und Microsoft Edge, bei denen es für jede neue Browserversion auch eine neue Driverversion gibt, finden Sie im Verbindungsdialog einen Button, um mit expecco die passende Version herunterzuladen.

Neuere Versionen der Driver bekommen Sie an folgenden Adressen:

Chrome/Chromium ChromeDriver
Edge Microsoft WebDriver
Firefox GeckoDriver
Internet Explorer IEDriverServer
Opera OperaDriver
Safari Safari Support

Laden Sie sich eine passende Version herunter und legen Sie sie im oben genannten Verzeichnis an der entsprechenden Stelle ab. Expecco wird sie dann finden und verwenden. Alternativ können Sie auch in expecco den Pfad zu einem Driver angeben, entweder im Verbindungseditor oder in den Plugin-Einstellungen.

Bulb.pngBitte verifizieren Sie, daß die Version des Drivers kompatibel ist mit der des Browsers. Im Zweifel suchen Sie nach der Versionshistorie (z.B. für Chrome: https://chromedriver.storage.googleapis.com/2.25/notes.txt).

Bulb.pngFür den Internet Explorer ist zu beachten, dass der geschützte Modus für alle Zonen gleich eingestellt sein muss, damit eine Verbindung möglich ist. (im Internet Explorer: "Einstellungen" - "Internetoptionen" - "Sicherheit" öffnen, und bei allen 4 Zonen "geschützter" Bereich gleich einstellen; ansonsten kommen beim Verbindungsaufbau Fehler- und Warndialoge). Siehe außerdem die erforderliche Konfiguration zur Verwendung des InternetExplorerDrivers.

Bulb.pngDas Plugin verwendet für einige Funktionen JavaScript. Stellen Sie daher sicher, dass die Ausführung von JavaScript im verwendeten Browser erlaubt ist, insbesondere wenn Sie den GUI-Browser oder den Recorder verwenden wollen. Das Ausführen von Tests ist auch ohne JavaScript möglich, solange keine Aktionen verwendet werden, welche JavaScript benötigen oder explizit ausführen.
Sollten Sie einen Fehler der Art "org.openqa.selenium.JavascriptException: Error executing JavaScript" bekommen, stellen Sie sicher, dass die Ausführung von JavaScript im verwendeten Browser erlaubt ist und Browser- und zugehörige WebDriver-Version kompatibel sind.

Headless Browser[Bearbeiten]

Mit "Headless" bezeichnet man eine Anwendung, welche ohne Bedienoberfläche abläuft. Einige der Browser unterstützen einen "headless" Modus, bei dem kein Browserfenster angezeigt wird. Der Browser operiert dabei in einem "unsichtbaren Fenster" führt aber alle Operationen aus, und liefert auch die selbe Elementhierarchie. Bei einigen Browsern sind allerdings die Screenshot (Bild vom Fenster bzw. von Elementen) eingeschränkt bzw. gar nicht verfügbar.
Den "headless" Modus können Sie beim Verbindungsaufbau in den "Advanced Settings" angeben.

HTML Unit Browser[Bearbeiten]

Bei diesem "Pseudobrowser" handelt es sich um eine weitere "headless" Variante, welche ganz ohne Renderengine operiert, und lediglich die Elementhierarchie sowie Javascript unterstützt. Sein Verhalten kann stark von dem "echter" Browser abweichen.

Diesen Browsertyp können Sie verwenden, wenn ihr Test das Verhalten des Webservices (also der Servierseite) betrifft, und nicht das Verhalten der Anwendung im Browser (End-User-Experience) im Fokus hat. Zum Beispiel kann der "HTML Unit Browser" zum Generieren von Last oder gleichzeitigen Aktionen gegenüber dem Server dienen. Da sich dieser Browser im Verhalten z.T. stark von dem echter Browser unterscheidet sollte er nur (wenn überhaupt) in besonderen Fällen verwendet werden.

Schneller Einstieg[Bearbeiten]

Browser öffnen / verbinden[Bearbeiten]

  • Starten Sie expecco
  • Klicken Sie auf "Neue Testsuite"
  • Klicken Sie auf das GUI-Browser Symbol (GUIBrowser.png)
  • Es erscheint der GUI-Browser in einem neuen Reiter
  • Klicken Sie auf "Verbinden" und wählen Sie "Webtest (Selenium WebDriver)" aus. Dann erscheint der Verbindungsdialog (Details siehe unten)
  • Im Verbindungsdialog geben Sie die zu testende Webseite ein (z.B. "http://www.myHost.com") und wählen den Browsertyp (z.B. "chrome" oder "firefox") aus
  • Klicken Sie auf "Verbinden"
  • Ein Browser wird nun automatisch gestartet, und die Seite angezeigt.
  • Sobald die Verbindung steht, wird im GUIBrowser die Seitenstruktur als Baum angezeigt, und im rechten Diagramm-Fenster erscheint ein passender Verbindungsbaustein. Dieser wird nicht automatisch aufgezeichnet, da man diesen normalerweise nicht in jeder aufgezeichneten Sequenz haben will (mehr dazu unten).

Recording aufnehmen[Bearbeiten]

  • Klicken Sie auf das Recording Symbol im GUI-Browser.

Recording Start.png

  • Ein Recorderfenster erscheint (eine Beschreibung der Bedienelemente finden Sie unten)
  • Sie zeichnen nun direkt im Rekorder auf.
  • Klicks werden je nach Einstellung als Klick, Mausbewegung, Drag&Drop etc. aufgezeichnet.
    Während der Aufzeichnung können Sie zwischen diesen Werkzeugen wechseln:

Recorder Werkzeuge.png

  • die aufgezeichneten Aktionen werden im Tab "Aufgezeichnete Sequenz" dargestellt. Sie können dort noch bearbeitet werden.
  • Zum Beenden der Aufzeichnung klicken Sie entweder auf den "Stop Recording" Knopf im GUI Browser, oder schließen das Rekorderzenster. Es ist auch möglich, das Aufzeichnen temporär zu Pausieren, indem sie im Rekorder auf den "Aufnahme"-Knopf oben links drücken.
  • Nach dem Aufzeichnen können sie die Sequenz un ihre Testsuite als Testfall oder Teilsequenz übernehmen.

Aufgezeichnete Aktion wiedergeben[Bearbeiten]

  • Im Reiter "Aufgezeichnete Sequenz" kann die aktuelle Aufzeichnung sofort wiedergegeben werden ("Play"-Knopf drücken)
    Beachten Sie, daß ihre Webseite üblicherweise im gleichen Zustand sein sollte - gegebenenfalls sollten Sie also den "Back"-Knopf oder eine andere Navigation anwenden, um dies sicher zu stellen.
  • Die Sequenz kann bearbeitet werden. Dazu können entweder weitere Aktionen aufgenommen werden, oder zusätzliche Aktionen entweder via Drag&Drop oder über das Kontextmenü (bzw. <CTRL-N) angelegt werden. Häufig werden zusätzliche Delay- oder Verifikations-Bausteine benötigt, die sie hiermit an geeigneter Stelle einfügen können.

Verbindungsaufbau[Bearbeiten]

Verbindungseditor[Bearbeiten]

Mit dem Verbindungseditor werden Verbindungen definiert, geändert und aufgebaut. Sie erreichen ihn, indem Sie den GUI-Browser öffnen und dort auf "Verbinden" klicken und dann "Selenium Testing (WebDriver)" auswählen.

SeleniumWebDriverConnectDialog.png

  1. Einstellungen aus Anhang laden: Öffnet einen Anhang im expecco Projekt mit Verbindungseinstellunge. Diese Einstellungen werden in den Editor übernommen. Bereits getätigte Eingaben ohne Konflikt bleiben dabei erhalten.
  2. Einstellungen aus Datei: Öffnet eine gespeicherte Einstellungsdatei (*.csf). Diese Einstellungen werden in den Editor übernommen. Bereits getätigte Eingaben ohne Konflikt bleiben dabei erhalten.
  3. Einstellungen in Anhang speichern: Hier können Sie die eingetragenen Einstellungen als Anhang im expecco-Projekt anlegen.
  4. Einstellungen in JSON-Anhang speichern: Hier können Sie die eingetragenen Einstellungen im JSON-Format als Anhang im expecco-Projekt anlegen.
  5. Einstellungen in Datei speichern: Hier können Sie die eingetragenen Einstellungen in eine Datei (*.csf) speichern.
  6. Versionsinfo: Zeigt ein Fenster mit den verwendeten Versionen des Selenium-Servers, des ausgewählten Browser und dessen Driver an.
  7. Online-Dokumentation: Öffnet diese Online-Dokumentation.
  8. Verbindungsname: Tragen Sie hier den Namen ein, unter dem die Verbindung im GUI-Browser angezeigt werden soll. (Optional)
  9. Browsertyp: Wählen Sie hier aus, welchen Browser Sie verwenden möchten. Stellen Sie sicher, dass dieser installiert ist und die Version des verwendeten Drivers zur Browserversion passt.
  10. URL: Tragen Sie hier die URL ein, die zu Beginn aufgerufen werden soll. Sie können das Feld auch frei lassen, dann wird ein leeres Browser-Fenster geöffnet. Um eine lokale Datei zu öffnen, verwenden Sie das Schema "file://", z.B. "file:///C:/Users/admin/Desktop/index.html".
  11. Erweiterte Ansicht: Wechselt zur Ansicht für die Eingabe von erweiterten Einstellungen.
  12. Informationen zum gewählten Browser: Hier wird der ausgewählte Browsertyp kurz vorgestellt.
  13. Informationen zu den Einstellungen: Hier wird angezeigt, welche Selenium-, Browser- und Driver-Version mit den aktuellen Einstellungen verwendet wird. Falls Sie erweiterten Einstellungen gesetzt haben, werden diese hier ebenfalls aufgelistet.

Warnung über mögliche Inkompatibilität[Bearbeiten]

Manche Browser benötigen einen versionsspezifischen Webdriver, da die verwendeten Kommunikationsprotokolle unterschiedlich sein können.

Da regelmässig neue Browserversionen erscheinen, und damit einhergehend auch neue Versionen des zug. Webdrivers benötigt werden, kann. es sein, dass die mit expecco mitgelieferten Webdriver nicht mehr zur aktuellen Browserversion passen. Dies trat in der Vergangenheit insbes. beim Chromebrowser mehrfach auf.

Um auf eventuelle Probleme hinzuweisen hält expecco intern eine Liste von Paaren der von exept bereits getesteten Browser- zu Webdriverversion. Falls ihr Browser aktueller ist, und nicht in der Liste enthalten ist, erscheint eine Warnung im Infobereich.

Diese erscheint nur zu Ihrer Information - in den meisten Fällen funktioniert die Interaktion mit dem Browser auch dann. Allerdings ist es in jedem Fall sinnvoll, den Driver zu aktualisieren, um solche Probleme auszuschliessen. Wenn die Kombination ohne Probleme läuft, ist es möglich, die aktuelle Kombination in die Liste einzutragen (drücken Sie dazu auf "Diese Kombination ist in Ordnung"). Dann erschient der Warndialog nicht mehr.

Erweiterte Einstellungen[Bearbeiten]

Neben dem zu verwendenden Browser und der Start-URL kann man noch weitere Einstellungen für eine Verbindung vornehmen. Wechseln Sie dazu im Verbindungsmenü die Ansicht über den entsprechenden Menü-Eintrag. Je nachdem, welchen Browsertypen Sie ausgewählt haben, bekommen Sie andere Eingabefelder.

  • Remote Server: Falls der Browser auf einem entfernten Rechner gestartet werden soll, starten Sie dort einen Selenium-Server und geben Sie dessen Adresse in diesem Feld an. Natürlich können Sie auch eine lokale Adresse angeben, wenn nicht automatisch ein Selenium-Server gestartet werden soll. Lesen Sie hierzu auch den nächsten Abschnitt Remote-Verbindungen.
  • Binary: Geben Sie den Pfad zum Binary des ausgewählten Browsers an, wenn dieser nicht automatisch von Selenium gefunden wird oder Sie eine weitere Version installiert haben.
  • Driver: Zu jedem Browser wird ein spezieller Driver zur Automatisierung benötigt. Für neue Versionen des Browsers braucht man häufig auch eine neue Version des entsprechenden Drivers. Wenn Sie nicht den von expecco installierten Driver verwenden wollen, geben Sie hier einen entsprechenden Pfad an.
  • Firefox Profile: Für Firefox gibt es zusätzlich die Möglichkeit, ein Profil bzw. Template anzugeben, das spezifische Einstellungen enthält. Wenn keines angegeben wird, wird für jede Verbindung ein neues, leeres Profil angelegt.
  • Capabilities: Für Selenium-Verbindungen sind einige Capabilities definiert, mit denen sich Verbindungs-Eigenschaften oder auch das Browserverhalten festlegen lassen.

Solche Capabilities können Sie sie in diesem Feld angeben. Schreiben Sie dazu <capability name>: <value> oder <capability name> = <value>; jeweils ein Eintrag pro Zeile. Außerdem können Sie hier auch Eigenschaften für den Firefox-Browser setzen. Die Eingabe hierfür erfolgt wie für die Capabilities, nur dass sie dem Namen der Eigenschaft ein $ voranstellen müssen.

Angegebene Capabilities werden durch die Methode setCapability() gesetzt. Insbesondere bei der Verwendung von Chrome gibt es einige Einstellungsoptionen, die sich nicht mit dieser Methode setzen lassen, sondern beispielsweise über setExperimentalOption() angegeben werden müssen. Zu diesem Zweck haben Sie außerdem die Möglichkeit, in diesem Feld einen Methodenaufruf mit Werten anzugeben. Diese Methode wird dann auf das entsprechende Options- bzw. Capabilities-Objekt angewandt. Um die Struktur der Eingabe von normalen Capabilities beizubehalten, müssen Sie am Ende noch : oder = setzen, aber keinen Wert danach. Beispiel: setExperimentalOption(“useAutomationExtension”, false)=

Lokale-Verbindungen[Bearbeiten]

Um einen Browser auf ihrer lokalen Maschine zu starten, werden lediglich die Felder "URL" sowie "Browsertyp" benötigt. Als Voreinstellung für den Browser wird "chrome" erscheinen.

Remote-Verbindungen[Bearbeiten]

Um einen Browser auf einem entfernten Rechner zu starten, müssen Sie zunächst den Selenium-Server und die benötigten Driver auf diesen Rechner kopieren. Auf dem Zielrechner muss Java installiert sein. Sie finden die Dateien in Ihrer expecco-Installation unter "packages/exept/expecco/plugin/seleniumWebDriver/lib". Sie können sich auch von Selenium eine aktuelle Version herunterladen.
Starten Sie dann den Selenium-Sever (auf dem entfernten Rechner) mit:

java -jar selenium-server-standalone-3.141.59.jar

(die Versionsnummer wird in Ihren Fall eine andere sein)

Standardmäßig wird der Server dann auf dem Port 4444 Verbindungen annehmen. Um einen anderen Port zu verwenden, geben Sie diesen auf der Kommandozeile mit "-port <nr>" an.
Um von expecco eine Verbindung über diesen Server herzustellen, geben Sie beim Verbindungsaufbau als Remote-Server

<Server-Adresse>:4444/wd/hub

an.

Das Starten des Selenium-Servers bzw. die Verbindung muss eventuell von der Firewall zugelassen werden.

Falls der Server beim Verbinden die jeweiligen Driver nicht finden, legen Sie diese ins selbe Verzeichnis, in dem Sie den Server starten, oder fügen Sie das Verzeichnis in dem der Driver liegt zum Pfad hinzu. Beachten Sie dabei, dass expecco verschiedene Versionen eines Driver-Typs mitliefert und diese durch einen Namenszusatz unterscheidet. Aufgrund dieser Zusätze erkennt der Server die Dateien aber häufig nicht.

Für neue Versionen von Microsoft Edge, die Chromium basieren, starten Sie anstatt eines Selenium-Servers direkt den MSEdgeDriver ("msedgedriver.exe") in der Version, die zur Edge-Version auf diesem Rechner passt.

 msedgedriver.exe [--port=9515]

Wenn Sie keine Portnummer angeben, wird der Service auf dem Port 9515 gestartet. Geben Sie dann beim Verbindungsaufbau in expecco als Remote-Server die Adresse

<Server-Adresse>:9515

an. Die Erweiterung "/wd/hub" ist hier nicht erforderlich.

Verbindungsbausteine[Bearbeiten]

Der Verbindungsaufbau, welcher im GUI Browser interaktiv erfolgt, muss natürlich bei einem automatisierten Ablauf über einen Aktionsbaustein erfolgen. Dazu gibt es in der SeleniumWebDriverLibrary im Ordner "Connection" verschiedene Bausteine, welche die Verbindungsparameter von verschiedenen Quellen erhalten:

  • Connect
    Dieser Baustein erhält die Verbindungsparameter über Eingangspins
  • Connect from File
    Hier werden die Einstellungen aus einer Datei (Anhang) gelesen (typischerweise im JSON Format)
  • Connect from Spec
    Die Verbindungsparameter werden in einem Dictionaryobjekt geliefert
  • Reuse or Start Connection
    Im Gegensatz zu obigen Bausteinen, welche immer eine neue Browserverbindung aufbauen (i.e. ein neues Browserfenster öffnen), wird dieser Baustein zunächst prüfen, ob bereits eine Verbindung besteht, und diese gegebenenfalls wiederverwenden. Dieser Baustein kann daher mehrfach (i.e. zu Beginn von Teilsequenzen) platziert werden, und damit die Teilsequenzen sowohl innerhalb eines komplexeren Gesamttests als auch "stand-alone", d.h. einzeln ausgeführt werden.

Alle "Connect" Bausteine benötigen die Angabe eines "Verbindungsnamens". Dieser hat die Aufgabe, die Verbindung im weiteren Testverlauf zu identifizieren, wenn zwischen mehreren Verbindungen gewechselt wird, und zum Abbauen der Verbindung.

Wenn Sie im GUI Browser im Elementbaum auf eine Verbindung klicken, erscheint in der rechten "Test" Kachel ein Connect Baustein mit entsprechend vorgelegten Parametern. Diesen können Sie bei Bedarf gleich in die Rekordersequenz übertragen, oder (besser) als separate Aktion speichern (es ist sinnvoll, den Verbindungsaufbau von den aufgezeichneten Teilsequenzen zu trennen; damit haben Sie es später leichter, andere Browser zu verwenden, die Parameter der Verbindung zu ändern und auch neue Teilsequenzen aufzuzeichnen oder zu modifizieren.

Verbindungen mit komplexen Einstellungen werden typischerweise im Verbindungsdialog angelegt, und die Einstellungen von dort über die Menüfunktion "Sichern in Anhang/Datei" in einer Datei gesichert. So können Sie verschiedene Konfigurationen in einzelnen Dateianhängen in ihrer Testsuite oder auch außerhalb aufbewahren. Zum Verbinden verwenden Sie dann den Aktionsbaustein "[Connect From File]".

Plugin-Einstellungen[Bearbeiten]

Wenn Sie eine bestimmte Browser-Installationen oder Driver standardmäßig als Voreinstellung verwenden möchten, können Sie diese in den Einstellungen des Plugins eintragen. Sie finden sie über das Menü unter dem Punkt "Extras" → "Einstellungen" und dort unter "Erweiterungen" → "Webtest (Selenium WebDriver)". Einstellungen für spezifische Browser finden Sie unter den Unterpunkten "Beliebteste Browser" bzw. "Andere Browser". Die dortigen Einstellungen gelten als Voreinstellung für jede Verbindung, es sei denn in einer konkreten Verbindungseinstellungen ist etwas anderes angegeben.

Ausführungsverzögerung für Chrome[Bearbeiten]

In manchen Fällen kann es bei Verwendung des Chrome-Browsers vorkommen, dass Bausteine mit Element-Aktionen, beispielsweise ein Klick, im Test erfolgreich durchlaufen, die eigentliche Aktion aber gar nicht ausgeführt wurde. Dies ist ein bekannter Fehler [1], [2], der von Selenium bzw. chromedriver behoben werden muss.

Der Fehler lässt sich verhindern, indem entweder der Klick über JavaScript aufgerufen wird (setzen Sie dazu im Klick-Baustein invokeDirectly auf true ) oder vor der Aktion kurz gewartet wird. Die Ausführung über JavaScript hat den Nachteil, dass sie weniger nah am Klick eines echten Benutzers ist; beispielsweise funktionieren Klicks auf Elemente auch dann, wenn sie von anderen Elementen verdeckt werden (was bei einem "normalen"Klick nicht geht).

Generell warten die Bausteine mit Element-Aktionen automatisch, bis das entsprechende Element verfügbar ist (existiert). In den hier beschriebenen Fällen reicht das aber nicht aus. Deshalb finden Sie in den Plugin-Einstellungen für Chrome die Einstellung "Ausführungsverzögerung". Bei der Ausführung wird dann zwischen den Aktionen entsprechend lange gewartet. Falls bei Ihnen der beschriebene Fehler eintritt, können Sie diesen Wert erhöhen. Ein größerer Wert hat natürlich Auswirkung auf die Gesamtlaufzeit.

Recorder[Bearbeiten]

Die folgende Beschreibung des Recorders gilt prinzipiell für alle von expecco unterstützten GUI Technologien. Verhalten und Bedienung sind bis auf kleine technologiebedingte Unterschiede für alle gleich.

Besteht im GUI-Browser eine Verbindung mit einem Browserfenster, kann der integrierte Recorder verwendet werden, um einen Testabschnitt aufzunehmen. Sie starten den Recorder, indem Sie im GUI-Browser die entsprechende Verbindung auswählen und dann auf den Aufnahme-Knopf klicken. Für den Recorder öffnet sich ein neues Fenster. Für jeden Klick im Fenster wird eine Aktion aufgezeichnet. Weitere Aktionen stehen über das Menü zur Verfügung. Die aufgezeichneten Aktionen werden im Arbeitsbereich des GUI-Browsers angelegt. Daher ist es möglich, das Aufgenommene parallel zu editieren.

Allgemeine Aktionen finden Sie entweder direkt in der Menüleiste oder dort im Browser-Werkzeuge-Menü (s.u.). Um Aktionen auf Elemente aufzuzeichen, ändern Sie entweder die Auswahl des Element-Werkzeugs in der Menüleiste (s.u.) und klicken dann auf das Element oder wählen Sie die entsprechende Aktion aus dem Kontextmenü durch einen Rechtsklick auf das entsprechende Element aus. Für Texteingabe ist es zudem möglich, den Cursor über dem Element zu platzieren und den Text einzugeben. Dabei öffnet sich der Eingabedialog für diese Aktion. Auf diese Weise ist es ebenfalls möglich, die Eingaben Backspace, Return und Tab aufzuzeichnen.

SeleniumWebDriverRecorder.png

Komponenten des Recorderfensters

  1. Aufnahme Pausieren: Wenn die Kontrollleuchte rot ist, nimmt der Recorder auf. Durch Klicken können Sie die Aufnahme anhalten. Die Kontrolleuchte leuchtet dann grau. In diesem Zustand können Sie weiter Aktionen über das Recorder-Fenster ausführen, sie werden aber nicht aufgezeichnet. Klicken Sie erneut, um die Aufnahme weiterzuführen.
  2. Aktualisieren: Holt das aktuelle Bild und den aktuellen Elementbaum vom Browser. Dies wird nötig, wenn die Anzeige des Recorders nicht mit dem tatsächlichen Browserinhalt übereinstimmt.
  3. Follow-Mouse: Das Element unter dem Mauszeiger wird im GUI-Browser ausgewählt.
  4. Element-Highlighting: Das Element unter dem Mauszeiger wird rot umrandet.
  5. Element-Werkzeuge: Auswahl, mit welchem Werkzeug aufgenommen werden soll. Es stehen alle Aktionen zur Verfügung, die auf ein bestimmtes Element ausgeführt werden. Die gewählte Aktion wird bei einem Klick auf die Anzeige ausgelöst und das Element aus der Position bestimmt. Die nicht ausgewählten Aktionen sind jederzeit über einen Rechtsklick erreichbar.
  6. Browser-Werkzeuge: Aktionen die sich nicht auf bestimmte Elemente beziehen, wie Scrollen oder Aktionen auf die aktuelle URL oder den Titel, können hier ausgelöst werden.
  7. Seitennavigation: Aktionen zur Seitennavigation: eine Seite zurück, eine Seite vor und aktuelle Seite neu laden
  8. Alert-Behandlung: Wenn der Browser einen Alert anzeigt, klicken Sie auf diesen Button, um die Aktionen zur Alert-Behandlung auswählen zu können.
  9. Online Dokumentation: Öffnet diese Online-Dokumentation.
  10. Anzeige: Zeigt einen Screenshot des Browsers. Aktionen werden mit der Maus je nach Werkzeug ausgelöst. Wenn eine neue Aktion eingegeben werden kann, hat das Fenster einen grünen Rahmen, sonst ist er rot. Scrollen wird den Browser weitergeleitet, aber nicht aufgenommen.
  11. Fenster an Bild anpassen: Ändert die Größe des Fensters so, dass der Screenshot vollständig angezeigt werden kann.
  12. Bild an Fenster anpassen: Skaliert den Screenshot auf eine Größe, mit der er die volle Größe des Fensters ausnutzt.
  13. Skalierung: Ändert die Skalierung des Screenshots. Diese kann auch über Scrollen in der Anzeige bei gedrückt gehaltener Strg-Taste angepasst werden.
  14. Meldungen: Hier werden Meldungen angezeigt, bspw. wenn eine Aktion nicht aufgenommen werden konnte. Die letzte Meldung wird solange angezeigt, bis sie über den Button rechts daneben geschlossen wird.
    Fenster-Tabs: Ab expecco 23.1 werden oberhalb der Anzeige Tabs für jedes offene Fenster angezeigt, sobald eine Verbindung mehr als ein Browserfenster besitzt. Ob der Browser dieses als Tab oder in einem eigenen Fenster anzeigt, ist dabei egal. Über die Tabs im Recorder können Sie das aktuelle Fenster wechseln und diesen Wechsel auch aufzeichnen.
    Frame-Kontext: Ab expecco 23.1 sehen Sie unterhalb der Anzeige, in welchem Frame-Kontext Sie sich gerade befinden (siehe dazu den Abschnitt Eingebettete Inhalte). Sie können auf die Einträge klicken, um in einen höheren Kontext zu wechseln und diesen Wechsel aufzuzeichnen. Falls Sie zusammengesetzte Pfade eingestellt haben, wird die Anzeige aktualisiert, wenn Sie ein eingebettetes Element ausgewählt haben.

Eingebettete Inhalte[Bearbeiten]

In HTML ist es möglich, auf einer Seite Inhalte einer anderen einzubinden. Das gängigste Elemente dafür ist ein Iframe (Inlineframe). Auf den Inhalt eines Iframes kann ebenfalls mit Selenium zugegriffen werden, allerdings muss dazu zuerst in diesen Kontext gewechselt werden. In der SeleniumWebDriverLibrary gibt es entsprechenden Bausteine, um in den Kontext eines Iframes zu wechseln, um in den Elternkontext zu wechseln und um zurück zum Standardinhalt, also dem obersten Kontext zu wechseln. Alle Element-Bausteine lösen die angelegten Pfade immer innerhalb des aktuellen Kontexts auf. Im GUI-Browser sehen Sie für eingebettete Inhalte ein zusätzliches Element, welches sie aufklappen können um dessen Elemente zu sehen.

Zusammengesetzte Pfade[Bearbeiten]

Seit expecco 23.1 gibt es die Möglichkeit, auch zusammengesetzte Pfade an den Bausteinen zu verwenden, um direkt vom Standardinhalt auf den Inhalt eines Iframes zugreifen zu können. Dazu werden einfach der Pfad zum Iframe und der Pfad innerhalb des Iframe-Inhalts zu einem zusammengesetzt. Wichtig ist hierbei, dass beim Übergang keine Elemente ausgelassen werden dürfen, d.h. der vordere Teil muss mit dem Iframe-Element enden und der hintere Teil mit /body beginnen. Dazwischen dürfen die Pfade gekürzt werden und es ist natürlich auch möglich auf diese Art beliebig tief geschachtelte Elemente zu erreichen. An den Bausteinen können beide Techniken nach belieben verwendet werden, wichtig ist nur, dass die Pfade immer in dem Kontext aufgelöst werden, in dem sich Selenium gerade befindet.

Wenn Sie die kombinierten Pfade aufzeichnen, bzw. im GUI-Browser verwenden wollen, setzen Sie im Menü GUI Browser unter Aufzeichnung den Haken bei Zusammengesetzte Pfade aufzeichnen. Damit wird für eingebettete Elemente ein zusammengesetzter Pfad relativ zum aktuellen Kontext erzeugt und angezeigt, anstatt wie bisher nur innerhalb seines eigenen Kontexts. Außerdem können Sie diese Elemente auch direkt im Recorder ansprechen oder über Follow-Mouse finden.

Shadow-Elemente[Bearbeiten]

Shadow-DOMs sind eine Möglichkeit, um Teile einer Seite vom übrigen Dokument abzukapseln. Dabei werden an ein Element versteckte Shadow-Elemente angehängt. Eine ausführlichere Erklärung finden Sie zum Beispiel hier: Using shadow DOM - Web APIs | MDN.

In der SeleniumWebDirverLibrary gibt es den Baustein [Web] Get Shadow DOM, der die obersten Elemente liefert, die dann wie andere WebElemente verwendet werden können.

Da die Elemente versteckt sind, werden sie vom GUI-Browser nicht direkt angezeigt. Ab expecco 23.1 kann man allerdings im Kontextmenü der Elemente im GUI-Browser einen Haken setzen, dass Shadow-Elemente gesucht werden sollen. Beim Aktualisieren der Kinder eines Elements werden sie dann angezeigt, falls vorhanden, allerdings nicht, wenn der gesamte Baum aktualisiert wird. Wenn der Haken gesetzt ist, sind die Elemente auch im Recorder verfügbar.

Zusammengesetzte Pfade[Bearbeiten]

Ähnlich wie die Elemente innerhalb eines Frames kann auch auf die Shadow-Elemente direkt über zusammengesetzte Pfade zugegriffen werden. Diese Pfade können dann direkt an den Bausteinen verwendet werden, sodass der Baustein [Web] Get Shadow DOM nicht benötigt wird. Die Pfade haben die Form

<host path>/shadowRoot/<shadow path>

wobei <host path> den Pfad zum Element angibt, an das der Shadow-DOM angehängt wurde, und <shadow path> der Pfad innerhalb des Shadow-DOMs zum gewünschten Element ist. '/shadowRoot' dient als Marker, dass an dieser Stelle der Wechsel in den Shadow-DOM erfolgt.

Authentifizierungs-Alerts[Bearbeiten]

Falls eine Webseite HTTP-Authentifizierung mit Basic Authentication verwendet, öffnet sich beim Laden der Seite ein Alert-Fenster zur Eingabe von Benutzernamen und Passwort. Dieses Fenster ist nicht direkt mit Selenium bedienbar. Im GUI-Browser wird es wie ein Alert angezeigt. Eine Ausnahme hierzu bildet Chrome, bei dem der Driver auf keine Anfrage antwortet solange der Dialog geöffnet ist. Das Plugin kann zu diesem Zeitpunkt insbesondere nicht feststellen, ob ein Authentifizierungs-Dialog geöffnet ist oder ob der Driver aus anderen Gründen nicht antwortet.

Bei lokalen Verbindungen unter Windows kann eine Authentifizierung mittels Windows Access ausgeführt werden. Es gibt in der SeleniumWebDriverLibrary für einzelne Browsertypen spezifische Authentifizierungs-Bausteine sowie den Baustein Authenticate at Alert, der je nach Verbindung den entsprechenden Baustein ausführt. Für die verschiedenen Browser-Typen gibt es dabei unterschiedliche Einschränkungen:

Chrome: Die Anmeldedaten werden an ein Chromefenster geschickt, daher funktioniert es nur, wenn nicht mehrere geöffnet sind. Der Einzelbaustein hat für diesen Fall die Option, den Titel des Fensters anzugeben.
Edge: Mit Microsoft Edge wird eine Anmeldung nicht unterstützt.
Firefox: Schickt die Anmeldedaten an ein Firefox-Dialogfenster und funktioniert daher nur, wenn es nicht mehrere gibt.
Internet Explorer: Mit dem Internet Explorer wird eine Anmeldung nicht unterstützt.

Als zusätzliche Option steht Ihnen auch eine Anmeldung über die URL zur Verfügung. Rufen Sie anstatt der Seite https://www.example.com die URL https://user:password@www.example.com auf. Wichtig ist hierbei, dass : und @ nicht im Benutzernamen oder im Passwort auftauchen. Möglicherweise wird diese Methode nicht von jedem Browser unterstützt.

Mithilfe des WindowsAutomation2-Plugins ist es ebenfalls möglich, solch eine Anmeldung mit allen Browsertypen auszuführen.

Portierung alter Selenium-Tests[Bearbeiten]

Dieses Plugin ersetzt das bisherige Selenium Web Test Plugin. Dieses basierte auf Selenium RC, welches in Zukunft von den Browsern nicht mehr unterstützt wird. Der Nachfolger von Selenium RC ist Selenium WebDriver, auch Selenium 2 genannt. Ebenso ist auch das Aufzeichnen von Tests mit Selenim IDE veraltet, da das Plugin von neueren Browsern nicht mehr unterstützt wird. Das Selenium WebDriver Plugin verwendet stattdessen einen eigenen Recorder.

Tests, die mit dem alten Selenium Web Test Plugin erstellt wurden und die alte SeleniumLibrary verwenden, können über Selenium WebDriver ausgeführt werden. Setzen Sie dazu in den Plugin-Einstellungen von "Webtest Legacy (Selenium)" den Haken bei "WebDriver für die Ausführung verwenden". Für die wichtigsten Funktionen wurde Wrapper bzw. umsetzende Funktionen erstellt, um die Migration möglichst problemlos zu gestalten. Testen Sie dann, ob die Tests wie bisher ablaufen. Für den überwiegenden Teil der Bausteine sollte es dabei keine Probleme geben. Einige wenige Aktionen werden in der WebDriver Version nicht mehr unterstützt oder verhalten sich unterschiedlich. Es ist auch nicht garantiert, daß die Emulation der alten Schnittstelle auf Dauer von Selenium unterstützt werden. Wenn möglich sollten Sie daher über kurz oder lang die Testfälle umschreiben.

FAQ[Bearbeiten]

  • Scrollbalken lassen sich im Recorder nicht bedienen
Der Scrollbalken des Browsers, der automatisch angezeigt wird, wenn eine Seite größer als das Browserfenster ist, ist kein bedienbares Webelement. Scrollen um einen bestimmten Betrag ist in einem Test selten sinnvoll, wenn die Größe des Browserfensters nicht festgelegt ist. Verwenden Sie stattdessen den Baustein [Web] Scroll Element into View, um ein entsprechendes Element in den sichtbaren Bereich zu scrollen. Der Klick-Baustein, den der Recorder standardmäßig verwendet, führt diese Aktion bereits automatisch mit aus ([WebElement] Click (Scroll Element into View)). Wenn Sie im Recorder-Fenster scrollen, wird dies automatisch auf den Browser übertragen, aber nicht aufgezeichnet. Falls Sie tatsächlich um einen bestimmten Betrag scrollen möchten, gibt es bei den Browser-Aktionen einen Eintrag dafür und weitere Bausteine in der SeleniumWebDriverLibrary.
  • Baustein schlägt fehl, wenn Element zu spät sichtbar wird
Alle Bausteine, die einen Elementpfad verwenden, haben automatisch eingebaut, dass sie warten, bis ein entsprechendens Element auftaucht. Es gibt aber Fälle, in denen ein Element zwar bereits da, aber noch nicht sichtbar ist. Bei einem Klick auf das Element bekommen Sie dann einen Fehler. Mögliche Fehler in diesem Zusammenhang sind org.openqa.selenium.ElementNotInteractableException: element not interactable und org.openqa.selenium.JavascriptException: javascript error: Cannot read property 'left' of undefined. Verwenden Sie dann vor einer Interaktion mit dem Element den Baustein [Web] Wait for Visibility of Element oder [Web] Wait for Element to Be Clickable.
  • Fehlermeldung: Cannot read property 'left' of undefined
Der Fehler org.openqa.selenium.JavascriptException: javascript error: Cannot read property 'left' of undefined kann mit dem Chrome-Browser auftreten. In diesem Fall ist das verwendete Element nicht sichtbar. Lesen Sie dazu den Punkt oben. Der Fehler ist auch im Zusammenhang mit Elementen in einer Dropdown-Liste bekannt, d.h. bei einem Klick oder dem Bewegen der Maus auf ein <option>-Element innerhalb eines <select>-Elements. Diese Elemente sind prinzipiell nicht klickbar. Verwenden Sie stattdessen einen passenden [Web] Select-Baustein mit dem <select>-Element.
  • Fehlermeldung: Stale Element Reference Exception
Der Fehler org.openqa.selenium.StaleElementReferenceException tritt immer dann auf, wenn ein WebElement verwendet wird, das nicht mehr da ist. Wenn das in Ihrem Test passiert und das Element eigentlich da sein sollte, verwenden Sie an der Stelle stattdessen den Locator, um das Element neu zu holen. Eventuell liegt es auch daran, dass sich der Test momentan in einem anderen Frame-Kontext befindet als das Element. Wenn Sie zusammengesetzte Pfade verwenden, sollte das Element selbst in den richtigen Kontext wechseln, bevor Aktionen darauf ausgeführt werden.
In seltenen Fällen kann der Fehler auch in expecco selbst auftreten, wenn an irgendeiner Stelle im GUI-Browser oder Recorder ein entsprechendes WebElement verwendet wird. Sie sollten dann abbrechen können und es nochmal versuchen. Sollte der Fehler bestehen bleiben, wechseln Sie in den Default Content und laden Sie den Baum im GUI-Browser neu.
  • Baustein läuft erfolgreich, aber ohne Auswirkungen
Dieser Fall kann mit Chrome auftreten. Das Element ist verfügbar, die Aktion wirft keinen Fehler, aber es wird nichts ausgeführt. In der Regel hilft es, vor der Ausführung kurz zu warten, siehe Ausführungsverzögerung für Chrome.
  • Ausführungen mit Chrome sind langsamer
Um ein Problem bei der Ausführung mit Chrome zu beheben, ist in den Plugin-Einstellungen für Chrome eine Verzögerung definiert. Überprüfen Sie, ob dieser Wert eventuell zu hoch eingestellt ist; siehe Ausführungsverzögerung für Chrome.
  • Fehlermeldungen wie: "org.openqa.selenium.InvalidArgumentException: Expected "handle" to be a string..."
Dies passiert wenn der Driver nicht (mehr) zum Browser passt. Lesen Sie dazu obiges Kapitel "WebDriver aktualisieren".
  • Key Chords mit Shortcuts funktionieren nicht
Das Drücken mehrerer Tasten gleichzeitig lässt sich als Key Chord simulieren. Dadurch können auch Shortcuts eingegeben werden. Allerdings funktionieren hier nicht alle Eingaben, da diese nur an den Seiteninhalt und nicht an den Browser selbst gehen. Kombinationen wie Strg + t um einen neuen Browsertab zu öffnen, funktionieren daher vermutlich nicht, Strg + a oder Strg + c sollten hingegen möglich sein.
  • Zusätzliche Window Handles mit Opera
Der Opera-Browser liefert mehr Window Handles als Tabs bzw. Fenster geöffnet sind. Diese kommen von Opera-internen Funktionen wie dem Schnellstart (Speed Dial) oder der Better Address Bar Experience (BABE), die zwar im Browserfenster eingebunden, aber nicht als Tab angezeigt werden. Zu diesen Tabs kann zwar mit den entsprechenden Bausteinen gewechselt werden, es sind dann aber nicht alle Aktionen möglich, die für die normalen Tabs zur Verfügung stehen. Sie können zum Beispiel nicht geschlossen werden und man bekommt von ihnen kein Bild. Am besten wechselt man daher gar nicht erst in diese Kontexte. Seien Sie also vorsichtig, wenn Sie anhand des Index zu einem Tab wechseln wollen, da sich die Opera-Tabs zwischen den anderen befinden und der Index ein anderer als für die anderen Browser sein kann.



Copyright © 2014-2024 eXept Software AG