implicit explicit wait selenium webdriver
Lær implisitt og eksplisitt ventetid i Selen WebDriver:
I forrige opplæring prøvde vi å gjøre deg kjent med de forskjellige WebDrivers looping og betingede operasjoner . Disse betingede metodene tar ofte for seg nesten alle typer synlighetsalternativer for webelementer.
Gå videre i dette gratis Selen-treningsserie , vi vil diskutere forskjellige typer ventetider levert av Selenium WebDriver . Vi vil også diskutere om v forskjellige typer navigasjonsalternativer tilgjengelig i WebDriver.
Ventetider hjelper brukeren med å feilsøke problemer mens de omdirigerer til forskjellige nettsider ved å oppdatere hele websiden og laste den nye webelementer. Noen ganger kan det også være Ajax-samtaler. Dermed kan en tidsforsinkelse sees mens du laster inn websidene på nytt og gjenspeiler nettelementene.
Brukere blir ofte funnet ved å navigere gjennom forskjellige websider frem og tilbake. Navigering () -kommandoer / -metoder som tilbys av WebDriver hjelper dermed brukeren med å simulere sanntidsscenarier ved å navigere mellom websidene med referanse til nettleserens historie.
WebDriver utstyrer brukeren med to gener som venter for å håndtere den gjentatte siden s, webelementlaster, utseendet til windows, popup-vinduer og feilmeldinger og refleksjon av webelementer på websiden.
- Implisitt Vent
- Eksplisitt Vent
La oss diskutere hver av dem i detalj med tanke på den praktiske tilnærmingen.
Hva du vil lære:
- WebDriver Implisitt Vent
- WebDriver Eksplisitt Vent
- Forventet tilstand
- Navigering ved hjelp av WebDriver
- Konklusjon
- Anbefalt lesing
WebDriver Implisitt Vent
Implisitt ventetid brukes til å gi en standard ventetid (si 30 sekunder) mellom hvert påfølgende teststrinn / kommando på tvers av hele testskriptet. Dermed vil det påfølgende testtrinnet bare utføres når de 30 sekundene har gått etter å ha utført det forrige teststrinnet / kommandoen.
Viktige merknader
- Den implisitte ventetiden er en enkelt linje i en kode og kan erklæres i oppsettmetoden til testskriptet.
- Sammenlignet med Eksplisitt ventetid er Implisitt venting gjennomsiktig og ukomplisert. Syntaksen og tilnærmingen er enklere enn eksplisitt ventetid.
Å være enkel og enkel å bruke, implisitt vent introduserer også noen ulemper. Det gir opphav til utførelsestid for testskriptet, ettersom hver av kommandoene ikke lenger vil vente i en bestemt tid før gjenopptakelsen gjenopptas.
For å feilsøke dette problemet introduserer WebDriver således eksplisitte venter der vi eksplisitt kan bruke venter når situasjonen oppstår i stedet for å vente kraftig mens vi utfører hvert av teststrinnene.
Importer uttalelser
import java.util.concurrent.TimeUnit - For å få tilgang til og bruke implisitt ventetid i testskriptene våre, er vi nødt til å importere denne pakken til testskriptet vårt.
Syntaks
drv .manage (). timeouts (). implicitWait (10, TimeUnit. SEKUNDER );
Inkluder den ovennevnte kodelinjen i testskriptet ditt umiddelbart etter instantiering av WebDriver-forekomstvariabelen. Dermed er dette alt som kreves for å sette en implisitt ventetid i testskriptet ditt.
Code Walkthrough
Den implisitte ventemandatet til å overføre to verdier som parametere. Det første argumentet indikerer tiden i de numeriske sifrene som systemet trenger å vente. Det andre argumentet indikerer tidsmålingsskalaen. I ovennevnte kode har vi således nevnt “30” sekunder som standard ventetid, og tidsenheten er satt til “sekunder”.
WebDriver Eksplisitt Vent
Eksplisitte venter brukes til å stoppe utførelsen til den tid en bestemt betingelse er oppfylt eller maksimum tid har gått. I motsetning til implisitte venter, brukes eksplisitte venter bare for en bestemt forekomst.
WebDriver introduserer klasser som WebDriverWait og ExpectedConditions for å håndheve eksplisitte venter i testskriptene. I tråd med denne diskusjonen vil vi bruke “gmail.com” som et eksemplar.
Scenario skal automatiseres
- Start nettleseren og åpne “gmail.com”
- Skriv inn et gyldig brukernavn
- Skriv inn et gyldig passord
- Klikk på påloggingsknappen
- Vent til Compose-knappen er synlig etter sideinnlasting
WebDriver-kode ved bruk av eksplisitt ventetid
Vær oppmerksom på at vi for å lage skript bruker 'Learning_Selenium' -prosjektet som ble opprettet i de tidligere opplæringene.
Trinn 1 : Opprett en ny java-klasse med navnet “Wait_Demonstration” under “Learning_Selenium” -prosjektet.
Steg 2 : Kopier og lim inn koden nedenfor i klassen “Wait_Demonstration.java”.
Nedenfor er testskriptet som tilsvarer ovennevnte 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(); } }
Importer uttalelser
- import org. openqa.selenium.support.ui.ExpectedConditions
- import org. openqa.selenium.support.ui.WebDriverWait
- Importer over pakker før skriptopprettelsen. Pakkene refererer til Velg klasse som kreves for å håndtere rullegardinmenyen.
Objektinstantiering for WebDriverWait-klassen
WebDriver Vent litt = ny WebDriverWait ( drv , 30);
Vi lager en referansevariabel 'vent' for WebDriverWait-klassen og instantier den ved hjelp av WebDriver-forekomst og maksimal ventetid for utførelsen til permittering. Den maksimale oppgitte ventetiden måles i “sekunder”.
WebDriver instantiering ble diskutert i de første opplæringene til WebDriver.
Forventet tilstand
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click();
Ovennevnte kommando venter på at en bestemt tidsperiode eller en forventet tilstand skal oppstå, avhengig av hva som inntreffer eller som går først.
For å være i stand til å gjøre dette, bruker vi 'vent' referansevariabelen til WebDriverWait-klassen opprettet i forrige trinn med ExpectedConditions-klassen og en faktisk tilstand som forventes å oppstå. Så snart den forventede tilstanden oppstår, vil programkontrollen flytte til neste utføringstrinn i stedet for å vente kraftig i hele 30 sekunder.
I eksemplet vårt venter vi på at 'komponere' -knappen skal være til stede og lastes inn som en del av hjemmesidebelastningen, og deretter går vi videre med å ringe klikk-kommandoen på 'skriv' -knappen.
Typer forventede forhold
ExpectedConditions-klassen gir god hjelp til å håndtere scenarier der vi må fastslå at en tilstand skal oppstå før vi utfører det faktiske teststrinnet.
ExpectedConditions-klassen kommer med et bredt spekter av forventede forhold som er tilgjengelige ved hjelp av WebDriverWait-referansevariabelen og til () -metoden.
La oss diskutere noen få av dem:
# 1) elementToBeClickable () - Den forventede tilstanden venter på at et element skal kunne klikkes, dvs. det skal være til stede / vises / synlig på skjermen så vel som aktivert.
Eksempelkode
wait.until (ExpectedConditions.elementToBeClickable (By.xpath ( “// div (inneholder (tekst (),‘ KOMPOSIS ’))” )));
# 2) textToBePresentInElement () - Den forventede tilstanden venter på et element som har et bestemt strengemønster.
Eksempelkode
wait.until (ExpectedConditions.textToBePresentInElement (By.xpath ( “// div (@ id =‘ forgotPass '”),“ tekst å finne ” ));
hva er en .bin fil?
# 3) alertIsPresent () - Den forventede tilstanden venter på at en varselboks skal vises.
Eksempelkode
vent.tiltil (ExpectedConditions.alertIsPresent ())! = null);
# 4) titleIs () - Den forventede tilstanden venter på en side med en bestemt tittel.
Eksempelkode
wait.until (ExpectedConditions.titleIs ( “Gmail” ));
# 5) frameToBeAvailableAndSwitchToIt () - Den forventede tilstanden venter på at en ramme skal være tilgjengelig, og så snart rammen er tilgjengelig, bytter kontrollen automatisk til den.
Eksempelkode
wait.until (ExpectedConditions.frameToBeAvailableAndSwitchToIt (By.id (“ newframe ')));
Det er en veldig vanlig brukerhandling der brukeren klikker på knappene bakover og fremover i nettleseren frem og tilbake for å navigere til de forskjellige websidene som er besøkt i den nåværende økten i nettleserens historie. For å simulere slike handlinger utført av brukerne, introduserer WebDriver Navigate-kommandoer.
La oss undersøke disse kommandoene i detalj:
# 1) naviger (). Tilbake ()
Denne kommandoen lar brukeren navigere til forrige webside.
Eksempelkode:
driver.navigate (). tilbake ();
Ovennevnte kommando krever ingen parametere og tar brukeren tilbake til forrige webside i nettleserens historie.
# 2) naviger (). Fremover ()
Denne kommandoen lar brukeren navigere til neste webside med referanse til nettleserens historie.
Eksempelkode:
driver.navigate (). fremover ();
Ovennevnte kommando krever ingen parametere og fører brukeren videre til neste nettside i nettleserens historie.
# 3) naviger (). Oppdater ()
Denne kommandoen lar brukeren oppdatere den nåværende websiden og dermed laste alle webelementene på nytt.
Eksempelkode:
driver.navigate (). oppdater ();
Ovennevnte kommando krever ingen parametere og laster inn nettsiden på nytt.
# 4) naviger (). Til ()
Denne kommandoen lar brukeren starte et nytt nettleservindu og navigere til den angitte URL-en.
Eksempelkode:
driver.navigate (). til (“http://google.com”);
Ovennevnte kommando krever en web-URL som parameter, og deretter åpnes den angitte URL-en i en nylig lansert nettleser.
Konklusjon
I dette Implisitt og eksplisitt vent i Selenium WebDriver-opplæringen , vi prøvde å gjøre deg kjent med WebDrivers ventetid. Vi diskuterte og utøvde både eksplisitt og implisitt ventetid. Samtidig diskuterte vi også de forskjellige navigeringskommandoer.
Her er kjernen i denne artikkelen:
- WebDriver lar brukeren velge mellom tilgjengelige ventetider for å håndtere situasjoner der utførelsesflyten kan kreve en hvilemodus i noen sekunder for å laste inn webelementene eller for å oppfylle en bestemt tilstand. Det er to typer ventetider tilgjengelig i WebDriver.
- Implisitt Vent
- Eksplisitt Vent
- Implisitt venter brukes til å gi en standard ventetid mellom hvert påfølgende teststrinn / kommando på tvers av hele testskriptet. Dermed vil det påfølgende testtrinnet bare utføres når den angitte tiden har gått etter å ha utført det forrige teststrinnet / kommandoen.
- Eksplisitt venter brukes til å stoppe utførelsen til den tid en bestemt betingelse er oppfylt eller maksimal tid har gått. I motsetning til implisitte venter, brukes eksplisitte venter bare for en bestemt forekomst.
- WebDriver introduserer klasser som WebDriverWait og ExpectedConditions for å håndheve eksplisitte venter
- ExpectedConditions klasse gir en god hjelp til å håndtere scenarier der vi må fastslå at en tilstand skal oppstå før vi utfører det faktiske teststrinnet.
- ExpectedConditions-klassen kommer med et bredt spekter av forventede forhold som er tilgjengelige ved hjelp av WebDriverWait-referansevariabelen og til () -metoden.
- Naviger () metoder / kommandoer brukes til å simulere brukeratferden mens du navigerer mellom forskjellige websider frem og tilbake.
Neste opplæring # 16 : Når vi kommer til neste opplæring i listen, vil vi gjøre brukerne kjent med forskjellige typer varsler som kan vises når de besøker nettsteder og deres håndteringsmetoder i WebDriver. Hvilke typer varsler vi vil fokusere på er hovedsakelig - vindusbaserte varslingsvinduer og nettbaserte varselsvinduer. Siden vi vet at håndtering av Windows-baserte popup-vinduer er utenfor WebDrivers muligheter, vil vi også utøve noen tredjepartsverktøy for å håndtere popup-vinduer.
Merknad for leserne : Inntil da kan leserne automatisere scenariene med forskjellige sidelast og dynamiske elementer som dukker opp på skjermen ved hjelp av de forskjellige forventede forholdene og navigeringskommandoer.
Anbefalt lesing
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- Introduksjon til Selen WebDriver - Selenium Tutorial # 8
- Implementering av vårt første WebDriver Script - Selenium WebDriver Tutorial # 10
- Vanlige spørsmål om selen
- Hvordan håndtere varsler / popup-vinduer i Selen WebDriver - Selenium-veiledning nr. 16
- Veiledning for å generere omfattende rapporter i Selenium WebDriver
- Hvordan kjøre Selen WebDriver i forskjellige populære nettlesere
- WebDriver Hele installasjonen og installasjonen med Eclipse - Selenium Tutorial # 9