Selenium ======== Einführung ---------- In unserem fünften Projekt haben wir uns mit Selenium und der Webautomatisierung beschäftigt. Selenium ist ein Open-Source-Framework, das Entwicklern ermöglicht, Tests und Skripte für Webanwendungen zu schreiben und auszuführen. Es zählt unter anderem zu den bekanntesten quelloffenen Testwerkzeugen. Dies bietet eine Reihe von Funktionen und APIs, um Interaktionen mit Webseiten durchzuführen, wie zum Beispiel das Klicken auf Elemente, das Ausfüllen von Formularen, das Navigieren zwischen Seiten oder das Extrahieren von Daten. Es unterstützt verschiedenste Browser wie Chrome, Firefox und Safari. Selenium basiert rein auf HTML und JavaScript. Für einen schnellen Einstieg kann direkt die Selenium-IDE z. B. als Firefox-Add-on installiert und getestet werden: Der Benutzer interagiert nur mit Firefox, Selenium nimmt den Test auf und spielt ihn wieder ab. Ein anderer Weg, Selenium-Tests zu erstellen, ist mithilfe der Python-Bibliothek pytest. Dies bietet eine einfache und intuitive Syntax und zahlreiche Funktionen zur Organisation, Durchführung und Berichterstellung von Tests. Installation ------------ Um einerseits die **Selenium IDE** nutzen zu können, muss man diese in der Firefox-Addonbibliothek herunterladen. Jene Bibliothek öffnet man über das Puzzle-Symbol in der oberen rechten Toolbar. Nach dem Download findet man das Addon schließlich ebenfalls unter dem eben genannten Punkt. .. image:: /img/selenium/addon.png :alt: Addonbibliothek Damit man zusätzlich die Selenium-Tests im Nachgang innerhalb der eigenen Python-Umgebung verwenden kann, lassen sich beide Frameworks wie gewohnt über pip installieren. .. code-block:: bash pip install selenium pip install pytest Aufnahme mit IDE ---------------- Als erstes verwendeten wir die Firefox Selenium IDE. Nachdem die IDE geöffnet wurde, lassen sich nun Tests über eine Bildschirmaufnahme erstellen. Hierzu betätigt man ganz einfach den REC-Knopf in der rechten oberen Ecke. .. image:: /img/selenium/dvaprak-sel.png :alt: Aufnahme-Start Sobald die Aufnahme läuft, führt man die gewünschten Aktionen in Firefox aus, in unserem Fall verschieden Aktionen auf der Sportwebseite der Uni Augsburg. Hier wollten wir uns zur Demonstration an einem beliebigen Kurs anmelden. .. image:: /img/selenium/dvaprak-sel1.png :alt: Kursauswahl Generell werden alle Aktivitäten im Webbrowser, z.B. Klicken auf Schaltflächen, Ausfüllen von Formularen oder ähnliches, in Selenium-Befehle konvertiert, die den Aktionen entsprechen. Zusätzlich kann man Assertions einfügen, um die erwarteten Ergebnisse zu überprüfen. Außerdem lassen sich die versch. Befehle im Nachhinein noch bearbeiten, erweitern oder anpassen; je nach den unterschiedlichen Anforderungen. .. image:: /img/selenium/dvaprak-sel3.png :alt: Übersicht **Funktionen der IDE:** 1. Projekt erstellen, öffnen oder speichern 2. Starten, Pausieren oder Debuggen der Aufnahme 3. Ausführen + Konfigurieren von Tests (Ausführungsgeschwindigkeit, Ausführen von best. Commands, etc.) 4. Übersicht der Selenium-Commands mit dem Command-Typ, dem Ziel-Webelement, und einem optionalen Wert, wie z.B. für Formfelder 5. Durch Auswahl eines Commands lässt sich dieser individuell bearbeiten Während der Ausführung unseres Tests sind wir jedoch anfangs schnell auf einen Fehler gestoßen, nämlich dass eine best. JavaScript-Funktion von der CSP-Richtlinie blockiert wurde. Dies ist häufig der Fall, um verschiedene Cyber-Attacken abzuwehren, wie z.B. Cross Site Scripting. Hier hieß es im Log: .. code-block:: bash type on id=BS_F1100 with value Student Failed: call to eval() blocked by CSP .. image:: /img/selenium/dvaprak-sel2.png :alt: Fehlermeldung **Exportieren des Tests**: Einzelne Tests lassen sich auch innerhalb der IDE exportieren, um sie anderweitig weiterzuverwenden. Hierbei kann man auch versch. Programmiersprachen wählen, die der Test haben soll (C#, Java, Python, Ruby). Wir haben für unseren Fall Python gewählt, um die Test später mithilfe von pytest verwenden zu können. .. image:: /img/selenium/dvaprak-sel4.png :alt: Export Python ------ Nachdem wir den eben erstellten Test mithilfe der IDE exportiert haben, konnten wir die python-Datei in unser Projekt einbinden. Entweder kann man diesen Code nun nach seinen Bedürfnissen weiter anpassen, und so neue Testfälle erstellen, oder man entwickelt eigene Selenium Tests "from scratch". Wir haben den erstellten Code mehrmals dupliziert, abgeändert und dadurch in kürzester Zeit mehrere Anwendungstests erstellt. .. literalinclude:: selenium/test_email_wrong.py :language: python Hier sieht man, dass die Commands der Selenium IDE ganz einfach in python Statements umgewandelt wurden. Die IDE bietet aber hierbei eine übersichtlichere und verständlichere Struktur & Übersicht. Gestartet können die Tests dann entweder über eine Test-Suite, oder einzeln über folgenden Kommandozeilenaufruf: .. code-block:: bash pytest test_email_wrong.py Dadurch werden alle in der Testdatei befindlichen Tests ausgeführt (Funktionen beginnend mit "test\_"), wobei der Teststatus und die Ergebnisse in der Konsole sichtbar sind. Wenn man aber doch eine detailliertere Zusammenfassung der Testergebnisse möchte, können versch. Plugins und Erweiterungen zu pytest verwenden. Ein beliebtes Tool ist z.B. pytest-html, mit dem man einen interaktiven HTML-Testbericht generieren kann. .. code-block:: bash pip install pytest-html Über pytest und folgendem Befehl lassen sich dann alle Tests ausführen und dazu wird ein passender Bericht geschrieben, der zusätzliche Informationen enthält. .. image:: /img/selenium/pytest-html.png :alt: HTML Es fällt auch sofort auf, das das CSP Problem der IDE hier nicht auftritt, und die gecodete python-Version dieser somit überlegen ist. Fazit ----- Selenium hat sich als äußerst nützliches Werkzeug für die automatisierte Webbrowser-Steuerung und das Testen von Webanwendungen erwiesen. Durch dessen Verwendung lassen sich in kürzester Zeit effiziente, zuverlässige und auch flexible Tests für eine Vielfalt an Use Cases entwickeln. Vor allem die Vorteile im Hinblick auf Vielseitigkeit und Unterstützung verschiedener Programmiersprachen wie Python, Java und C# lassen sich positiv hervorheben. Selenium bietet auch dank der IDE für Firefox eine zugängliches und übersichtliche Lösung für Entwickler mit den unterschiedlichsten Hintergründen. Zusammen mit den verschiedenen kompatiblen Test-Frameworks wie eben pytest und den damit verbundenen zusätzlichen Funktionalitäten bildet Selenium ein effizientes und äußert nützliches Gesamtpaket. Quellen ------- https://www.selenium.dev https://de.wikipedia.org/wiki/Selenium