Quick Navigator
© 2004-2019 by Rocketlab

hand crafted in the beautiful mountains of Switzerland
Elemente einer HTML Seite

Selenium – Linkelemente adressieren


Selenium - Webdriver Academy

 

Selenium im Umgang mit Linkelementen einer HTML Site

Selenium bietet mehrere Möglichkeiten, auf Linkelemente einer Website zugreifen zu können. Wie bereits im Artikel Lokalisierung von Seitenelementen aufgezeigt gibt es bereits zahlreiche Methoden, um Elemente zu finden, z.B. über CSS Selektoren, DOM Struktur, xPath usw. In diesem Artikel wird der Bereich Links nun noch um einige wertvolle Methoden erweitert, so dass Sie wirklich in der Lage sind, alle Elemente und Links zu adressieren.

Wieder gehen wir per findElement() Methode vor, welche uns eine enorme Funktionsvielfalt zur Verfügung stellt.

 

Methode Beschreibung

Codebeispiel

 By.linkText() Es wird ein Link angeklickt, welcher den mitgelieferten String innerhalb der a-Tags zeigt. z.B. <a href=“http://www.example.com/Muenchen“>{String}</a>Der String muss exakt so angegeben werden, wie er im HTML Quellcode vorkommt, da Selenium hier case-sensitive vorgeht.HTML5 Besonderheit: Seit Einführung von HTML5 als Standard ist es dem a-href Tag erlaubt, nicht mehr nur innerhalb, sondern jetzt auch ausserhalb der folgenden Tags zu stehen: <div>, <p> und <h1>. Die By.linkText() Methode erkennt Links sowohl innerhalb als auch ausserhalb dieser Block-Elemente.  driver.findElement(By.linkText({String})).click();
 By.partialLinkText()  Funktioniert ähnlich wie By.linkText(), allerdings ist hier nur ein Teil des innertext als Angabe nötig. Bedenken Sie aber, dass hier die Gefahr besteht, dass es mehr als ein Element mit diesen Eigenschaften auf der gleichen Website existiert. Adressiert wird dann jeweils nur das Element, welches als erstes auf der Website (von oben angefangen) vorkommt.  driver.findElement(By.partialLinkText("name")).click();
 By.tagName(„a“)  Dies ist eine sehr ungenaue Methode, da Sie hiermit erst einmal alle vorkommenden Links auf einer Site treffen. Diese Methode bietet sich aber dennoch an, um alle Links zunächst einmal „einzusammeln“ und dann per Loop (z.B. über eine While Schleife) alle Links überprüfen, ob eventuell ein Deadlink auf der Seite existiert.  List<WebElement> linkElements = driver.findElements(By.tagName("a"));
 By.cssSelector()  Bilder-Links können über die verschiedenen Selektoren wie im Artikel Lokalisierung von Seitenelementen bereits erklärt adressiert werden. Am einfachsten über den title Tag, name Tag oder was immer im Sourcecode vorhanden ist.Das Codebeispiel rechts bezieht sich auf folgenden Source (Auszug):<a class=“lfloat“ title=“Software Testing mit Rocketlab“ href=“https://www.rocketlab.de“>
<i class=“com_logo img xlt_8fjkl ygt_3ijlk2″>
<u>Rocketlab Logo</u>
</i>
</a>Natürlich ist auch xPath, Id usw. anwendbar in gleicher Weise.
 driver.findElement(By.cssSelector("a[title=\"Software Testing mit Rocketlab\"]")).click();

 

 

 

Selenium – Formulare testen


Selenium - Webdriver Academy

Formulare werden am Frontend sehr häufig gestestet. Diese werden aus verschiedenen Elementen und auch Technologien (z.B. jQuery Formulare) gebaut und stellen mit unter eine Herausforderung für den Tester dar. So ist es unter HP QTP/ UFT nur mit dem zusätzlichen Plugin Web-Toolkit möglich, Ajax bzw. jQuery Formulare zu testen. Selenium ist hier bereits sehr gut ausgestattet und lässt sogar Typenabfragen zu, wie z.B. Abfragen nach multi oder single Selectfeld.

Bevor Sie loslegen muss folgendes Selenium Paket importiert werden:

org.openqa.selenium.support.ui.Select

Jetzt noch ein Selectfeld multiAuswahlfeld als Select Objekt instanzieren:

Select multiAuswahlfeld = new Select(driver.findElement(By.Id("staedte_auswahl")));

Und schon können Sie mit der Instanz multiAuswahlfeld in Ihrem Selenium Script arbeiten. Grundsätzlich gibt es 3 Möglichkeiten für Ihr Seleniumscript, auf die jeweilige Auswahl in einem Selectfeld zuzugreifen.

Im HTML Sourcecode gibt es folgendes Formularelement:

<select id="staedte_auswahl" class="formselect" multiple="multiple">
<option value="x">- - - Bitte w&auml;hlen Sie einen Ort - - -</option>
<option value="muc">M&uuml;nchen</option>
<option value="stu">Stuttgart</option>
<option value="sg">St. Gallen</option>...
</select>

Den ersten gültigen Eintrag (hier im Beispiel „München“) können Sie auf folgende drei unterschiedliche Weisen in Selenium ansprechen:

  1. Innertext: selectByVisibleText()
    Beispiel Selenium Code: multiAuswahlfeld.selectByVisibleText("München");
  2. Value: selectByValue()
    Beispiel Selenium Code: multiAuswahlfeld.selectByValue("muc")
  3. Index: selectByIndex()
    Beispiel Selenium Code: multiAuswahlfeld.selectByIndex(1)
    Achten Sie darauf, dass der erste Eintrag in der Liste den Index=0 hat.

 

Falls Sie mehr als einen Eintrag selektieren möchten, wiederholen Sie den Befehl in Ihrem Selenium Programmcode einfach. Zum Deselektieren gibt es einen weiteren Befehl:

multiAuswahlfeld.deselectByVisibleText("Zürich");

Hiermit erreichen Sie, dass die Auswahl des Eintrags „Zürich“ wieder deselektiert wird. Falls dieser aber vorher nicht Selektiert war, kommt es zu einem Fehler.

Sie können übrigens auch die ganze Auswahl mit einem Befehl aufheben: deselectAll().

Somit empfiehlt es sich, Exceptions abzufangen und vorher abzufragen, ob der Eintrag bereits selektiert war. Zudem gibt es die Möglichkeit, abzufragen, ob ein Selectfeld ein Multi-Selectfeld ist. Hierzu verwenden Sie den Befehl isMultiple(). Beispiel in der Verwendung innerhalb eines Selenium Scripts:

if (multiAuswahlfeld.isMultiple()) {
// Anweisungen
}

 

Selenium Befehlsübersicht für Webformulare

 

Methode Beschreibung

Codebeispiel

 selectByVisibleText() Wählt in der Optionenliste einen Eintrag aus.  selectByVisibleText(„München“);
 deselectByVisibleText() Löscht die Auswahl eines bestimmten Eintrags aus einem Optionenliste.  deselectByVisibleText(„München“);
 selectByValue() Selektiert einen Eintrag durch Adressierung des Übergabewertes value.  selectByValue(„stu“);
 deselectByValue() Selektion wird wieder aufgehoben.  deselectByValue(„stu“);
 selectByIndex() Selektiert einen Eintrag durch Angabe eines Indexes. Achtung: Alle Indices fangen bei 0 an.  selectByIndex(3);
 deselectByIndex() Hebt Selektion wieder auf.  deselectByIndex(3);
 deselectAll() Hebt die komplette Selektion auf, so dass am Ende nicht ausgewählt ist.  deselectAll()
 isMultiple() Wir verwendet, um abzufragen, ob ein Selectfeld muliple ist oder nicht. Ist es multiple so wird der Wert True zurückgegeben.  Element.isMultiple()
 submit() Formularfeld oder komplettes Formular wird versendet. Kann alternativ zum Klick auf den Absende-Button verwendet werden.  Formular.submit()

 

Bitte beachten Sie, dass Sie mit Selenium einzelne Felder absenden (submit();) können, nicht nur das komplette Formular, so wie Sie es bei HTML Formularen eigentlich gewohnt sind.

Im Selenese sieht der Befehl zum Absenden nur des Vornamen(felds) so aus: driver.findElement(ById("input_vorname")).submit();

Um das komplette Formular zu versenden, klicken Sie entweder mit click() auf den Absende-Button oder adressieren den form-open Tag entweder nach Name, Id oder was immer zur Verfügung steht.

 

Selenium Webdriver Befehlsübersicht


Selenium - Webdriver Academy

In diesem Abschnitt geht es darum, lokalisierte Elemente mit Selenium zu steuern, also zu „befehlen“. Hierzu gehört zum Beispiel das Anklicken eines Buttons oder Links, Textfelder zu beschreiben, Optionen in Select Feldern auszuwählen, Browsernavigation, usw.

Die Selenium Kommandos (oder Befehle) werden an die betreffenden Elemente einfach per «.» (Punkt) angehängt. Hier ein Beispiel mit dem click() Befehl:

findElement(By.cssSelector("li.search")).click();

 

Bitte beachten Sie, dass es sich hierbei um einen Funktionsüberblick handelt. Selenium Praxisbeispiele werden wir Ihnen weiter hinten noch aufzeigen.

 

Methode Beschreibung

Codebeispiel

 click() Entspricht dem Klick mit der linken Mouse-Taste auf ein sichtbares Element ohne Eingabe-/ Rückgabewert. Entgegen anderer Testautomatisierungs Werkzeuge wie z.B. QTP/ UFT, muss das Element sichtbar sein. Auch ein not visible DIV Layer kann nicht angesprochen werden. Anwendbar auf Links, Button, klickbare Elemente usw.    meinElement.click()
 click() Es gibt eine Ausnahme des click() Befehls, doch einen Rückgabewert zu erhalten, wenn z.B. Checkboxen angeklickt werden. Hier wird je nach Zustand der Checkbox ein True oder False zurückgegeben, wobei True für checked und False für non-checked steht.In der Praxis kann dann mit If abgefragt werden, ob die jeweilige Checkbox aktiviert wurde oder eben nicht.  meineCheckbox.click()
 get()  Öffnet ein Browserfenster und navigiert zu der URL, die in Klammern als String angegeben wurde. Die Angabe des Ziels ist obligatorisch.    driver.get(„https://www.newyorkcoffee.de„)
 getCurrentUrl() Als Rückgabewert erhält man die aktuelle URL. Es können keine Parameter innerhalb der Klammern mitgesandt werden.    driver.getCurrentUrl()
 getText() Findet den Text innerhalb eines Seitenelements (DIV, LI, Link a href, usw.) und sendet diesen als String zurück. Dieser Befehl liefert das gleiche Resultat wie getAttribute("innerText").    meinElement.getText()
 getTitle() Der Seitentitel (innerhalb der Title Tags) wird zurückgegeben, wobei führende oder folgende Whitespaces entfernt werden. Ist der Seitentitel leer oder nicht definiert, kommt eine leere Rückgabe. Es können keine Parameter mitgesandt werden.    driver.getTitle()
  getPageSource()  Der komplette Quelltext einer Site wird als String zurückgegeben. Auch hier können keine Parameter mitgesandt werden.   driver.getPageSource()
 
 navigate().to()  Öffnet neues Browserfenster oder Tab und die angegebene URL innerhalb der Klammern des to() Befehls.    driver.navigate().to(„https://www.newyorkcoffee.de„)
 navigate().refresh()  Refresh der aktuellen Website im gleichen Browserfenster.   driver.navigate().refresh()
 navigate().back()  Navigiert einen Schritt in der Browserhistorie zurück.   driver.navigate().back()
 navigate().forward()  Navigiert einen Schritt in der Browserhistorie nach vorn (falls vorhanden). Hierfür ist die Voraussetzung (gleiches Verhalten wir Browser selbst), dass bereits mindestens einmal der Befehl navigate().back() ausgelöst wurde.  driver.navigate().forward()
 sendKeys(String)  Mit dem Befehl sendKeys() können Formularfelder befüllt werden, wobei der Wert des Strings die Befüllung darstellt. Im Beispiel rechts wird der Wert „Rocketlab“ in das Formularelement formularElement geschrieben.   driver.formularElement.sendKeys(„Rocketlab“)
 close()   Das aktuelle Browserfenster wird geschlossen.   driver.close()
 quit()  Alle Fenster, die durch den Webdriver geöffnet wurden, werden geschlossen.   driver.quit()

 

Etwas komplexer wird es bei Formularen, wenn es Select oder gar Multi-Select Felder gibt. Komplexer, aber mit Selenium nicht schwieriger – das ist der Vorteil. Es gibt auch komfortable Abfragen, die man verwenden kann, um seine Selenese Abfragen zu steuern.

 

 


Launch the rocket!


Wir freuen uns auf neue Partner, die mit uns gemeinsam
außergewöhliche Dinge erschaffen möchten.
Schreiben Sie uns, wenn Sie mit uns zusammenarbeiten möchten.