Automatisiertes Testen von Webanwendungen mit Selenium und Watij Sebastian Westkamp Seminar Ausgewählte Themen des Softwareengineering
Agenda Motivation Selenium Watij Bewertung sowie Vergleich von Selenium und Watij 1
Agenda Motivation Selenium Watij Bewertung sowie Vergleich von Selenium und Watij 2
Motivation Webanwendungen sind komplexe und vollwertige Softwaresysteme Qualität der Anwendungen ist sehr wichtig Die wichtigste Qualitätssicherungsmaßnahme ist das Testen Das Testen nimmt zwischen 25% und 50% der gesamten Entwicklungsarbeit und kosten in Anspruch Tools sollen helfen ein effektives und effizientes Testen zu gewährleisten; ohne Werkzeugunterstützung ist ein Testen nicht mehr möglich 3
Agenda Motivation Selenium Selenium Core Selenium IDE Selenium Remote Control Watij Bewertung sowie Vergleich von Selenium und Watij 4
Selenium Werkzeug für das Testen von Webanwendungen Steuerung des Browsers mittels JavaScript Unterschiedlicher JavaScript-Code für verschiedene Browser vorhanden Selenium wurde von ThoughtWorks entwickelt, ist heute Open-Source und unter Apache 2.0 lizenziert Selenium gibt es in mehreren Varianten Selenium Core Selenium IDE Selenium Remote Control 5
Agenda Motivation Selenium Selenium Core Selenium IDE Selenium Remote Control Watij Bewertung sowie Vergleich von Selenium und Watij 6
Selenium Core Muss auf dem Webserver der zu testenden Webanwendung installiert werden Erstellung von Testfällen mittels der Sprache Selenese Testfälle können in Test-Suites zusammengefasst werden Zum Ausführen werden die Testfälle auf den Webserver kopiert Ausführung mittels Aufruf des TestRunners über den Browser auf der Client-Seite Einbettung der Test-Engine in die Webseite mittels JavaScript und iframes 7
8 TestRunner Oberfläche
Selenese Testfälle sind Tabellen in HTML-Dokumenten HTML-Tabelle mit 3 Spalten und n Zeilen Die erste Spalte enthält das Kommando, die beiden folgenden die Argumente Zeilen mit weniger als 3 Spalten werden ignoriert und können als Kommentar verwendet werden Selenese besteht aus: Aktionen Zusicherungen Element Lokatoren Variablen 9
Selenese Aktionen manipulieren den Zustand einer Webanwendung (click, open, type), Suffix AndWait Nach Ausführung von Aktionen untersuchen Zusicherungen den Zustand einer Webanwendung Element Lokatoren: id= name= identifier= dom=javascript-ausdruck xpath=xpath-ausdruck link=text css=css-selector-syntax 10
Selenese Variablen: Speichern von Werten und deren Einsatz in den Actions Möglichkeit eigene Aktionen, Zusicherungen und Lokatoren zu schreiben JavaScript-Code muss hierzu in der user-extensions.js hinterlegt werden Mögliche Erweiterung: Hinzufügen der Steuerung von Flash-Objekten 11
12 Beispiel-Testfall
13 Beispiel-Testfall
14 Beispiel-Testfall
15 Beispiel-Testfall
16 Beispiel-Testfall
17 Beispiel-Testfall
Beispiel-Testfall in Selenese Wird noch hinzugefügt 18
Grenzen von Selenium Core Muss auf dem Webserver der Webanwendung installiert sein; Testfälle müssen hierhin kopiert werden Sicherheitsbeschränkungen von JavaScript Same Origin Policy verbietet es, dass Dokumente und Skripte, die aus einer Quelle stammen, Eigenschaften eines Dokumentes aus einer anderen Quelle auslesen oder verändern Quelle wird bestimmt durch die Parameter: Domainname, Port und Protokoll Weiteres Problem: Hochladen von Dateien Umgehungsmöglichkeiten 19
Agenda Motivation Selenium Selenium Core Selenium IDE Selenium Remote Control Watij Bewertung sowie Vergleich von Selenium und Watij 20
Selenium IDE Firefox Plugin Erlaubt das Aufnehmen, Editieren und Debuggen von Tests Aufnahme der Tests durch Benutzen des Firefox Automatische Generierung des Selenese-Quellcodes Speicherung des Testfalles als HTML-Datei in Selenese oder Exportierung in die Sprachen: Java, C#, Perl, PHP, Python, Ruby Aufgenommene Testfälle können schrittweise oder mittels Breakpoints durchlaufen werden 21
22 Selenium IDE Oberfläche
Selenium IDE Durch Verwendung von chrome können die Sicherheitsrestriktionen von JavaScript umgangen werden Selenium IDE ist durch die Sprache Selenese beschränkt: Keine Unterstützung von Schleifen Kein Zugriff auf Dateien, die nicht über den Browser erreichbar sind 23
Agenda Motivation Selenium Selenium Core Selenium IDE Selenium Remote Control Watij Bewertung sowie Vergleich von Selenium und Watij 24
Selenium Remote Control Besteht aus 2 Teilen: Selenium Server Selenium Client-Treiber Selenium Server kann Browser kontrollieren, sie starten, stoppen und den Proxy einstellen; ist in Java geschrieben Interaktiver Modus 25
26 Funktionsweise
27 Selenium RC Oberfläche
Browser Launcher Verschiedene Arten: Standard: firefox, iexplore, safari, opera custom Experimentelle: chrome, iehta 28
Testbeispiel in Java private Selenium selenium; public void setup() { selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://localhost"); selenium.start(); } public void testmerkmal() throws Exception { selenium.open("/herbie/"); selenium.type("loginname", "admin"); selenium.type("password", "admin"); selenium.click("//input[@value='submit']"); selenium.waitforpagetoload("30000"); asserttrue(selenium.istextpresent("herzlich Willkommen auf der Herbie- Plattform")); selenium.click("link=serviceverwaltung"); selenium.waitforpagetoload("30000"); selenium.click("link=merkmal neu anlegen"); selenium.waitforpagetoload("30000"); asserttrue(selenium.istextpresent("neues Merkmal anlegen")); 29
Testbeispiel in Java } selenium.select("scaling", "label=qualitativ"); selenium.waitforpagetoload("30000"); selenium.type("createcharacname", "Qualitätsstufe"); selenium.click("selectedscaleid"); selenium.selectframe("chartree"); selenium.click("//img"); selenium.waitforpagetoload("30000"); selenium.click("link=qualität"); selenium.selectframe("relative=up"); selenium.click("document.phoenixadminserviceform.elements[10]"); selenium.waitforpagetoload("30000"); asserttrue(selenium.istextpresent("qualitätsstufe")); selenium.click("qualvaluetodelete[2]"); selenium.click("//input[@value='zuweisung löschen']"); selenium.waitforpagetoload("30000"); asserttrue(selenium.istextpresent("merkmalszuweisung wurde erfolgreich gelöscht")); selenium.click("link=abmelden"); selenium.waitforpagetoload("30000"); asserttrue(selenium.istextpresent("sie wurden erfolgreich vom System abgemeldet")); 30
Agenda Motivation Selenium Watij Bewertung sowie Vergleich von Selenium und Watij 31
Watij Web Application Testing in Java API, mit dessen Hilfe der Internet Explorer kontrolliert und automatisiert werden kann, um Webanwendungen zu testen Ursprung: Watir Watij bedient sich der Java COM-Bridge Jacob Verschiedene Möglichkeiten um Elemente zu finden: Symbole (name, id, value, src) Finder XPath Vorkonfigurierte BeanShell enthalten 32
33 BeanShell
Testbeispiel private IE ie; public void setup() throws Exception{ ie = new IE(); ie.start("http://localhost/herbie"); } public void testmerkmal() throws Exception { ie.textfield(name, "loginname").set("admin"); ie.textfield(name, "password").set("admin"); ie.button("submit").click(); asserttrue(ie.containstext("herzlich Willkommen auf der Herbie-Plattform")); ie.link("serviceverwaltung").click(); ie.link("merkmal neu anlegen").click(); asserttrue(ie.containstext("neues Merkmal anlegen")); ie.selectlist(name, "scaling").selectvalue("qualitativ"); ie.textfield(name, "createcharacname").set("qualitätsstufe"); ie.radio(name, "selectedscaleid").set(); 34
Testbeispiel } Frame iframe = ie.frames().get(0); iframe.images().get(0).click(); iframe.link("/quali/").click(); ie.button("merkmal speichern").click(); ie.checkbox(name, "qualvaluetodelete[2]").set(); ie.button("zuweisung").click(); asserttrue(ie.containstext("merkmalszuweisung wurde erfolgreich")); ie.link("abmelden").click(); asserttrue(ie.containstext("sie wurden erfolgreich vom System abgemeldet")); 35
Agenda Motivation Selenium Watij Bewertung sowie Vergleich von Selenium und Watij 36
Selenium Übersicht Selenium Selenium Selenium Selenium IDE RC Core Core HTA Browser Unterstützung Nur FF Viele Alle Nur IE Installation auf dem Webserver Nein Nein Ja Nein Unterstützt HTTPS/ SSL Ja Ja Ja Ja Unterstützt mehrere Domains Ja Ja Nein Ja Benötigt Java Nein Ja Nein Nein Testergebnis-Speicherung Nein Ja Nein Ja Unterstützte Sprachen Selenese Viele Selenese Selenese 37
Selenium Verwendung von XPath zur Elementlokalisierung Unterschiedliche XPath-Implementierungen in Browsern Notwendigkeit des waitforpagetoload-kommandos Unterstützung von Uploads, Downloads und JavaScript- Confirmations ergibt geteiltes Bild Rudimentäres Logging Einfache Erweiterbarkeit mittels user-extensions.js Sicherheitsrestriktionen behindern und erschweren den Einstieg 38
Watij Elemente einer Seite sind als Objekte ansprechbar Sprachabhängigkeit bei Dialogen und beim Finden von Elementen Effizienteres Programmieren mittels ie.attach Die Seite-geladen-Erkennung funktioniert nicht reibungslos Schlechte API-Dokumentation Einfacher Einstieg 39
Gemeinsamkeiten Beide Tools sind Open-Source und damit in der Anschaffung kostenlos Rote Balken traten vor allem beim Nichtfinden von HTML-Elementen auf Beide Tools haben noch Fehler und Schwierigkeiten in der Bedienung Weiterentwicklungen: Reality QA und FireWatir 40
Fazit Selenium testet die Webanwendung und besonders die Browserkompatibilität sowie Plattformabhängigkeit Watij testet die Webanwendung mit Hilfe des meistgenutzten Browsers auf dem meistgenutzten Betriebssystem für Endnutzer 41
Ende Vielen Dank für die Aufmerksamkeit! Fragen? 42