Beispiel für ein Selenium Webdriver Java-Programm (Beispielcode)

Selenium-Java-Beispiel

Verwendung der Javac Um die Klasse „myclass“ zu verwenden, die wir im vorherigen Tutorial erstellt haben, versuchen wir, ein WebDriver-Skript zu erstellen, das Folgendes bewirkt:

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

Beispielcode für Selenium WebDriver

Nachfolgend finden Sie den tatsächlichen WebDriver-Code für die im obigen Szenario dargestellte Logik

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//comment the above line and uncomment below line to use Chrome
//import org.openqa.selenium.chrome.ChromeDriver;
public class PG1 {


    public static void main(String[] args) {
        // declaration and instantiation of objects/variables
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
		WebDriver driver = new FirefoxDriver();
		//comment the above 2 lines and uncomment below 2 lines to use Chrome
		//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
		//WebDriver driver = new ChromeDriver();
    	
        String baseUrl = "http://demo.guru99.com/test/newtours/";
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = "";

        // launch Fire fox and direct it to the Base URL
        driver.get(baseUrl);

        // get the actual value of the title
        actualTitle = driver.getTitle();

        /*
         * compare the actual title of the page with the expected one and print
         * the result as "Passed" or "Failed"
         */
        if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }
       
        //close Fire fox
        driver.close();
    }

}

Hinweis: Beginnt Firefox 35, Sie müssen den von Mozilla erstellten Gecko-Treiber verwenden, um den Web-Treiber zu verwenden. Selen 3.0, Gecko und firefox hat Kompatibilitätsprobleme und deren korrekte Einstellung könnte eine schwierige Aufgabe werden. Wenn der Code nicht funktioniert, führen Sie ein Downgrade durch Firefox Version 47 oder niedriger. Alternativ können Sie Ihre Skripte auch in Chrome ausführen. Selen wirkt aus dem box für Chrome. Sie müssen nur drei Codezeilen ändern, damit Ihr Skript mit Chrome funktioniert Firefox

Den Code erklären

Pakete importieren

Um zu beginnen, müssen Sie Follo importierenwing zwei Pakete:

  1. org.openqa.selenium.*– enthält die WebDriver-Klasse, die zum Instanziieren eines neuen Browsers benötigt wird, der mit einem bestimmten Treiber geladen ist
  2. org.openqa.selenium.firefox.FirefoxLED Treiber – enthält die FirefoxTreiberklasse, die zum Instanziieren von a benötigt wird Firefox-spezifischer Treiber auf den von der WebDriver-Klasse instanziierten Browser

Wenn Ihr Test kompliziertere Aktionen erfordert, wie 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.

Instanziieren von Objekten und Variablen

Normalerweise wird ein Treiberobjekt auf diese Weise instanziiert.

WebDriver driver = new FirefoxDriver();

A FirefoxTreiberklasse ohne Parameter bedeutet, dass die Standardeinstellung ist Firefox Das Profil wird von unserem Java-Programm gestartet. Der Standard Firefox Das Profil ähnelt dem Starten 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

WebDrivers get () Mit der Methode wird eine neue Browsersitzung gestartet und an die URL weitergeleitet, die Sie als Parameter angeben.

driver.get(baseUrl);

Holen Sie sich den tatsächlichen Seitentitel

Die WebDriver-Klasse verfügt über die getTitle () Methode, die immer verwendet wird, um den Seitentitel der aktuell geladenen Seite abzurufen.

actualTitle = driver.getTitle();

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.

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

Beenden einer Browsersitzung

Das "schließen()Die Methode wird zum Schließen des Browserfensters verwendet.

driver.close();

Beendigung des gesamten Programms

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

System.exit(0);

Ausführen des Tests

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

  1. On EclipseKlicken Sie in der Menüleiste auf Ausführen > Ausführen.
  2. Presse- Ctrl + F11 um den gesamten Code auszuführen.

Ausführen des Tests

Wenn Sie alles richtig gemacht haben, Eclipse würde „Test bestanden!“ ausgeben.

Ausführen des Tests

Auffinden von GUI-Elementen

Das Auffinden von Elementen in WebDriver erfolgt mithilfe der „findElement(By.Locator())" Methode. Der „Locator“-Teil des Codes ist derselbe wie alle zuvor besprochenen Locators Selen IDE Kapitel dieser Tutorials. Tatsächlich wird empfohlen, GUI-Elemente mithilfe der IDE zu finden und den Code nach erfolgreicher Identifizierung in WebDriver zu exportieren.

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

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG2 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
    	WebDriver driver = new 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 nutzten die getTagName() Methode zum Extrahieren des Tag-Namens dieses bestimmten Elements, dessen ID „email“. Wenn dieser Code ausgeführt wird, sollte er in der Lage sein, den Tag-Namen „Eingabe“ korrekt zu identifizieren und ihn auszugeben Eclipses Konsolenfenster.

Auffinden von GUI-Elementen

Zusammenfassung zum Auffinden von Elementen

Variation Beschreibung Stichprobe
Nach.Klassenname findet Elemente basierend auf dem Wert des „class“-Attributs findElement(By.className(“someClassName”))
Von.cssSelector findet Elemente basierend auf der zugrunde liegenden CSS-Auswahl-Engine des Treibers findElement(By.cssSelector(“input#email"))
Nach.id Lokalisiert Elemente anhand des Werts ihres „id“-Attributs findElement(By.id(“someId”))
 
Von.linkText findet ein Linkelement anhand des genauen angezeigten Textes findElement(By.linkText(“REGISTRATION”))
 
Namentlich Lokalisiert Elemente anhand des Werts des Attributs „name“. findElement(By.name(“someName”))
 
Von.partialLinkText findet Elemente, die den angegebenen Linktext enthalten findElement(By.partialLinkText(“REG”))
 
Von.tagName Lokalisiert Elemente anhand ihres Tag-Namens findElement(By.tagName(“div”))
 
Von.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 –

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

In der oben genannten Selenium-IDE wurde der gesamte Test bestanden. Im Selenium WebDriver-Skript unten erzeugte derselbe Test jedoch einen Fehler, da WebDriver das Schlüsselwort „contains“ nicht unterstützt, wenn es in der Methode By.cssSelector() verwendet wird.

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

Gemeinsame Befehle

Instanziieren von Webelementen

Anstatt jedes Mal, wenn Sie auf ein bestimmtes Element zugreifen, die lange Syntax „driver.findElement(By.locator())“ zu verwenden, können wir ein WebElement-Objekt dafür instanziieren. Die WebElement-Klasse ist im Paket „org.openqa.selenium.*“ enthalten.

Instanziieren von Webelementen

Klicken Sie auf ein Element

Klicken ist vielleicht die häufigste Art der Interaktion mit Webelementen. Der click() Die Methode wird verwendet, um das Klicken eines beliebigen Elements zu simulieren. Die folgendenwing Das Beispiel von Selenium Java zeigt, wie click() wurde verwendet, um auf die Schaltfläche „Anmelden“ von Mercury Tours zu klicken.

Klicken Sie auf ein Element

Following Bei der Verwendung der click()-Methode müssen einige Dinge beachtet werden.

  • Es werden keine Parameter/Argumente benötigt.
  • Die Methode wartet ggf. automatisch auf das Laden einer neuen Seite.
  • Das anzuklickende Element muss sichtbar sein (Höhe und Breite dürfen ungleich Null sein).

Holen Sie sich Befehle

Get-Befehle rufen verschiedene wichtige Informationen über die Seite/das Element ab. Hier sind einige wichtige „Get“-Befehle, mit denen Sie vertraut sein müssen.

Befehle Anwendungsbereich
get ()

Verwendungsbeispiel:

  • Es öffnet automatisch ein neues Browserfenster und ruft die Seite ab, die Sie in den Klammern angeben.
  • Es ist das Gegenstück zum „open“-Befehl von Selenium IDE.
  • Der Parameter muss a sein Schnur Objekt.
getTitle ()

Verwendungsbeispiel:

  • Benötigt keine Parameter
  • Ruft den Titel der aktuellen Seite ab
  • Führende und nachfolgende Leerzeichen werden gekürzt
  • Gibt eine Nullzeichenfolge zurück, wenn die Seite keinen Titel hat
getPageSource()

Verwendungsbeispiel:

  • Benötigt keine Parameter
  • Gibt den Quellcode der Seite als String-Wert zurück
getAktuelleUrl()

Verwendungsbeispiel:

  • Benötigt keine Parameter
  • Ruft die Zeichenfolge ab, die die aktuelle URL darstellt, die der Browser betrachtet
getText ()

Verwendungsbeispiel:

  • Ruft den inneren Text des von Ihnen angegebenen Elements ab

Navigieren Sie durch Befehle

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

navigieren().to()

Verwendungsbeispiel:

  • Es öffnet automatisch ein neues Browserfenster und ruft die Seite ab, die Sie in den Klammern angeben.
  • Es macht genau das Gleiche wie das get() Methode.
navigieren().refresh()

Verwendungsbeispiel:

  • Benötigt keine Parameter.
  • Es aktualisiert die aktuelle Seite.
navigieren().back()

Verwendungsbeispiel:

  • Benötigt keine Parameter
  • Bringt Sie im Browserverlauf um eine Seite zurück.
navigieren().forward()

Verwendungsbeispiel:

  • Benötigt keine Parameter
  • Bringt Sie im Browserverlauf eine Seite weiter.

Schließen und Beenden von Browserfenstern

schließen()

Verwendungsbeispiel:

  • Benötigt keine Parameter
  • Es schließt nur das Browserfenster, das WebDriver derzeit steuert.
Verlassen()

Verwendungsbeispiel:

  • Benötigt keine Parameter
  • Es schließt alle Fenster, die WebDriver geöffnet hat.

Schließen und Beenden von Browserfenstern

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

Schließen und Beenden von Browserfenstern

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

Schließen und Beenden von Browserfenstern

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

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG3 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        driver.get("http://www.popuptest.com/popuptest2.html");
        driver.quit();  // using QUIT all windows will close
    }
}

Zwischen Frames wechseln

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

Zwischen Frames wechseln

Diese Seite verfügt über 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, mithilfe von zum „classFrame“-Frame zu wechseln „switchTo().frame()“ Methode. Wir verwenden das Namensattribut des Frames als Parameter für den Teil „frame()“.

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

Nachdem Sie diesen Code ausgeführt haben, werden Sie sehen, dass der Frame „classFrame“ zur Seite „Veraltet API“ weitergeleitet wird, was bedeutet, dass unser Code erfolgreich auf den Link „Veraltet“ zugreifen konnte.

Zwischen Popup-Fenstern wechseln

WebDriver ermöglicht im Gegensatz zur Selenium IDE die Anzeige von Popup-Fenstern wie Warnungen. Um auf die Elemente innerhalb der Warnung zuzugreifen (z. B. die darin enthaltene Nachricht), müssen wir die verwenden "switchTo().alert()" Methode. Im folgenden Code verwenden wir diese Methode, um auf die Warnung zuzugreifen box und rufen Sie dann die Nachricht mithilfe von ab "getText()" Methode und schließen Sie dann automatisch die Warnung box Verwendung der "switchTo().alert().accept()" Methode.

Gehen Sie zunächst zu https://output.jsbin.com/usidix/1 und klicken Sie manuell auf „Los!“ Klicken Sie dort auf die Schaltfläche und sehen Sie sich den Nachrichtentext an.

Zwischen Popup-Fenstern wechseln

Sehen wir uns dazu den Selenium-Beispielcode an:

package mypackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class myclass {

    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
        WebDriver driver = new 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();
       
    }
}

Auf dem Eclipse Beachten Sie, dass die gedruckte Warnmeldung wie folgt lautet:

Zwischen Popup-Fenstern wechseln

Wartet

Es gibt zwei Arten von Wartezeiten.

  1. Implizites Warten – 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 programmieren als explizite Wartezeiten.
  • Es wird normalerweise im Instanziierungsteil des Codes deklariert.
  • Zum Importieren benötigen Sie nur ein zusätzliches Paket.

Um mit der Verwendung einer impliziten Wartezeit zu beginnen, müssten Sie dieses Paket in Ihren Code importieren.

Implizites Warten

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

Implizites Warten

Explizites Warten

Explizite Wartevorgänge werden mithilfe der Klassen WebDriverWait und ExpectedCondition durchgeführt. Für die folgendenwing Beispiel für Selenium WebDriver: Wir warten 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:

Explizites Warten

Schritt 2:

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

Explizites Warten

Schritt 3:

Verwenden Sie myWaitVar mit ExpectedConditions für Abschnitte, in denen das explizite Warten erforderlich ist. In diesem Fall warten wir explizit auf die Eingabe „Benutzername“ (Mercury Tours HomePage), bevor wir den Text „Tutorial“ darauf eingeben.

Explizites Warten

AGB

Following Methoden werden in bedingten Operationen und Schleifenoperationen verwendet –

  • aktiviert() wird verwendet, wenn Sie vor der Ausführung eines Befehls überprüfen möchten, ob ein bestimmtes Element aktiviert ist oder nicht.

Bedingungen isEnabled()

  • wird angezeigt() wird verwendet, wenn Sie vor der Ausführung eines Befehls überprüfen möchten, ob ein bestimmtes Element angezeigt wird oder nicht.

Bedingungen isDisplayed()

  • ist ausgewählt() wird verwendet, wenn Sie überprüfen möchten, ob eine bestimmte aus der Ferne überprüfen box, Optionsfeld oder Option in einem Dropdown-Menü box ist ausgewählt. Bei anderen Elementen funktioniert es nicht.

Bedingungen isSelected()

Verwenden von ExpectedConditions

Die ExpectedConditions-Klasse bietet einen größeren Satz von Bedingungen, die Sie in Verbindung mit der Until()-Methode von WebDriverWait verwenden können.

Nachfolgend sind einige der gängigsten ExpectedConditions-Methoden aufgeführt.

  • alarmIsPresent() – wartet bis zu einer Warnung box wird angezeigt.

Verwenden von ExpectedConditions alarmIsPresent()

  • elementToBeClickable() – Wartet, bis ein Element sichtbar und gleichzeitig aktiviert ist. Der folgende Beispiel-Selenium-Code wartet, bis das Element mit der ID=“Benutzername“ sichtbar und aktiviert wird, bevor er dieses Element als WebElement-Variable mit dem Namen „txtUserName“ zuweist.

Verwenden von ExpectedConditions

  • frameToBeAvailableAndSwitchToIt() – Wartet, bis der angegebene Frame bereits verfügbar ist, und wechselt dann automatisch zu diesem.

Verwenden von ExpectedConditions elementToBeClickable()

Ausnahmen abfangen

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

WebElement txtbox_username = driver.findElement(By.id("username"));
try{
        if(txtbox_username.isEnabled()){
            txtbox_username.sendKeys("tutorial");
        }
    }

catch(NoSuchElementException nsee){
            System.out.println(nsee.toString());
 }

Wenn Sie explizite Wartezeiten verwenden, sollten Sie den Ausnahmetyp „TimeoutException“ abfangen.

Ausnahmen abfangen

Zusammenfassung

  • Um die WebDriver-API verwenden zu können, müssen Sie mindestens diese beiden Pakete importieren.
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.FirefoxLED Treiber
  • Der get() Die Methode entspricht dem „open“-Befehl der Selenium IDE.
  • Das Auffinden von Elementen in WebDriver erfolgt mithilfe von findElement() Methode.
  • Die folgendenwing sind die verfügbaren Optionen zum Auffinden von Elementen in WebDriver:
  • Nach.Klassenname
  • Von.cssSelector
  • Nach.id
  • Von.linkText
  • Namentlich
  • Von.partialLinkText
  • Von.tagName
  • Von.xpath
  • Der By.cssSelector() nicht unterstütz die „enthält“ -Funktion
  • Sie können ein Element mithilfe der WebElement-Klasse instanziieren.
  • Das Klicken auf ein Element erfolgt mit dem click() Methode.
  • WebDriver bietet diese nützlichen Get-Befehle:
  • get ()
  • getTitle ()
  • getPageSource()
  • getAktuelleUrl()
  • getText ()
  • WebDriver bietet diese nützlichen Navigationsbefehle
  • navigieren().forward()
  • navigieren().back()
  • navigieren().to()
  • navigieren().refresh()
  • Die Methoden close() und quit() werden zum Schließen von Browserfenstern verwendet. Close() wird verwendet, um ein einzelnes Fenster zu schließen; während quit() wird verwendet, um alle Fenster zu schließen, die dem übergeordneten Fenster zugeordnet sind, das vom WebDriver-Objekt gesteuert wurde.
  • Der switchTo().frame() und switchTo().alert() Methoden werden verwendet, um den Fokus von WebDriver auf einen Frame bzw. eine Warnung zu lenken.
  • Implicit waits werden verwendet, um die Wartezeit während des gesamten Programms festzulegen, while explicit waits werden nur für bestimmte Portionen verwendet.
  • Sie können isEnabled(), isDisplayed(), isSelected() und eine Kombination davon verwenden WebDriverWarten und Erwartete Bedingungen Methoden zur Überprüfung des Zustands eines Elements. 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 aus NoSuchElementException.
  • Wenn die Methoden WebDriverWait und ExpectedConditions aufgerufen wurden, während das Element nicht vorhanden war, löste WebDriver eine Fehlermeldung aus TimeoutException.

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 Vor- und Zurück-Schaltflächen nicht verwenden. Wenn wir darauf klicken, wird die Seite nicht angezeigt

driver.navigate(): Es wird verwendet, um zu der jeweiligen Website zu gelangen, verwaltet jedoch den Browserverlauf und die Cookies, sodass wir während der Codierung von Testcase die Vor- und Zurück-Schaltflächen verwenden können, um zwischen den Seiten zu navigieren