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:
- org.openqa.selenium.*– enthält die WebDriver-Klasse, die zum Instanziieren eines neuen Browsers benötigt wird, der mit einem bestimmten Treiber geladen ist
- 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.
- On EclipseKlicken Sie in der Menüleiste auf Ausführen > Ausführen.
- Presse Ctrl + F11 um den gesamten Code auszuführen.
Wenn Sie alles richtig gemacht haben, Eclipse würde „Test bestanden!“ ausgeben.
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.
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 –
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.
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.
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.
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: |
|
getTitle ()
Verwendungsbeispiel: |
|
getPageSource()
Verwendungsbeispiel: |
|
getAktuelleUrl()
Verwendungsbeispiel: |
|
getText ()
Verwendungsbeispiel: |
|
Navigieren Sie durch Befehle
Mit diesen Befehlen können Sie verschiedene Webseiten aktualisieren, aufrufen und zwischen ihnen wechseln.
navigieren().to()
Verwendungsbeispiel: |
|
navigieren().refresh()
Verwendungsbeispiel: |
|
navigieren().back()
Verwendungsbeispiel: |
|
navigieren().forward()
Verwendungsbeispiel: |
|
Schließen und Beenden des Browsers Windows
schließen()
Verwendungsbeispiel: |
|
Verlassen()
Verwendungsbeispiel: |
|
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.
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 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
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.
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:
Wartet
Es gibt zwei Arten von Wartezeiten.
- Implizites Warten – wird verwendet, um die Standardwartezeit im gesamten Programm festzulegen
- 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.
Fügen Sie dies dann im Instanziierungsteil Ihres Codes hinzu.
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:
Schritt 2:
Deklarieren Sie eine WebDriverWait-Variable. In diesem Beispiel verwenden wir „myWaitVar“ als Namen der Variablen.
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.
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.
- wird angezeigt () wird verwendet, wenn Sie vor der Ausführung eines Befehls überprüfen möchten, ob ein bestimmtes Element angezeigt wird oder nicht.
- 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.
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.
- 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.
- frameToBeAvailableAndSwitchToIt() – Wartet, bis der angegebene Frame bereits verfügbar ist, und wechselt dann automatisch zu diesem.
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.
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ährendquit()
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()
undswitchTo().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, whileexplicit 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.