Erstes Selenium Webdriver-Skript: JAVA-Beispielcodebeispiel

Inhaltsverzeichnis:

Anonim

Versuchen wir mit der Java-Klasse "myclass", die wir im vorherigen Tutorial erstellt haben, ein WebDriver-Skript zu erstellen, das:

  1. Holen Sie sich die Homepage von Mercury Tours
  2. Überprüfen Sie den Titel
  3. Drucken Sie das Ergebnis des Vergleichs aus
  4. Schließen Sie es, bevor Sie das gesamte Programm beenden.

WebDriver-Code

Unten finden Sie den tatsächlichen WebDriver-Code für die Logik, die im obigen Szenario dargestellt wird

Hinweis: Zum Starten von Firefox 35 müssen Sie den von Mozilla erstellten Geckotreiber verwenden, um den Webtreiber zu verwenden. Selenium 3.0, Gecko und Firefox haben Kompatibilitätsprobleme und die korrekte Einstellung könnte zu einer schwierigen Aufgabe werden. Wenn der Code nicht funktioniert, führen Sie ein Downgrade auf Firefox Version 47 oder niedriger durch. Alternativ können Sie Ihre Skripte in Chrome ausführen. Selen ist für Chrome sofort einsatzbereit. Sie müssen nur 3 Codezeilen ändern, damit Ihr Skript mit Chrome oder Firefox funktioniert

Paket newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// Kommentiere die obige Zeile und kommentiere die untere Zeile aus, um Chrome zu verwenden// importiere org.openqa.selenium.chrome.ChromeDriver;öffentliche Klasse PG1 {public static void main (String [] args) {// Deklaration und Instanziierung von Objekten / VariablenSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-Treiber = neuer FirefoxDriver ();// Kommentiere die obigen 2 Zeilen und kommentiere die unteren 2 Zeilen aus, um Chrome zu verwenden//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// WebDriver driver = new ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String expectedTitle = "Willkommen: Mercury Tours";String actualTitle = "";// starte Fire Fox und leite es an die Basis-URL weiterdriver.get (baseUrl);// den tatsächlichen Wert des Titels abrufenactualTitle = driver.getTitle ();/ ** Vergleichen Sie den tatsächlichen Titel der Seite mit dem erwarteten und drucken Sie ihn aus* das Ergebnis als "Bestanden" oder "Nicht bestanden"* /if (actualTitle.contentEquals (expectedTitle)) {System.out.println ("Test bestanden!");} else {System.out.println ("Test fehlgeschlagen");}}// Feuerfuchs schließendriver.close ();}}}}

Den Code erklären

Pakete importieren

Um zu beginnen, müssen Sie die folgenden zwei Pakete importieren:

  1. org.openqa.selenium. * - enthält die WebDriver-Klasse, die zum Instanziieren eines neuen Browsers erforderlich ist, der mit einem bestimmten Treiber geladen ist
  2. org.openqa.selenium.firefox.FirefoxDriver - enthält die FirefoxDriver-Klasse, die zum Instanziieren eines Firefox-spezifischen Treibers in dem von der WebDriver-Klasse instanziierten Browser erforderlich ist

Wenn Ihr Test kompliziertere Aktionen erfordert, z. B. den Zugriff auf eine andere Klasse, das Erstellen von Browser-Screenshots oder das Bearbeiten externer Dateien, müssen Sie auf jeden Fall mehr Pakete importieren.

Objekte und Variablen instanziieren

Normalerweise wird auf diese Weise ein Treiberobjekt instanziiert.

Eine FirefoxDriver-Klasse ohne Parameter bedeutet, dass das Standard-Firefox-Profil von unserem Java-Programm gestartet wird. Das Standard-Firefox-Profil ähnelt dem Starten von Firefox im abgesicherten Modus (es werden keine Erweiterungen geladen).

Der Einfachheit halber haben wir die Basis-URL und den erwarteten Titel als Variablen gespeichert.

Starten einer Browsersitzung

Die get () -Methode von WebDriver wird verwendet, um eine neue Browsersitzung zu starten und sie an die URL weiterzuleiten, die Sie als Parameter angeben.

Holen Sie sich den tatsächlichen Seitentitel

Die WebDriver-Klasse verfügt über die Methode getTitle () , mit der immer der Seitentitel der aktuell geladenen Seite abgerufen wird.

Vergleichen Sie die erwarteten und tatsächlichen Werte

Dieser Teil des Codes verwendet einfach eine grundlegende Java-if-else-Struktur, um den tatsächlichen Titel mit dem erwarteten zu vergleichen.

Beenden einer Browsersitzung

Mit der Methode " close () " wird das Browserfenster geschlossen.

Beenden des gesamten Programms

Wenn Sie diesen Befehl verwenden, ohne zuerst alle Browserfenster zu schließen, wird Ihr gesamtes Java-Programm beendet, während das Browserfenster geöffnet bleibt.

Test ausführen

Es gibt zwei Möglichkeiten, Code in der Eclipse-IDE auszuführen.

  1. Klicken Sie in der Menüleiste von Eclipse auf Ausführen> Ausführen.
  2. Drücken Sie Strg + F11 , um den gesamten Code auszuführen.

Wenn Sie alles richtig gemacht haben, würde Eclipse "Test bestanden!" Ausgeben.

Suchen von GUI-Elementen

Das Auffinden von Elementen in WebDriver erfolgt mithilfe der Methode " findElement (By. Locator ()) ". Der "Locator" -Teil des Codes ist derselbe wie der Locator, der zuvor in den Selenium IDE-Kapiteln dieser Tutorials beschrieben wurde. Tatsächlich wird empfohlen, GUI-Elemente mithilfe der IDE zu suchen und den Code nach erfolgreicher Identifizierung in WebDriver zu exportieren.

Hier ist ein Selenium-Beispielcode, der ein Element anhand seiner ID findet. Facebook wird als Basis-URL verwendet.

Paket newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;öffentliche Klasse PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-Treiber = neuer FirefoxDriver ();String baseUrl = "http://www.facebook.com";String tagName = "";driver.get (baseUrl);tagName = driver.findElement (By.id ("email")). getTagName ();System.out.println (tagName);driver.close ();System.exit (0);}}}}

Wir haben die Methode getTagName () verwendet, um den Tag-Namen des jeweiligen Elements zu extrahieren, dessen ID "email" lautet. Bei der Ausführung sollte dieser Code in der Lage sein, den Tag-Namen "Eingabe" korrekt zu identifizieren und ihn im Konsolenfenster von Eclipse auszudrucken.

Zusammenfassung zum Auffinden von Elementen

Variation Beschreibung Stichprobe
Durch. Klassenname findet Elemente basierend auf dem Wert des Attributs "class" findElement (By.className ("someClassName"))
Durch. cssSelector Findet Elemente basierend auf der zugrunde liegenden CSS-Selector-Engine des Treibers findElement (By.cssSelector ("input # email"))
Durch. Ich würde Findet Elemente anhand des Werts ihres Attributs "id" findElement (By.id ("someId"))
Durch. Link Text findet ein Linkelement anhand des genauen angezeigten Textes findElement (By.linkText ("REGISTRIERUNG"))
Durch. Name Findet Elemente anhand des Werts des Attributs "Name" findElement (By.name ("someName"))
Durch. PartialLinkText Findet Elemente, die den angegebenen Linktext enthalten findElement (By.partialLinkText ("REG"))
Durch. Verlinke den Namen Findet Elemente anhand ihres Tag-Namens findElement (By.tagName ("div"))
Durch. xpath Findet Elemente über XPath findElement (By.xpath ("// html / body / div / table / tbody / tr / td [2] / table / tbody / tr [4] / td / table / tbody / tr / td [2] / table / tbody / tr [2] / td [3] / form / table / tbody / tr [5] "))

Hinweis zur Verwendung von findElement (By.cssSelector ())

By.cssSelector () unterstützt die Funktion "enthält" nicht . Betrachten Sie den folgenden Selenium IDE-Code -

In der obigen Selenium-IDE wurde der gesamte Test bestanden. Im folgenden Selenium WebDriver-Skript hat derselbe Test jedoch einen Fehler generiert, da WebDriver das Schlüsselwort "enthält" nicht unterstützt, wenn es in der By.cssSelector () -Methode verwendet wird.

Gemeinsame Befehle

Instanziieren von Webelementen

Anstatt bei jedem Zugriff auf ein bestimmtes Element die lange Syntax "driver.findElement (By.locator ())" zu verwenden, können wir ein WebElement-Objekt für dieses Element instanziieren. Die WebElement-Klasse ist im Paket "org.openqa.selenium. *" Enthalten.

Klicken Sie auf ein Element

Klicken ist möglicherweise die häufigste Art der Interaktion mit Webelementen . Die click () -Methode wird verwendet, um das Klicken eines Elements zu simulieren. Das folgende Beispiel für Selenium Java zeigt, wie mit click () auf die Schaltfläche "Anmelden" von Mercury Tours geklickt wurde.

Folgende Dinge müssen bei der Verwendung der click () -Methode beachtet werden.

  • Es werden keine Parameter / Argumente benötigt.
  • Die Methode wartet automatisch auf das Laden einer neuen Seite, falls zutreffend.
  • Das Element, auf das geklickt werden soll, muss sichtbar sein (Höhe und Breite dürfen nicht gleich Null sein).

Befehle abrufen

Mit Get-Befehlen werden verschiedene wichtige Informationen zur Seite / zum Element abgerufen. Hier sind einige wichtige "get" -Befehle, mit denen Sie vertraut sein müssen.

Befehle Verwendung
get () Beispielnutzung:
  • Es öffnet automatisch ein neues Browserfenster und ruft die Seite ab, die Sie in Klammern angegeben haben.
  • Es ist das Gegenstück zum "open" -Befehl von Selenium IDE.
  • Der Parameter muss ein String- Objekt sein.
getTitle () Beispielverwendung:
  • Benötigt keine Parameter
  • Ruft den Titel der aktuellen Seite ab
  • Führende und nachfolgende Leerzeichen werden abgeschnitten
  • Gibt eine Nullzeichenfolge zurück, wenn die Seite keinen Titel hat
getPageSource () Beispielverwendung:
  • Benötigt keine Parameter
  • Gibt den Quellcode der Seite als String-Wert zurück
getCurrentUrl () Beispielverwendung:
  • Benötigt keine Parameter
  • Ruft die Zeichenfolge ab, die die aktuelle URL darstellt , die der Browser betrachtet
getText () Beispielverwendung:
  • Ruft den inneren Text des von Ihnen angegebenen Elements ab

Befehle navigieren

Mit diesen Befehlen können Sie verschiedene Webseiten aktualisieren, aufrufen und zwischen ihnen wechseln.

navigieren (). zu () Beispielnutzung:
  • Es öffnet automatisch ein neues Browserfenster und ruft die Seite ab , die Sie in Klammern angegeben haben.
  • Es macht genau das Gleiche wie die get () -Methode.
navigieren (). refresh () Beispielnutzung:
  • Benötigt keine Parameter.
  • Es aktualisiert die aktuelle Seite.
navigieren (). zurück () Beispielnutzung:
  • Benötigt keine Parameter
  • Führt Sie um eine Seite im Browserverlauf zurück.
navigieren (). vorwärts () Beispielnutzung:
  • Benötigt keine Parameter
  • Führt Sie im Browserverlauf um eine Seite weiter.

Browserfenster schließen und beenden

close () Beispielnutzung:
  • Benötigt keine Parameter
  • Es wird nur das Browserfenster geschlossen, das WebDriver derzeit steuert .
quit () Beispielnutzung:
  • Benötigt keine Parameter
  • Es schließt alle Fenster, die WebDriver geöffnet hat.

Versuchen Sie, den folgenden Code auszuführen, um den Unterschied zwischen close () und quit () deutlich zu machen. Es wird eine Webseite verwendet, die beim Laden der Seite automatisch ein Fenster öffnet und nach dem Beenden ein weiteres öffnet.

Beachten Sie, dass nur das übergeordnete Browserfenster geschlossen wurde und nicht die beiden Popup-Fenster.

Wenn Sie jedoch quit () verwenden, werden alle Fenster geschlossen - nicht nur das übergeordnete. Wenn Sie den folgenden Code ausführen, werden Sie feststellen, dass die beiden oben genannten Popups automatisch ebenfalls geschlossen werden.

Paket newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;öffentliche Klasse PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-Treiber = neuer FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // Mit QUIT werden alle Fenster geschlossen}}}}

Zwischen Frames wechseln

Um auf GUI-Elemente in einem Frame zuzugreifen, sollten Sie WebDriver zunächst anweisen, sich zuerst auf den Frame oder das Popup-Fenster zu konzentrieren, bevor wir auf Elemente in diesem Frame zugreifen können. Nehmen wir zum Beispiel die Webseite http://demo.guru99.com/selenium/deprecated.html

Diese Seite hat 3 Frames, deren "Name" -Attribute oben angegeben sind. Wir möchten auf den oben gelb eingekreisten Link "Veraltet" zugreifen. Dazu müssen wir WebDriver zunächst anweisen, mit der Methode "switchTo (). Frame ()" zum Frame "classFrame" zu wechseln . Wir werden das Attribut name des Frames als Parameter für den Teil "frame ()" verwenden.

Paket newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;öffentliche Klasse PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-Treiber = neuer FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Veraltet")). click ();driver.close ();}}}}

Nach dem Ausführen dieses Codes sehen Sie, dass der Frame "classFrame" zur Seite "Veraltete API" weitergeleitet wird. Dies bedeutet, dass unser Code erfolgreich auf den Link "Veraltet" zugreifen konnte.

Wechseln zwischen Popup-Fenstern

Mit WebDriver können Popup-Fenster wie Warnungen angezeigt werden, anders als in Selenium IDE. Um auf die Elemente in der Warnung zuzugreifen (z. B. auf die darin enthaltene Nachricht), müssen Sie die Methode "switchTo (). Alert ()" verwenden. Im folgenden Code verwenden wir diese Methode, um auf die Warnbox zuzugreifen und ihre Nachricht dann mit der Methode "getText ()" abzurufen. Anschließend schließen wir die Warnbox automatisch mit der Option "switchTo (). Alert (). Accept (). " Methode.

Gehen Sie zuerst zu http://jsbin.com/usidix/1 und klicken Sie manuell auf "Los!" Klicken Sie dort und überzeugen Sie sich selbst vom Nachrichtentext.

Sehen wir uns dazu den Selenium-Beispielcode an.

Paket mypackage;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;öffentliche Klasse myclass {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-Treiber = neuer FirefoxDriver ();String alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value =" Go! \ "]")). click ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);driver.quit ();}}}}

Beachten Sie auf der Eclipse-Konsole, dass die gedruckte Warnmeldung lautet:

Wartet

Es gibt zwei Arten von Wartezeiten.

  1. Implizite Wartezeit - wird verwendet, um die Standardwartezeit im gesamten Programm festzulegen
  2. Explizites Warten - wird verwendet, um die Wartezeit nur für eine bestimmte Instanz festzulegen

Implizites Warten

  • Es ist einfacher zu codieren als explizite Wartezeiten.
  • Es wird normalerweise im Instanziierungsteil des Codes deklariert.
  • Zum Importieren benötigen Sie nur ein zusätzliches Paket.

Um eine implizite Wartezeit zu verwenden, müssten Sie dieses Paket in Ihren Code importieren.

Fügen Sie dann im Instanziierungsteil Ihres Codes dies hinzu.

Explizites Warten

Explizite Wartezeiten werden mit den Klassen WebDriverWait und ExpectedCondition durchgeführt . Für das folgende Selenium WebDriver-Beispiel warten wir bis zu 10 Sekunden, bis ein Element mit der ID "Benutzername" sichtbar wird, bevor wir mit dem nächsten Befehl fortfahren. Hier sind die Schritte.

Schritt 1

Importieren Sie diese beiden Pakete:

Schritt 2

Deklarieren Sie eine WebDriverWait-Variable. In diesem Beispiel verwenden wir "myWaitVar" als Namen der Variablen.

Schritt 3

Verwenden Sie myWaitVar mit ExpectedConditions für Teile, in denen das explizite Warten erforderlich ist. In diesem Fall verwenden wir die explizite Wartezeit für die Eingabe "Benutzername" (Mercury Tours HomePage), bevor wir den Text "Tutorial" darauf eingeben.

Bedingungen

Die folgenden Methoden werden in Bedingungs- und Schleifenoperationen verwendet:

  • isEnabled () wird verwendet, wenn Sie überprüfen möchten, ob ein bestimmtes Element aktiviert ist oder nicht, bevor Sie einen Befehl ausführen.
  • isDisplayed () wird verwendet, wenn Sie überprüfen möchten, ob ein bestimmtes Element angezeigt wird oder nicht, bevor Sie einen Befehl ausführen.
  • isSelected () wird verwendet, wenn Sie überprüfen möchten, ob ein bestimmtes Kontrollkästchen, Optionsfeld oder eine bestimmte Option in einem Dropdown-Feld aktiviert ist. Bei anderen Elementen funktioniert es nicht.

Verwenden von ExpectedConditions

Die ExpectedConditions-Klasse bietet eine größere Anzahl von Bedingungen, die Sie in Verbindung mit der till () -Methode von WebDriverWait verwenden können.

Im Folgenden finden Sie einige der am häufigsten verwendeten ExpectedConditions-Methoden.

  • alertIsPresent () - wartet, bis ein Warnfeld angezeigt wird.
  • elementToBeClickable () - Wartet, bis ein Element sichtbar und gleichzeitig aktiviert ist. Der folgende Beispiel-Selenium-Code wartet, bis das Element mit zuerst sichtbar und aktiviert wird, bevor dieses Element als WebElement-Variable mit dem Namen "txtUserName" zugewiesen wird.
  • frameToBeAvailableAndSwitchToIt () - Wartet, bis der angegebene Frame bereits verfügbar ist, und wechselt dann automatisch zu diesem.

Ausnahmen fangen

Bei Verwendung von isEnabled (), isDisplayed () und isSelected () geht WebDriver davon aus, dass das Element bereits auf der Seite vorhanden ist. Andernfalls wird eine NoSuchElementException ausgelöst . Um dies zu vermeiden, sollten wir einen Try-Catch-Block verwenden, damit das Programm nicht unterbrochen wird.

WebElement txtbox_username = driver.findElement (By.id ("Benutzername"));Versuchen{if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("Tutorial");}}}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}}

Wenn Sie explizite Wartezeiten verwenden, ist die Art der Ausnahme, die Sie abfangen sollten, die "TimeoutException".

Zusammenfassung

  • Um die WebDriver-API verwenden zu können, müssen Sie mindestens diese beiden Pakete importieren.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Die Methode get () entspricht dem Befehl "open" der Selenium IDE.
  • Das Auffinden von Elementen in WebDriver erfolgt mithilfe der findElement () -Methode.
  • Die folgenden Optionen stehen zum Suchen von Elementen in WebDriver zur Verfügung:
  • Durch. Klassenname
  • Durch. cssSelector
  • Durch. Ich würde
  • Durch. Link Text
  • Durch. Name
  • Durch. PartialLinkText
  • Durch. Verlinke den Namen
  • Durch. xpath
  • Die By.cssSelector () nicht unterstützt die „enthält“ Funktion.
  • Sie können ein Element mithilfe der WebElement- Klasse instanziieren .
  • Das Klicken auf ein Element erfolgt mit der click () -Methode.
  • WebDriver bietet die folgenden nützlichen get-Befehle :
  • erhalten()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver bietet diese nützlichen Navigationsbefehle
  • navigieren (). vorwärts ()
  • navigieren (). zurück ()
  • navigiere (). zu ()
  • navigieren (). aktualisieren ()
  • Die Methoden close () und quit () werden zum Schließen von Browserfenstern verwendet. Close () wird verwendet, um ein einzelnes Fenster zu schließen. while quit () wird verwendet, um alle Fenster zu schließen, die dem übergeordneten Fenster zugeordnet sind, das vom WebDriver-Objekt gesteuert wurde.
  • Die Methoden switchTo (). Frame () und switchTo (). Alert () werden verwendet, um den Fokus von WebDriver auf einen Frame bzw. eine Warnung zu richten.
  • Implizite Wartezeiten werden verwendet, um die Wartezeit im gesamten Programm festzulegen , während explizite Wartezeiten nur für bestimmte Teile verwendet werden.
  • Sie können die Methoden isEnabled (), isDisplayed (), isSelected () und eine Kombination aus WebDriverWait- und ExpectedConditions- Methoden verwenden, um den Status eines Elements zu überprüfen. Sie überprüfen jedoch nicht, ob das Element nicht vorhanden ist.
  • Wenn isEnabled (), isDisplayed () oder isSelected () aufgerufen wurde, während das Element nicht vorhanden war, löst WebDriver eine NoSuchElementException aus .
  • Wenn die Methoden WebDriverWait und ExpectedConditions aufgerufen wurden, während das Element nicht vorhanden war, löste WebDriver eine TimeoutException aus .

Hinweis:

driver.get (): Es wird verwendet, um zu einer bestimmten Website zu gelangen. Der Browserverlauf und die Cookies werden jedoch nicht verwaltet. Daher können wir die Vorwärts- und Rückwärtsschaltfläche nicht verwenden. Wenn wir darauf klicken, wird die Seite nicht geplant

driver.navigate (): Es wird verwendet, um zur jeweiligen Website zu gelangen, behält jedoch den Browserverlauf und die Cookies bei, sodass wir während der Codierung von Testcase mithilfe der Vorwärts- und Rückwärtsschaltfläche zwischen den Seiten navigieren können