Selenium Webtreiber Java Programmbeispiel
โก Intelligente Zusammenfassung
Selenium WebTreiber Java Das Programmbeispiel fรผhrt Sie durch Ihr erstes vollstรคndiges Automatisierungsskript. Lessons behandelt die Einrichtung der Testumgebung, das Auffinden von Elementen, das Senden von Eingaben, die Navigation, die Validierung, Wartezeiten, die Ausnahmebehandlung und bewรคhrte Verfahren fรผr zuverlรคssige WebDriver-Tests.

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-Beispiel Code
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 gespeichert. URL und der erwartete Titel als Variablen.
Starten einer Browsersitzung
WebDrivers get () Die Methode wird verwendet, um eine neue Browsersitzung zu starten und diese an die URL den 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
Die vollstรคndigeschlieร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. Facebook wird als Basis verwendet. URL.
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 zu extracDer Tag-Name des Elements mit der ID โemailโ wird ermittelt. Bei der Ausfรผhrung sollte dieser Code den Tag-Namen โinputโ korrekt erkennen und ausgeben. 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.
Erkrankungen
Folgende Methoden werden in bedingten und logischen Anweisungen verwendet.ping Betrieb โ
- 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 Code Im Folgenden wird gewartet, bis das Element mit der ID โusernameโ sichtbar und aktiviert ist, 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 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.

.png)
.png)
.png)
.png)
.png)
.png)

.png)


.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)