Stefani Gerber Senior Software Engineer

Selenium IDE

May 6, 2015 11:54:21 AM

In diesem ersten Beitrag einer Reihe zu Selenium stelle ich Selenium IDE vor. Die nachfolgenden Beiträge werden sich mit Selenium RC und Selenium WebDriver befassen und in den nächsten Monaten erscheinen.

Einführung

2004 hat Jason Huggins eine JavaScript-Bibliothek erstellt, die es ihm ermöglichte, einen Browser zu steuern und somit Interaktionen zu automatisieren. Diese wurde später unter dem Namen Selenium Remote Control opensource veröffentlicht. Selenium IDE wurde 2006 von Shinya Kasatani erstellt und später dem Selenium Projekt gespendet.

Selenium IDE will auch technisch nicht versierten Nutzern ermöglichen, einfach automatisierte Tests zu erstellen. Sie ist als Firefox Addon erhältlich.

Wie funktioniert Selenium IDE?

Sobald sie geöffnet und der Aufnahmemodus gestartet ist zeichnet Selenium IDE sämtliche Interaktionen des Benutzers mit der Webseite auf. Die Benutzeraktionen einer Aufzeichnung werden in einem TestCase zusammengefasst. Im folgenden Beispiel wurden fünf Aktionen aufgezeichnet:

  1. die Webseite öffnen: die URL wird aus der Base URL und dem Target vom Command zusammengesetzt (http://www.google.ch und /)
  2. den Namen Bluesky ins Suchfeld tippen
  3. den Button namens btnG klicken
  4. in den Suchresultaten auf den Link Bluesky IT-Solutions AG klicken und warten, bis die Seite fertig geladen ist
  5. verifizieren, dass ein Menüeintrag namens SOFTWARE DEVELOPMENT vorhanden ist

Einmal aufgezeichnet lässt sich ein TestCase immer wieder abspielen. TestCases können abgespeichert und auch zu TestSuites zusammengefasst werden. In nachfolgender Grafik sehen wir eine TestSuite, die sich aus vier Testfällen (6-7_1, 6-7_3, 6-7_5 und 6-7_6) zusammensetzt und als Ganzes wieder abgespielt werden kann. Somit können TestCases in mehreren Suites verwendet werden. Ändert sich der getestete Seitenabschnitt, muss dies nur im TestCase angepasst werden; die Neuerung steht dann allen Suiten zur Verfügung.

Vorstufe für programmierte Testautomatisierungen

Testfälle können aus der Selenium IDE in diverse Sprachen (Java, Ruby, Python) exportiert werden. Der JUnit-Test von obigem Testfall sieht z.B. folgendermassen aus:

package com.example.tests;

import com.thoughtworks.selenium.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.regex.Pattern;

public class SampleTestCase {
    private Selenium selenium;

    @Before
    public void setUp() throws Exception {
        selenium = new DefaultSelenium("localhost", 4444, "*chrome", "https://www.google.ch/");
        selenium.start();
    }

    @Test
    public void testSampleTestCase() throws Exception {
        selenium.open("/");
        selenium.type("id=lst-ib", "Bluesky");
        selenium.click("name=btnG");
        selenium.click("link=Bluesky IT-Solutions AG");
        selenium.waitForPageToLoad("30000");
        verifyEquals("SOFTWARE DEVELOPMENT", selenium.getText("//div[@id='menu']/ul/li[2]/a/div/div"));
    }

    @After
    public void tearDown() throws Exception {
        selenium.stop();
    }
}

Hiermit kann gut ein Grundgerüst für einen neuen Test erstellt werden, es bedarf aber noch diverser Verbesserungen um die Wartbarkeit zu gewährleisten.

Persönliche Erfahrung

Ich habe Selenium IDE schon in folgendem Fall verwendet:

  • Aktion war mehrfach auszuführen (für jedes Element aus einer LIste)
  • mühsam zu bewältigen da die zu klickenden GUI-Elemente weit auseinander lagen auf dem Bildschirm
  • einmaliger Einsatz: Aufwand um die Automatisierung zu programmieren lohnte sich nicht

Grenzen von Selenium IDE

Selenium IDE ist ideal, wenn man schnell etwas aufzeichnen und danach wieder abspielen will.

Sie hat aber auch Einschränkungen:

  • nur im Firefox möglich
  • kann nicht in den Entwicklungsprozess integriert werden (z.B. im Continuous Integration Prozess)
  • Selektoren (z.B. „//div[@id=’menu‘]/ul/li[2]/a/div/div„) sind nicht robust: schon kleine Änderungen am Markup führen dazu, dass sie nicht mehr das richtige Element treffen
  • kennt weder Schleifen noch bedingte Anweisungen

Ausblick

In einem nächsten Beitrag werden wir sehen, wie man – z.B. unter Zuhilfenahme des mit Selenium IDE erstellten Testskripts – automatisierte Tests programmieren kann.