Tag Archives: xpath

19Apr/17
software testen IT

Selenium Webdriver

Elemente auf der Webseite finden und mit diesen Aktionen ausführen:
Eindeutige und einzigartige Identifikationswege mit Hilfe des DOM (Document Object Model) müssen bei den Elementen auf der Webseite identifiziert werden, damit man mit diesen, Aktionen wie klicken, Mouse Over, Text senden durchgeführt werden können.

X können in dem Fall id, name, classname, xpath(Syntax eines xpaths: .//TAG[@attribute= value]

), linktext, parital linktext, tag name, selector sein, die sie mit Hilfe von F12 und klicken des Elements identifizieren können. Ein kleiner Tipp ist das Installieren der Addons Firebug und Firepath auf Mozilla Firefox. Diese vereinfachen das Finden der Elemente.
Auch mit CSS Elementen wie ID und Class können Elemente eindeutig identifiziert werden
z.B. driver.findElement(By.cssSelector(selector)c)

Diese Elemente müssen einzigartig auf der Webanwendung / Webseite sein. Der Hinweis „matching node“ onyl! bei Firepath bei der Eingabe des xpath beispielsweise ist ein Hinweis auf eine eindeutige Identifizierung eines Webelements.

Was macht man mit den gefundenen Elementen? Welche Aktionen werden durchgeführt?
 Auf den Elementen wird geklickt
 Eingetragene Werte werden gelöscht
 Auf einem Radiobutton wird geklickt
 Beim Dropdown Menu wird ein Wert selektiert
 Nach unten und nach oben scrollen
 Zwischen Webseiten wird navigiert / gesprungen

Darüber hinaus können Werte von Attributen eines Elements in einem Datentyp gespeichert werden.
WebElement element = driver.findElement(By.id(„name“));
String attributeValue = element.getAttribute(„type“);

Wie wähle ich ein Feld in einem Kalender aus?
Siehe Bild

Auch beim Integrieren eines IFrames gibt es Besonderheiten. Ein IFrame ist wie eine neue Seite zu berücksichtigen.

Wegen Wartbarkeit ist es ratsam den Code übersichtlich zu halten. Hierbei können generelle Methoden helfen.

Screenshots beim Testen
Besonders beim Testen hat eine ausführliche Dokumentation eine hohe Signifikanz. Da darf ein Screenshots nicht fehlen. Doch auch hierfür bietet Selenium eine einfache Möglichkeit an mit Hilfe der Klasse TakeScreenshot.

Implicit wait & Explicit wait

Wichtig ist eine Wartezeit nach dem Finden von Webelementen zu implementieren. Je nach Ladezeit ist es wichtig, dass einige Elemente Zeit brauchen bis sie fertig geladen sind. Wenn eine Wartezeit nicht implementiert ist, dann können Aktionen auf die geplanten Webelemente nicht durchgeführt werden. Es kommt zur Fehlermeldung. Aus dem Grund ist es wichtig diese Wartezeiten (in Sekunden!) einzubauen. Hierbei gibt es zwei verschiedene Wege:
1. Implicit Wait: Falls ein Element nicht sofort verfügbar ist, sagt der WebDriver dem DOM eine gewünschte Zeit zu warten. Bevor ein Fehler (oft ein Exception) geworfen wird, wird die gewünschte Zeit gewartet. Der Defaultwert ist auf 0 Sekunden gesetzt. Ein empfohlener Wert liegt bei 3 Sekunden.
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

2. Explicit Wait: Mit dieser Wartezeit wird die Ausführung einer Aktion bis eine Bedingung erfüllt ist pausiert / gewartet. Diese Wartezeit kann im Gegensatz zu dem „implicit Wait“ für nur bestimmte Elemente definiert werden. Aus unterschiedlichen Gründen kann das Laden von bestimmten Elementen mehr als 30 Sekunden dauern. In diesen Fällen macht der „implicit Wait“ keinen Sinn. Beispiele für die anknüpfbaren Bedingungen sind
 elementToBeClickable
 presenceOfElementLocated
 titleContains

„elementToBeClickable; presenceofElementLocated; - Beispiele für Elemente

 

Einbinden von JavaSript:
Für das Ausführen von JavaScript Code ist das Einbinden von JavaScript ebenfalls möglich.

JavascriptExecutor jse;
jse = (JavascriptExecutor)driver;
jse.executeScript(„window.scrollBy(0, 600)“);

JUnit ist ein test-framework:
@BeforeClass - VOR DER ersten Testmethode in der aktuellen klasse wird ausgeführt
@AfterClass  nach der letzten Testmethode in der aktuellen klasse wird ausgeführt
@Before  wird vor jeder Methode ausgeführt
@After  nach jeder Methode
@Test dies ist mein Test fall…> inkludier im Bericht
Test Framework:
Ein Test Framework definiert den Rahmen für Testfälle, damit sie den Standards folgen. Dies erhöht die Genauigkeit und die Wartbarkeit des automatisierten Testprozesses.

Das automatische Testen schaut einfach aus. Sie finden Webelemente und führen Aktionen aus. Doch je mehr Testfälle vorliegen desto schwerer wird es diese zu warten. Wenn mehrere Codes für eine Seite gemacht wird dann wird eine kleine Änderung zu Änderung von zahlreichen Codes führen. Es wäre besser wenn in einer Klasse alle Elemente definiert werden. Diesen Gedanken führt das Page Object Model aus.
Page Object Model:
Jede Seite wird als sein Objekt betrachtet. Jede Page Klasse enthält statische Methoden um alle Elemente einer Seite zu wiedergeben. Somit wird eine Seite wartbar und nachhaltig kann sie verbessert werden. Es gibt schließlich eine Methode die auf die Elemente zugreifen und diese Aktionen wie sendkeys(), oder clear() etc. durchführt. Dieses Model verwendet ein Object Repository für die Web UI Elemente.
Page Factory:
Bei Page Factory werden Object repository und Testmethoden getrennt betrachtet. Mit Hilfe der Annotation @ FindBy können Webelemente gefunden werden. Die initElements Methode initialisiert die WebElemente. EineKlasse mit allen Objekt wird erstellt..

Somit können Methoden auf diesen Topf von Elementen zugreifen.
Somit werden Methoden erstellt, welche sprechend sind und einfach können Methoden erstellt werden. Diese sind wartbar. Diese effiziente Codingstrategie verhindert das Duplikat von Code.

Der Code ist übersichtlich und vorallem sprechend und leicht zu ändern.
Vorteile:
Objekte einer Seite sollten von den Tests getrennt werden
• Object repositry ist unabhängig von Testfällen
• Weniger und übersichtlicher Code
• Methoden erhalten realistischere Namen so dass dies leicht verständlich ist für alle Beteiligen.

Prüfen von Links einer Webseite
Wichtig ist auch zu prüfen, ob alle Links einer Seite auch funktionieren. Hierzu kann der folgende Code dienen.
//Mit dieser Methode werden alle Links in eine Liste gespeichert.
Public static List clickableLinks(WebDriver driver) {
List linksToClick = new ArrayList();
List elements = driver.findElements(By.tagName(„a“));
elements.addAll(driver.findElements(By.tagName(„img“)));

// Mit dieser Methode wird der HTTP Code der jeweiligen URL geprüft und eine entsprechende Antwort wird geliefert.

Ein komplettes Projekt wird ein folgende Pakete haben:
PageFactory, Pages und Test.

Mit AjaxELementLocatorFactory wird das langasame Laden in PageFactory identifziert
AjaxELementLocatorFactory factory = new AjaxElementLocatorFactory (driver, 100);

Erst nach 100 Sekunden wenn ein Element nicht sichtbar ist eine Aktion auszuüben würde ein „NoSuchElementException“ geworfen.