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 TestRunner Oberfläche 8 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 Beispiel-Testfall 12 Beispiel-Testfall 13 Beispiel-Testfall 14 Beispiel-Testfall 15 Beispiel-Testfall 16 Beispiel-Testfall 17 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 Selenium IDE Oberfläche 22 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 Funktionsweise 26 Selenium RC Oberfläche 27 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 HerbiePlattform")); 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 BeanShell 33 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 37 Browser Unterstützung Selenium IDE Nur FF Selenium RC Viele Selenium Selenium Core Core HTA Alle Nur IE Installation auf dem Webserver Unterstützt HTTPS/ SSL Unterstützt mehrere Domains Benötigt Java Testergebnis-Speicherung Unterstützte Sprachen Nein Ja Ja Nein Nein Selenese Nein Ja Ja Ja Ja Viele Ja Ja Nein Nein Nein Selenese Nein Ja Ja Nein Ja Selenese Selenium Verwendung von XPath zur Elementlokalisierung Unterschiedliche XPath-Implementierungen in Browsern Notwendigkeit des waitForPageToLoad-Kommandos Unterstützung von Uploads, Downloads und JavaScriptConfirmations 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