implicit explicit wait selenium webdriver
Lær implicit og eksplicit ventetid i Selen WebDriver:
I den foregående vejledning forsøgte vi at gøre dig bekendt med de forskellige WebDrivers looping og betingede operationer . Disse betingede metoder behandler ofte næsten alle typer synlighedsindstillinger for webelementer.
Gå videre i dette gratis Selenium-træningsserie , vi vil diskutere forskellige typer ventetider leveret af Selenium WebDriver . Vi vil også diskutere om v forskellige typer navigationsmuligheder tilgængelig i WebDriver.
Vent hjælper brugeren med at foretage fejlfinding af problemer under omdirigering til forskellige websider ved at opdatere hele websiden og genindlæse den nye webelementer. Til tider kan der også være Ajax-opkald. Således kan en tidsforsinkelse ses, mens websider genindlæses og reflekteres på webelementerne.
Brugere findes ofte ved at navigere gennem forskellige websider frem og tilbage. Således navigerer () kommandoer / metoder leveret af WebDriver hjælper brugeren med at simulere realtidsscenarier ved at navigere mellem websiderne med henvisning til webbrowserens historie.
WebDriver udstyrer brugeren med to gener af ventetid for at håndtere den tilbagevendende sideindlæsning s, webelementbelastninger, udseendet af windows, pop op-vinduer og fejlmeddelelser og refleksion af webelementer på websiden.
- Implicit Vent
- Eksplicit Vent
Lad os diskutere hver af dem detaljeret i betragtning af den praktiske tilgang.
Hvad du vil lære:
- WebDriver Implicit Vent
- WebDriver Eksplicit Vent
- Forventet tilstand
- Navigation ved hjælp af WebDriver
- Konklusion
- Anbefalet læsning
WebDriver Implicit Vent
Implicit ventetid bruges til at give en standard ventetid (f.eks. 30 sekunder) mellem hvert på hinanden følgende testtrin / kommando på tværs af hele testscriptet. Således vil det efterfølgende testtrin kun udføres, når de 30 sekunder er gået efter udførelse af det forrige testtrin / kommando.
Vigtige bemærkninger
- Den implicitte ventetid er en enkelt linje i en kode og kan erklæres i opsætningsmetoden til testscriptet.
- Sammenlignet med eksplicit ventetid er den implicitte ventetid gennemsigtig og ukompliceret. Syntaksen og tilgangen er enklere end eksplicit ventetid.
At være let og enkel at anvende introducerer implicit ventetid også et par ulemper. Det giver anledning til test scriptets udførelsestid, da hver af kommandoerne ville blive ophørt med at vente i en bestemt tidsperiode, før genoptagelsen blev genoptaget.
For at fejlfinde dette problem introducerer WebDriver således eksplicit ventetid, hvor vi eksplicit kan anvende ventetid, hver gang situationen opstår i stedet for kraftigt at vente, mens vi udfører hvert af testtrinene.
Importerklæringer
importere java.util.concurrent.TimeUnit - For at kunne få adgang til og anvende implicit ventetid i vores testskripter er vi forpligtet til at importere denne pakke til vores test script.
Syntaks
drv .manage (). timeouts (). implicitWait (10, TimeUnit. SEKUNDER );
Inkluder ovenstående linie kode i dit test script snart efter instantiering af WebDriver-instansvariablen. Således er dette alt, hvad der kræves for at indstille en implicit ventetid i dit testscript.
Kode gennemgang
Den implicitte ventemandat til at videregive to værdier som parametre. Det første argument angiver det tidspunkt i de numeriske cifre, som systemet skal vente. Det andet argument angiver tidsmålingsskalaen. Således har vi i ovenstående kode nævnt “30” sekunder som standard ventetid, og tidsenheden er indstillet til “sekunder”.
WebDriver Eksplicit Vent
Eksplicit ventetid bruges til at standse udførelsen, indtil det tidspunkt, en bestemt betingelse er opfyldt, eller den maksimale tid er gået. I modsætning til implicit ventetid anvendes eksplicit ventetid kun til en bestemt forekomst.
WebDriver introducerer klasser som WebDriverWait og ExpectedConditions for at håndhæve eksplicit ventetid i testskripterne. Som led i denne diskussion bruger vi “gmail.com” som en prøve.
Scenarie skal automatiseres
- Start webbrowseren, og åbn 'gmail.com'
- Indtast et gyldigt brugernavn
- Indtast et gyldigt kodeord
- Klik på logon-knappen
- Vent til Compose-knappen er synlig efter sideindlæsning
WebDriver-kode ved brug af eksplicit ventetid
Vær opmærksom på, at vi til “Learning_Selenium” -projektet, der blev oprettet i de tidligere tutorials, til oprettelse af script.
Trin 1 : Opret en ny java-klasse med navnet “Wait_Demonstration” under “Learning_Selenium” -projektet.
Trin 2 : Kopier og indsæt nedenstående kode i klassen “Wait_Demonstration.java”.
Nedenfor er testscriptet, der svarer til ovennævnte 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(); } }
Importerklæringer
- importere org. openqa.selenium.support.ui.ExpectedConditions
- importere org. openqa.selenium.support.ui.WebDriverWait
- Importer ovenstående pakker inden scriptet oprettes. Pakkerne henviser til den valgte klasse, der kræves for at håndtere rullemenuen.
Objektinstantiering til WebDriverWait-klassen
WebDriverWait vent = ny WebDriverWait ( drv , 30);
Vi opretter en referencevariabel 'vent' på WebDriverWait-klassen og instantier den ved hjælp af WebDriver-forekomst og maksimal ventetid for udførelsen til afskedigelse. Den maksimale citerede ventetid måles i “sekunder”.
WebDriver instantiering blev diskuteret i de indledende tutorials af WebDriver.
Forventet tilstand
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click();
Ovenstående kommando venter på, at en bestemt tidsperiode eller en forventet tilstand skal forekomme, alt efter hvad der sker eller løber først.
For at være i stand til at gøre dette bruger vi således ”vent” referencevariablen for WebDriverWait-klassen oprettet i det forrige trin med ExpectedConditions-klassen og en faktisk tilstand, som forventes at forekomme. Derfor, så snart den forventede tilstand opstår, flyttes programstyringen til det næste udførelsestrin i stedet for kraftigt at vente i hele 30 sekunder.
I vores eksemplar venter vi på, at 'komponer' -knappen er til stede og indlæses som en del af startsideindlæsningen, og derefter bevæger vi os fremad med at kalde klikkommandoen på 'komponer' -knappen.
Typer af forventede forhold
ExpectedConditions-klassen giver en stor hjælp til at håndtere scenarier, hvor vi er nødt til at fastslå, om en tilstand skal opstå, før vi udfører det faktiske teststrin.
ExpectedConditions-klassen leveres med en bred vifte af forventede forhold, der kan tilgås ved hjælp af WebDriverWait-referencevariablen og indtil () -metoden.
Lad os diskutere nogle få af dem udførligt:
# 1) elementToBeClickable () - Den forventede tilstand venter på, at et element kan klikkes, dvs. det skal være til stede / vises / synligt på skærmen såvel som aktiveret.
Prøvekode
wait.until (ExpectedConditions.elementToBeClickable (By.xpath ( '// div (indeholder (tekst (), 'COMPOSE'))' )));
# 2) textToBePresentInElement () - Den forventede tilstand venter på et element med et bestemt strengemønster.
Prøvekode
wait.until (ExpectedConditions.textToBePresentInElement (By.xpath ( “// div (@ id =‘ forgotPass '”),“ tekst der skal findes ” ));
mobiltelefon spion app til Android
# 3) alertIsPresent () - Den forventede tilstand venter på, at en advarselsboks vises.
Prøvekode
wait.until (ExpectedConditions.alertIsPresent ())! = null);
# 4) titleIs () - Den forventede tilstand venter på en side med en bestemt titel.
Prøvekode
wait.until (ExpectedConditions.titleIs ( “Gmail” ));
# 5) frameToBeAvailableAndSwitchToIt () - Den forventede tilstand venter på, at en ramme er tilgængelig, og så snart rammen er tilgængelig, skifter styringen automatisk til den.
Prøvekode
wait.until (ExpectedConditions.frameToBeAvailableAndSwitchToIt (By.id (“ newframe ')));
Der er en meget almindelig brugerhandling, hvor brugeren klikker på bagsiden og fremad på knapperne i webbrowseren frem og tilbage for at navigere til de forskellige websider, der er besøgt i den aktuelle session i browserens historie. For at simulere sådanne handlinger udført af brugerne introducerer WebDriver Navigate-kommandoer.
Lad os undersøge disse kommandoer i detaljer:
# 1) naviger (). Tilbage ()
Denne kommando lader brugeren navigere til den forrige webside.
Prøvekode:
driver.navigate (). tilbage ();
Ovenstående kommando kræver ingen parametre og tager brugeren tilbage til den forrige webside i webbrowserens historie.
# 2) naviger (). Fremad ()
Denne kommando lader brugeren navigere til den næste webside med henvisning til browserens historie.
Prøvekode:
driver.navigate (). fremad ();
Ovenstående kommando kræver ingen parametre og fører brugeren videre til den næste webside i webbrowserens historie.
# 3) naviger (). Opdater ()
Denne kommando giver brugeren mulighed for at opdatere den aktuelle webside og derefter genindlæse alle webelementerne.
Prøvekode:
driver.navigate (). opdater ();
Ovenstående kommando kræver ingen parametre og genindlæser websiden.
# 4) naviger (). Til ()
Denne kommando lader brugeren starte et nyt webbrowser-vindue og navigere til den angivne URL.
Prøvekode:
driver.navigate (). til (“http://google.com”);
Ovenstående kommando kræver en web-URL som parameter, og derefter åbner den den angivne URL i en nystartet webbrowser.
Konklusion
Heri Implicit og eksplicit ventetid i Selenium WebDriver-vejledning , vi forsøgte at gøre dig bekendt med WebDrivers ventetid. Vi diskuterede og udøvede både den eksplicitte og den implicitte ventetid. På samme tid diskuterede vi også de forskellige navigeringskommandoer.
Her er kernen i denne artikel:
- WebDriver giver brugeren mulighed for at vælge blandt de tilgængelige ventetider for at håndtere situationer, hvor eksekveringsstrømmen muligvis kræver en dvale i få sekunder for at indlæse webelementerne eller for at opfylde en bestemt betingelse. Der er to typer ventetider tilgængelige i WebDriver.
- Implicit Vent
- Eksplicit Vent
- Implicit ventetid bruges til at give en standard ventetid mellem hvert på hinanden følgende testtrin / kommando på tværs af hele testscriptet. Således vil det efterfølgende testtrin kun udføres, når den specificerede tid er gået efter udførelse af det forrige testtrin / kommando.
- Eksplicit ventetid bruges til at standse udførelsen, indtil det tidspunkt, en bestemt betingelse er opfyldt, eller den maksimale tid er gået. I modsætning til implicit ventetid anvendes eksplicit ventetid kun til en bestemt forekomst.
- WebDriver introducerer klasser som WebDriverWait og ExpectedConditions for at håndhæve eksplicit ventetid
- ExpectedConditions klasse giver en stor hjælp til at håndtere scenarier, hvor vi er nødt til at fastslå, om en tilstand skal opstå, før vi udfører det faktiske teststrin.
- ExpectedConditions-klassen leveres med en bred vifte af forventede forhold, der kan tilgås ved hjælp af WebDriverWait-referencevariablen og indtil () -metoden.
- Naviger () metoder / kommandoer bruges til at simulere brugerens adfærd, mens du navigerer mellem forskellige websider frem og tilbage.
Næste tutorial # 16 : Når vi kommer til den næste vejledning på listen, vil vi gøre brugerne fortrolige med forskellige typer alarmer, der kan vises, når de åbner websteder og deres håndteringsmetoder i WebDriver. De typer alarmer, som vi vil fokusere på, er hovedsageligt - windows-baserede pop op-vinduer og web-baserede pop op-vinduer. Da vi ved, at håndtering af Windows-baserede pop op-vinduer er uden for WebDrivers muligheder, vil vi derfor også udøve nogle tredjepartsværktøjer til at håndtere vinduespopups.
Bemærk til læserne : Indtil da kan læserne automatisere scenarierne med forskellige sideindlæsninger og dynamiske elementer, der dukker op på skærmen ved hjælp af de forskellige forventede forhold og navigeringskommandoer.
Anbefalet læsning
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- Introduktion til Selen WebDriver - Selen Tutorial # 8
- Implementering af vores første WebDriver Script - Selenium WebDriver Tutorial # 10
- Ofte stillede spørgsmål om selen
- Sådan håndteres alarmer / pop op-vinduer i Selen WebDriver - Selen-vejledning nr. 16
- Vejledning til generering af omfattende rapporter i Selen WebDriver
- Sådan køres Selenium WebDriver i forskellige populære browsere
- WebDriver Hele installationen og installationen med Eclipse - Selenium-tutorial # 9