Selenium Webtreiber Java Programmbeispiel

Selenium Java Beispiel

Verwendung der Java 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: holen Mercury Homepage von Tours
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.

Selenium WebDriver-Beispielcode

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 = "https://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. Selenium 3.0, Gecko und Firefox haben Kompatibilitätsprobleme und die korrekte Einstellung kann eine schwierige Aufgabe sein. Wenn der Code nicht funktioniert, führen Sie ein Downgrade auf Firefox Version 47 oder niedriger. Alternativ können Sie Ihre Skripte auch in Chrome ausführen. Selenium funktioniert sofort für Chrome. Sie müssen nur 3 Zeilen Code ändern, damit Ihr Skript mit Chrome funktioniert oder Firefox

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 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 Profil wird gestartet von unserem Java Programm. Die Standardeinstellung 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 gesamter Java Das Programm wird 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 Selenium 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, um den Tag-Namen des bestimmten Elements mit der ID „email“ zu extrahieren. Wenn dieser Code ausgeführt wird, sollte er den Tag-Namen „input“ korrekt identifizieren können und ihn auf Eclipses Konsolenfenster.

Auffinden von GUI-Elementen

Zusammenfassung zum Auffinden von Elementen

Variation Beschreibung Musteranfrage
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("Eingabe#E-Mail"))
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. Bedenke die Selenium IDE-Code unten –

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

In Selenium IDE oben, der gesamte Test wurde bestanden. Allerdings in der Selenium Im folgenden WebDriver-Skript hat derselbe Test einen Fehler generiert, 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 dafür ein WebElement-Objekt 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 auf ein beliebiges Element zu simulieren. Die folgende Selenium Java Beispiel zeigt, wie click() wurde verwendet, um auf Mercury Schaltfläche „Anmelden“ von Tours.

Klicken Sie auf ein Element

Bei der Verwendung der Methode click() müssen folgende 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 zu Selenium Der „open“-Befehl der 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 des Browsers Windows

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 des Browsers Windows

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 des Browsers Windows

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

Schließen und Beenden des Browsers Windows

Wenn Sie jedoch quit() verwenden, werden alle Fenster geschlossen – nicht nur das übergeordnete Fenster. Versuchen Sie, den folgenden Code auszuführen, und Sie werden feststellen, dass die beiden Popups oben 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 https://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("https://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 Pop-up wechseln Windows

WebDriver ermöglicht die Anzeige von Popup-Fenstern wie Warnungen, anders als in Selenium IDE. 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 das Warnfeld zuzugreifen und dann seine Nachricht mithilfe der "getText()" Methode, und schließen Sie dann automatisch das Warnfenster mit dem "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 Pop-up wechseln Windows

Mal sehen Selenium Beispielcode dafür:

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 Pop-up wechseln Windows

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ührtFür die folgenden Selenium Im 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:

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 in den Teilen, in denen Sie explizit warten müssen. In diesem Fall verwenden wir explizites Warten auf den „Benutzernamen“ (Mercury Wir füllen den (auf der Homepage von Tours)-Eingang aus, bevor wir den Text „Tutorial“ darauf eingeben.

Explizites Warten

Bedingungen

Die folgenden Methoden werden in bedingten 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 Kontrollkästchen, Optionsfeld oder Option in einer Dropdown-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 ein Warnfeld angezeigt wird.

Verwenden von ExpectedConditions alarmIsPresent()

  • elementToBeClickable() – Wartet, bis ein Element sichtbar und gleichzeitig aktiviert ist. Die Probe Selenium Der folgende 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 eine 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
  • Die get() Methode ist das Äquivalent von Selenium Der „open“-Befehl der IDE.
  • Das Auffinden von Elementen in WebDriver erfolgt mithilfe von findElement() Methode.
  • Zum Lokalisieren von Elementen in WebDriver stehen folgende Optionen zur Verfügung:
  • 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 mit dem übergeordneten Fenster verknüpft sind, das vom WebDriver-Objekt gesteuert wurde.
  • Die 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 aus 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, wirft WebDriver eine 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(): Diese Methode wird verwendet, um zu einer bestimmten Website zu navigieren. Allerdings werden dabei weder der Browserverlauf noch Cookies gespeichert. Daher funktionieren die Schaltflächen „Vorwärts“ und „Zurück“ nicht und durch Klicken auf diese wird die Seitennavigation nicht geplant.

driver.navigate(): Diese Methode wird auch verwendet, um zu einer bestimmten Website zu navigieren, sie speichert jedoch den Browserverlauf und Cookies. Dadurch können die Vorwärts- und Zurück-Schaltflächen zum Navigieren zwischen Seiten verwendet werden, während ein Testfall codiert wird.