implicit explicit wait selenium webdriver
Lernen Sie implizites und explizites Warten in Selenium WebDriver:
Im vorherigen Tutorial haben wir versucht, Sie mit den verschiedenen vertraut zu machen Schleifen- und bedingte Operationen von WebDriver . Diese bedingten Methoden behandeln häufig fast alle Arten von Sichtbarkeitsoptionen für Webelemente.
Hier weitermachen kostenlose Selenium Trainingsreihe , wir werden diskutieren verschiedene Arten von Wartezeiten, die vom Selenium WebDriver bereitgestellt werden . Wir werden auch über v diskutieren verschiedene Arten von Navigationsoptionen verfügbar in WebDriver.
Wartezeiten helfen dem Benutzer bei der Behebung von Problemen, während er auf verschiedene Webseiten umleitet, indem die gesamte Webseite aktualisiert und die neue erneut geladen wird Webelemente. Manchmal kann es auch Ajax-Anrufe geben. Somit kann eine Zeitverzögerung gesehen werden, während die Webseiten neu geladen und die Webelemente reflektiert werden.
Benutzer navigieren häufig durch verschiedene Webseiten hin und her. Mit den vom WebDriver bereitgestellten Navigationsbefehlen / -methoden kann der Benutzer die Echtzeitszenarien simulieren, indem er zwischen den Webseiten unter Bezugnahme auf den Verlauf des Webbrowsers navigiert.
WebDriver stattet den Benutzer mit zwei Wartegenen aus, um das wiederkehrende Laden der Seite zu bewältigen s, Laden von Webelementen, Erscheinungsbild von Fenstern, Popups und Fehlermeldungen sowie Reflexion von Webelementen auf der Webseite.
- Implizites Warten
- Explizites Warten
Lassen Sie uns jeden von ihnen unter Berücksichtigung des praktischen Ansatzes im Detail diskutieren.
Was du lernen wirst:
- Implizites Warten auf WebDriver
- WebDriver Explicit Wait
- Erwarteter Zustand
- Navigation mit WebDriver
- Fazit
- Literatur-Empfehlungen
Implizites Warten auf WebDriver
Implizite Wartezeiten werden verwendet, um eine Standardwartezeit (z. B. 30 Sekunden) zwischen jedem aufeinanderfolgenden Testschritt / Befehl im gesamten Testskript bereitzustellen. Somit würde der nachfolgende Testschritt nur ausgeführt, wenn die 30 Sekunden nach dem Ausführen des vorherigen Testschritts / Befehls vergangen sind.
Wichtige Hinweise
- Das implizite Warten ist eine einzelne Zeile eines Codes und kann in der Setup-Methode des Testskripts deklariert werden.
- Im Vergleich zum expliziten Warten ist das implizite Warten transparent und unkompliziert. Die Syntax und der Ansatz sind einfacher als das explizite Warten.
Das implizite Warten ist einfach und unkompliziert anzuwenden und bringt auch einige Nachteile mit sich. Dies führt zu der Ausführungszeit des Testskripts, da jeder der Befehle nicht mehr auf eine festgelegte Zeitspanne wartet, bevor die Ausführung fortgesetzt wird.
Um dieses Problem zu beheben, führt WebDriver explizite Wartezeiten ein, bei denen wir explizite Wartezeiten anwenden können, wenn die Situation eintritt, anstatt während der Ausführung der einzelnen Testschritte zwangsweise zu warten.
Anweisungen importieren
importieren java.util.concurrent.TimeUnit - Um auf implizite Wartezeiten in unseren Testskripten zugreifen und diese anwenden zu können, müssen wir dieses Paket in unser Testskript importieren.
Syntax
drv .manage (). timeouts (). implicitlyWait (10, TimeUnit. SEKUNDEN );
Fügen Sie die obige Codezeile kurz nach der Instanziierung der WebDriver-Instanzvariablen in Ihr Testskript ein. Dies ist also alles, was erforderlich ist, um eine implizite Wartezeit in Ihrem Testskript festzulegen.
Code-exemplarische Vorgehensweise
Das implizite Warten erfordert die Übergabe von zwei Werten als Parameter. Das erste Argument gibt die Zeit in den Ziffern an, die das System warten muss. Das zweite Argument gibt die Zeitmessskala an. Daher haben wir im obigen Code die '30' Sekunden als Standardwartezeit erwähnt und die Zeiteinheit wurde auf 'Sekunden' eingestellt.
WebDriver Explicit Wait
Explizite Wartezeiten werden verwendet, um die Ausführung anzuhalten, bis eine bestimmte Bedingung erfüllt ist oder die maximale Zeit abgelaufen ist. Im Gegensatz zu impliziten Wartezeiten werden explizite Wartezeiten nur für eine bestimmte Instanz angewendet.
WebDriver führt Klassen wie WebDriverWait und ExpectedConditions ein, um explizite Wartezeiten in den Testskripten zu erzwingen. Im Rahmen dieser Diskussion werden wir 'gmail.com' als Beispiel verwenden.
Zu automatisierendes Szenario
- Starten Sie den Webbrowser und öffnen Sie 'gmail.com'.
- Geben Sie einen gültigen Benutzernamen ein
- Geben Sie ein gültiges Passwort ein
- Klicken Sie auf die Schaltfläche Anmelden
- Warten Sie, bis die Schaltfläche 'Verfassen' nach dem Laden der Seite sichtbar ist
WebDriver-Code mit explizitem Warten
Bitte beachten Sie, dass wir für die Skripterstellung das in den früheren Tutorials erstellte Projekt „Learning_Selenium“ verwenden würden.
Schritt 1 : Erstellen Sie eine neue Java-Klasse mit dem Namen 'Wait_Demonstration' im Projekt 'Learning_Selenium'.
Schritt 2 : Kopieren Sie den folgenden Code und fügen Sie ihn in die Klasse 'Wait_Demonstration.java' ein.
Unten finden Sie das Testskript, das dem oben genannten Szenario entspricht.
import static org.junit.Assert.*; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class Wait_Demonstration { // created reference variable for WebDriver WebDriver drv; @Before public void setup() throws InterruptedException { // initializing drv variable using FirefoxDriver drv=new FirefoxDriver(); // launching gmail.com on the browser drv.get('https://gmail.com'); // maximized the browser window drv.manage().window().maximize(); drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @Test public void test() throws InterruptedException { // saving the GUI element reference into a 'username' variable of WebElement type WebElement username = drv.findElement(By.id('Email')); // entering username username.sendKeys('shruti.shrivastava.in'); // entering password drv.findElement(By.id('Passwd')).sendKeys('password'); // clicking signin button drv.findElement(By.id('signIn')).click(); // explicit wait - to wait for the compose button to be click-able WebDriverWait wait = new WebDriverWait(drv,30); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); // click on the compose button as soon as the 'compose' button is visible drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click(); } @After public void teardown() { // closes all the browser windows opened by web driver drv.quit(); } }
Anweisungen importieren
- importieren org. openqa.selenium.support.ui.ExpectedConditions
- importieren org. openqa.selenium.support.ui.WebDriverWait
- Importieren Sie die oben genannten Pakete vor der Skripterstellung. Die Pakete beziehen sich auf die Select-Klasse, die für die Dropdown-Liste erforderlich ist.
Objektinstanziierung für die WebDriverWait-Klasse
WebDriverWait wait = Neu WebDriverWait ( drv 30);
Wir erstellen eine Referenzvariable 'wait' für die WebDriverWait-Klasse und instanziieren sie mithilfe der WebDriver-Instanz und der maximalen Wartezeit für die Ausführung der Ausführung. Die angegebene maximale Wartezeit wird in „Sekunden“ gemessen.
Die WebDriver-Instanziierung wurde in den ersten Tutorials von WebDriver erläutert.
Erwarteter Zustand
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click();
Der obige Befehl wartet darauf, dass eine festgelegte Zeitspanne oder ein erwarteter Zustand eintritt, je nachdem, was zuerst eintritt oder vergeht.
Um dies zu tun, verwenden wir die Referenzvariable 'wait' der WebDriverWait-Klasse, die im vorherigen Schritt mit der ExpectedConditions-Klasse und einer erwarteten Bedingung erstellt wurde. Sobald der erwartete Zustand eintritt, würde die Programmsteuerung daher zum nächsten Ausführungsschritt übergehen, anstatt die gesamten 30 Sekunden zwangsweise zu warten.
In unserem Beispiel warten wir, bis die Schaltfläche 'Verfassen' vorhanden ist und als Teil des Ladens der Startseite geladen wird, und rufen dann den Klickbefehl auf die Schaltfläche 'Verfassen' auf.
Arten von erwarteten Bedingungen
Die ExpectedConditions-Klasse bietet eine große Hilfe bei der Bewältigung von Szenarien, in denen vor dem Ausführen des eigentlichen Testschritts festgestellt werden muss, ob eine Bedingung vorliegt.
Die ExpectedConditions-Klasse enthält eine Vielzahl von erwarteten Bedingungen, auf die mithilfe der WebDriverWait-Referenzvariablen und der till () -Methode zugegriffen werden kann.
Lassen Sie uns einige davon ausführlich diskutieren:
# 1) elementToBeClickable () - Die erwartete Bedingung wartet darauf, dass ein Element anklickbar ist, d. H. Es sollte auf dem Bildschirm vorhanden / angezeigt / sichtbar sowie aktiviert sein.
Beispielcode
wait.until (ExpectedConditions.elementToBeClickable (By.xpath ( '// div (enthält (text (),’ COMPOSE ’))' )));
# 2) textToBePresentInElement () - Die erwartete Bedingung wartet auf ein Element mit einem bestimmten Zeichenfolgenmuster.
Beispielcode
wait.until (ExpectedConditions.textToBePresentInElement (By.xpath ( '// div (@ id = 'forgetPass''), 'zu findender Text' ));
Java erstellt ein Array von Objekten
# 3) alertIsPresent () - Die erwartete Bedingung wartet darauf, dass ein Warnfeld angezeigt wird.
Beispielcode
wait.until (ExpectedConditions.alertIsPresent ())! = null);
# 4) titleIs () - Die erwartete Bedingung wartet auf eine Seite mit einem bestimmten Titel.
Beispielcode
wait.until (ExpectedConditions.titleIs ( 'Google Mail' ));
# 5) frameToBeAvailableAndSwitchToIt () - Der erwartete Zustand wartet darauf, dass ein Frame verfügbar ist. Sobald der Frame verfügbar ist, schaltet die Steuerung automatisch darauf um.
Beispielcode
wait.until (ExpectedConditions.frameToBeAvailableAndSwitchToIt (By.id (“ Newframe ')));
Es gibt eine sehr häufige Benutzeraktion, bei der der Benutzer auf die Schaltflächen 'Zurück' und 'Vorwärts' des Webbrowsers klickt, um zu den verschiedenen Webseiten zu navigieren, die in der aktuellen Sitzung im Browserverlauf besucht wurden. Um solche von den Benutzern ausgeführten Aktionen zu simulieren, führt WebDriver Navigate-Befehle ein.
Lassen Sie uns diese Befehle im Detail untersuchen:
# 1) navigiere (). Zurück ()
Mit diesem Befehl kann der Benutzer zur vorherigen Webseite navigieren.
Beispielcode:
driver.navigate (). back ();
Der obige Befehl erfordert keine Parameter und führt den Benutzer zur vorherigen Webseite im Verlauf des Webbrowsers zurück.
# 2) navigiere (). Vorwärts ()
Mit diesem Befehl kann der Benutzer mit Bezug auf den Browserverlauf zur nächsten Webseite navigieren.
Beispielcode:
driver.navigate (). forward ();
Der obige Befehl erfordert keine Parameter und leitet den Benutzer zur nächsten Webseite im Verlauf des Webbrowsers weiter.
# 3) navigiere (). Refresh ()
Mit diesem Befehl kann der Benutzer die aktuelle Webseite aktualisieren und dadurch alle Webelemente neu laden.
Beispielcode:
driver.navigate (). refresh ();
Der obige Befehl erfordert keine Parameter und lädt die Webseite neu.
# 4) navigiere (). Zu ()
Mit diesem Befehl kann der Benutzer ein neues Webbrowser-Fenster starten und zur angegebenen URL navigieren.
Beispielcode:
driver.navigate (). to ('http://google.com');
Der obige Befehl erfordert eine Web-URL als Parameter und öffnet dann die angegebene URL in einem neu gestarteten Webbrowser.
Fazit
In diesem Implizites und explizites Warten im Selenium WebDriver-Lernprogramm Wir haben versucht, Sie mit den Wartezeiten des WebDrivers vertraut zu machen. Wir haben sowohl die expliziten als auch die impliziten Wartezeiten besprochen und ausgeübt. Gleichzeitig haben wir auch die verschiedenen Navigationsbefehle besprochen.
Hier sind die Kernpunkte dieses Artikels:
- Mit WebDriver kann der Benutzer unter den verfügbaren Wartezeiten auswählen, um Situationen zu behandeln, in denen der Ausführungsfluss möglicherweise einige Sekunden lang einen Ruhezustand erfordert, um die Webelemente zu laden oder eine bestimmte Bedingung zu erfüllen. In WebDriver stehen zwei Arten von Wartezeiten zur Verfügung.
- Implizites Warten
- Explizites Warten
- Implizite Wartezeiten werden verwendet, um eine Standardwartezeit zwischen jedem aufeinanderfolgenden Testschritt / Befehl im gesamten Testskript bereitzustellen. Somit würde der nachfolgende Testschritt nur ausgeführt, wenn die angegebene Zeitspanne nach dem Ausführen des vorherigen Testschritts / Befehls verstrichen ist.
- Explizite Wartezeiten werden verwendet, um die Ausführung anzuhalten, bis eine bestimmte Bedingung erfüllt ist oder die maximale Zeit abgelaufen ist. Im Gegensatz zu impliziten Wartezeiten werden explizite Wartezeiten nur für eine bestimmte Instanz angewendet.
- WebDriver führt Klassen wie WebDriverWait und ExpectedConditions ein, um explizite Wartezeiten zu erzwingen
- Erwartete Bedingungen Die Klasse bietet eine große Hilfe bei der Bewältigung von Szenarien, in denen vor dem Ausführen des eigentlichen Testschritts festgestellt werden muss, ob eine Bedingung vorliegt.
- Die ExpectedConditions-Klasse enthält eine Vielzahl von erwarteten Bedingungen, auf die mithilfe der WebDriverWait-Referenzvariablen und der till () -Methode zugegriffen werden kann.
- Navigate () -Methoden / Befehle werden verwendet, um das Benutzerverhalten beim Navigieren zwischen verschiedenen Webseiten hin und her zu simulieren.
Nächstes Tutorial Nr. 16 : Wenn Sie mit dem nächsten Lernprogramm in der Liste fortfahren, werden wir die Benutzer mit verschiedenen Arten von Warnungen vertraut machen, die beim Zugriff auf Websites und deren Handhabungsansätze in WebDriver angezeigt werden können. Die Arten von Warnungen, auf die wir uns konzentrieren würden, sind hauptsächlich Windows-basierte Warnungs-Popups und webbasierte Warnungs-Popups. Da wir wissen, dass die Handhabung von Windows-basierten Popups die Möglichkeiten von WebDriver übersteigt, würden wir auch einige Dienstprogramme von Drittanbietern für die Handhabung von Fenster-Popups verwenden.
Hinweis für die Leser : Bis dahin können die Leser die Szenarien mit verschiedenen Seitenladevorgängen und dynamischen Elementen automatisieren, die unter Verwendung der verschiedenen erwarteten Bedingungen und Navigationsbefehle auf dem Bildschirm angezeigt werden.
Literatur-Empfehlungen
- Cucumber Selenium Tutorial: Integration von Cucumber Java Selenium WebDriver
- Einführung in Selenium WebDriver - Selenium Tutorial # 8
- Implementierung unseres ersten WebDriver-Skripts - Selenium WebDriver Tutorial # 10
- FAQs zu Selen
- Umgang mit Warnungen / Popups in Selenium WebDriver - Selenium Tutorial # 16
- Handbuch zum Generieren von Extent-Berichten in Selenium WebDriver
- So führen Sie Selenium WebDriver in verschiedenen gängigen Browsern aus
- WebDriver Gesamte Einrichtung und Installation mit Eclipse - Selenium Tutorial # 9