implicit explicit wait selenium webdriver
Lär dig Implicit och Explicit Wait i Selen WebDriver:
I föregående handledning försökte vi göra dig bekant med de olika WebDrivers looping och villkorliga operationer . Dessa villkorliga metoder behandlar ofta nästan alla typer av synlighetsalternativ för webbelement.
Gå vidare i detta gratis Selen-träningsserie , vi ska diskutera olika typer av väntetider från Selenium WebDriver . Vi kommer också att diskutera om v olika typer av navigationsalternativ tillgänglig i WebDriver.
Väntar hjälper användaren att felsöka problem vid omdirigering till olika webbsidor genom att uppdatera hela webbsidan och ladda om den nya webbelement. Ibland kan det också vara Ajax-samtal. Således kan en tidsfördröjning ses när du laddar om webbsidorna och speglar webbelementen.
Det finns ofta användare som navigerar genom olika webbsidor fram och tillbaka. Navigering () -kommandon / -metoder som tillhandahålls av WebDriver hjälper således användaren att simulera realtidsscenarier genom att navigera mellan webbsidorna med hänvisning till webbläsarens historik.
WebDriver utrustar användaren med två väntegener för att hantera den återkommande sidbelastningen s, webbelementladdningar, fönstrets utseende, popup-fönster och felmeddelanden och reflektion av webbelement på webbsidan.
- Implicit Vänta
- Explicit Wait
Låt oss diskutera var och en av dem i detalj med tanke på det praktiska tillvägagångssättet.
Vad du kommer att lära dig:
- WebDriver Implicit Wait
- WebDriver Explicit Wait
- Förväntat skick
- Navigering med WebDriver
- Slutsats
- Rekommenderad läsning
WebDriver Implicit Wait
Implicit väntan används för att tillhandahålla en standardväntetid (säg 30 sekunder) mellan varje påföljande teststeg / kommando över hela testskriptet. Således skulle det efterföljande teststeget endast genomföras när de 30 sekunderna har gått efter att det tidigare teststeget / kommandot har utförts.
Viktiga anteckningar
- Den implicita väntan är en enda rad i en kod och kan deklareras i testmetodens installationsmetod.
- Jämfört med Explicit väntan är Implicit väntan transparent och okomplicerad. Syntaxen och tillvägagångssättet är enklare än uttrycklig väntan.
Att vara enkel och enkel att applicera, innebär implicit väntan också några nackdelar. Det ger upphov till testskriptets exekveringstid eftersom vart och ett av kommandona skulle upphöra att vänta på en bestämd tid innan återupptagandet körs.
För att felsöka detta problem introducerar WebDriver således Explicit Waits där vi uttryckligen kan använda Waits när situationen uppstår istället för att vänta kraftigt medan vi utför vart och ett av teststegen.
Importera uttalanden
importera java.util.concurrent.TimeUnit - För att kunna komma åt och tillämpa implicit väntan i våra testskript måste vi importera detta paket till vårt testskript.
Syntax
drv .manage (). timeouts (). implicitWait (10, TimeUnit. SEKUNDER );
Inkludera ovanstående kodrad i testskriptet snart efter instabilisering av WebDriver-instansvariabeln. Detta är alltså allt som krävs för att ställa in en implicit väntan på ditt testskript.
Kodgenomgång
Det implicita vänta mandatet att skicka två värden som parametrar. Det första argumentet anger tiden i de numeriska siffrorna som systemet behöver vänta. Det andra argumentet anger tidsmätningsskalan. I ovanstående kod har vi alltså nämnt '30' sekunder som standard väntetid och tidsenheten har ställts in på 'sekunder'.
WebDriver Explicit Wait
Explicit väntan används för att stoppa körningen tills den tid ett visst villkor uppfylls eller den maximala tiden har gått. Till skillnad från implicit väntan tillämpas bara väntat för en viss instans.
WebDriver introducerar klasser som WebDriverWait och ExpectedConditions för att genomdriva väntande väntan i testskripten. Inom ramen för denna diskussion kommer vi att använda “gmail.com” som ett exemplar.
Scenario ska automatiseras
- Starta webbläsaren och öppna “gmail.com”
- Ange ett giltigt användarnamn
- Ange ett giltigt lösenord
- Klicka på inloggningsknappen
- Vänta på att Komponera-knappen är synlig efter sidinläsning
WebDriver-kod med Explicit wait
Observera att för att skapa skript skulle vi använda “Learning_Selenium” -projektet som skapats i de tidigare självstudierna.
Steg 1 : Skapa en ny Java-klass som heter 'Wait_Demonstration' under projektet 'Learning_Selenium'.
Steg 2 : Kopiera och klistra in koden nedan i klassen “Wait_Demonstration.java”.
Nedan följer testskriptet som motsvarar ovan nämnda scenario.
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(); } }
Importera uttalanden
- importera org. openqa.selenium.support.ui.ExpectedConditions
- importera org. openqa.selenium.support.ui.WebDriverWait
- Importera ovanstående paket innan manuset skapades. Paketen hänvisar till Select-klassen som krävs för att hantera rullgardinsmenyn.
Objektinstantiering för WebDriverWait-klassen
WebDriverVänta vänta = ny WebDriverWait ( drv , 30);
Vi skapar en referensvariabel 'vänta' för WebDriverWait-klassen och instansera den med hjälp av WebDriver-instans och maximal väntetid för att körningen ska avskedas. Den maximala väntetiden som uppges mäts i 'sekunder'.
WebDriver-instansieringen diskuterades i de inledande handledningarna för WebDriver.
Förväntat skick
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click();
Ovanstående kommando väntar på att en bestämd tid eller ett förväntat tillstånd ska inträffa beroende på vad som inträffar eller som först löper ut.
För att kunna göra detta använder vi därför 'vänta' -referensvariabeln för WebDriverWait-klassen som skapades i föregående steg med ExpectedConditions-klassen och ett faktiskt tillstånd som förväntas inträffa. Så snart det förväntade tillståndet inträffar kommer programstyrningen att flytta till nästa körningssteg istället för att vänta kraftigt i hela 30 sekunder.
I vårt exemplar väntar vi på att 'compose' -knappen ska vara närvarande och laddad som en del av hemsidans laddning och därmed fortsätter vi med att ringa klickkommandot på 'compose' -knappen.
Typer av förväntade förhållanden
ExpectedConditions-klassen är till stor hjälp för att hantera scenarier där vi måste försäkra oss om att ett tillstånd ska inträffa innan det verkliga teststeget utförs.
ExpectedConditions-klassen kommer med ett brett spektrum av förväntade förhållanden som kan nås med hjälp av referensvariabeln WebDriverWait och till () -metoden.
Låt oss diskutera några av dem långt:
# 1) elementToBeClickable () - Det förväntade tillståndet väntar på att ett element ska vara klickbart, dvs. det ska vara närvarande / visas / synligt på skärmen såväl som aktiverat.
Exempelkod
wait.until (ExpectedConditions.elementToBeClickable (By.xpath ( “// div (innehåller (text (),” KOMPOSERA ”))” )));
# 2) textToBePresentInElement () - Det förväntade tillståndet väntar på ett element som har ett visst strängmönster.
Exempelkod
wait.until (ExpectedConditions.textToBePresentInElement (By.xpath ( “// div (@ id =‘ forgotPass '”),“ text att hitta ” ));
frågor och svar om kvalitetssäkringsintervju pdf
# 3) alertIsPresent () - Det förväntade tillståndet väntar på att en varningsruta ska visas.
Exempelkod
wait.until (ExpectedConditions.alertIsPresent ())! = null);
# 4) titleIs () - Det förväntade tillståndet väntar på en sida med en specifik titel.
Exempelkod
wait.until (ExpectedConditions.titleIs ( “Gmail” ));
# 5) frameToBeAvailableAndSwitchToIt () - Det förväntade tillståndet väntar på att en ram ska vara tillgänglig och så snart ramen är tillgänglig växlar kontrollen automatiskt till den.
Exempelkod
wait.until (ExpectedConditions.frameToBeAvailableAndSwitchToIt (By.id (“ ny ram ')));
Det finns en mycket vanlig användaråtgärd där användaren klickar på bakåt- och framåtknapparna i webbläsaren fram och tillbaka för att navigera till de olika webbsidor som besökts i den aktuella sessionen i webbläsarens historia. För att simulera sådana åtgärder som utförs av användarna introducerar WebDriver navigeringskommandon.
Låt oss undersöka dessa kommandon i detalj:
# 1) navigera (). Tillbaka ()
Detta kommando låter användaren navigera till föregående webbsida.
Exempelkod:
driver.navigate (). tillbaka ();
Ovanstående kommando kräver inga parametrar och tar tillbaka användaren till den tidigare webbsidan i webbläsarens historik.
# 2) navigera (). Framåt ()
Detta kommando låter användaren navigera till nästa webbsida med hänvisning till webbläsarens historik.
Exempelkod:
driver.navigate (). framåt ();
Ovanstående kommando kräver inga parametrar och vidarebefordrar användaren till nästa webbsida i webbläsarens historik.
# 3) navigera (). Uppdatera ()
Detta kommando låter användaren uppdatera den aktuella webbsidan och därmed ladda om alla webbelement.
Exempelkod:
driver.navigate (). uppdatera ();
Ovanstående kommando kräver inga parametrar och laddar om webbsidan.
# 4) navigera (). Till ()
Detta kommando låter användaren starta ett nytt webbläsarfönster och navigera till den angivna URL: n.
Exempelkod:
driver.navigate (). till (“http://google.com”);
Ovanstående kommando kräver en webbadress som parameter och sedan öppnas den angivna URL: en i en nystartad webbläsare.
Slutsats
I denna Implicit och Explicit Wait i Selenium WebDriver-handledning , vi försökte göra dig bekant med WebDrivers väntan. Vi diskuterade och utövade både det uttryckliga och det implicita väntetiden. Samtidigt diskuterade vi också de olika navigeringskommandona.
Här är kärnorna i denna artikel:
- WebDriver gör det möjligt för användaren att välja bland de tillgängliga väntetiden för att hantera situationer där exekveringsflödet kan kräva viloläge i några sekunder för att ladda webbelementen eller för att uppfylla ett specifikt villkor. Det finns två typer av väntetider tillgängliga i WebDriver.
- Implicit Vänta
- Explicit Wait
- Implicit väntan används för att tillhandahålla en standardväntetid mellan varje påföljande teststeg / kommando över hela testskriptet. Således skulle det efterföljande teststeget endast genomföras när den angivna tiden har gått efter att det tidigare teststeget / kommandot har utförts.
- Explicit väntan används för att stoppa körningen tills den tid ett visst villkor uppfylls eller den maximala tiden har gått. Till skillnad från implicit väntan tillämpas bara väntat för en viss instans.
- WebDriver introducerar klasser som WebDriverWait och ExpectedConditions för att genomdriva Explicit Waits
- ExpectedConditions klass ger en stor hjälp för att hantera scenarier där vi måste fastställa om ett tillstånd ska inträffa innan det verkliga teststeget utförs.
- ExpectedConditions-klassen kommer med ett brett spektrum av förväntade förhållanden som kan nås med hjälp av referensvariabeln WebDriverWait och till () -metoden.
- Navigera () metoder / kommandon används för att simulera användarnas beteende när man navigerar mellan olika webbsidor fram och tillbaka.
Nästa handledning # 16 : När vi kommer till nästa handledning i listan skulle vi göra användarna bekanta med olika typer av varningar som kan visas när de besöker webbplatser och deras hanteringsmetoder i WebDriver. De typer av varningar som vi skulle fokusera på är huvudsakligen - fönsterbaserade popup-fönster och webbaserade popup-fönster. Eftersom vi vet att hantering av Windows-baserade popup-fönster ligger utanför WebDrivers möjligheter, skulle vi därför också utöva vissa verktyg från tredje part för att hantera fönster popup-fönster.
Anmärkning för läsarna : Fram till dess kan läsarna automatisera scenarierna med olika sidladdningar och dynamiska element som dyker upp på skärmen med de olika förväntade förhållandena och navigeringskommandon.
Rekommenderad läsning
- Gurka Selen Tutorial: Gurka Java Selen WebDriver Integration
- Introduktion till Selen WebDriver - Selen Tutorial # 8
- Implementering av vårt första WebDriver Script - Selenium WebDriver Tutorial # 10
- Vanliga frågor om selen
- Hur man hanterar varningar / popup-fönster i Selen WebDriver - Selen Tutorial # 16
- Guide för att skapa omfattande rapporter i Selenium WebDriver
- Hur man kör Selen WebDriver i olika populära webbläsare
- WebDriver Hela installationen och installationen med Eclipse - Selen Tutorial # 9