Kaudne, selgesõnaline ja & Sujuv ootamine seleeni veebidraiveris

Lang L: none (table-of-contents):

Anonim

Seleenis on "Ootel" testide läbiviimisel oluline roll. Selles õpetuses saate teada seleenis nii "kaudse" kui ka "selge" ootuse erinevaid aspekte.

Selles õpetuses saate teada:

  • Miks vajame seleenis ootamist?
  • Kaudne ootamine
  • Selgesõnaline ootamine
  • Sujuv ootamine

Miks vajame seleenis ootamist?

Enamik veebirakendusi on välja töötatud Ajaxi ja Javascripti kasutades. Kui brauser laadib lehe, võivad elemendid, millega soovime suhelda, erineva intervalliga laadida.

See muudab elemendi tuvastamise keeruliseks, kuid kui elementi ei asu, loob see ka erandi " ElementNotVisibleException ". Selenium Waitsi kasutades saame selle probleemi lahendada.

Vaatleme stsenaariumi, kus peame testis kasutama nii kaudseid kui ka otseseid ootusi. Oletame, et vaikimisi ooteaeg on seatud 20 sekundiks ja selgesõnaliseks ooteajaks 10 sekundit.

Oletame, et proovime leida elementi, millel on mõned "ExpectedConditions " (selgesõnaline ootamine). Kui element ei asu eksplitsiitses ootuses määratletud aja jooksul (10 sekundit), kasutab see kaudse ootega määratud ajaraami ( 20 sekundit) enne viskamist " ElementNotVisibleException ".

Seleeni veebidraiver ootab

  1. Kaudne ootamine
  2. Selgesõnaline ootamine

Kaudne ootamine seleenis

Kaudsed ootama Seleen on tavaks öelda web juht ootama teatud aja jooksul enne seda viskab "No sellist elementi Erand". Vaikimisi seade on 0. Kui oleme aja määranud, ootab veebidraiver enne erandi viskamist selle aja elementi.

Seleeni veebidraiver on kaudse ootamise idee Watirilt laenanud.

Allpool toodud näites oleme kuulutanud kaudse ootamise ajavahemikuga 10 sekundit. See tähendab, et kui element ei asu selle aja jooksul veebilehel, loob see erandi.

Kaudse ootamise kuulutamine:

Süntaks :

driver.manage (). timeout (). implicitlyWait (TimeOut, TimeUnit.SECONDS); 
pakett guru.test99;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.testng.annotations.Test;avaliku klassi AppTest {kaitstud WebDriveri draiver;@Testpublic void guru99tutorials () viskab katkestatud erandi{System.setProperty ("veebidraiver.chrome.driver", ". \\ chromedriver.exe");draiver = uus ChromeDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);String eTitle = "Demo Guru99 leht";String aTitle = "";// käivitage Chrome ja suunake see ümber põhi-URL-iledriver.get ("http://demo.guru99.com/test/guru99home/");// Maksimeerib brauseriaknadraiver.halda (). aken (). maksimeeri ();// saada pealkirja tegelik väärtusaTitle = draiver.getTitle ();// võrdle tegelikku pealkirja oodatava pealkirjagakui (aTitle.equals (eTitle)){System.out.println ("Test läbitud");}veel {System.out.println ("Test nurjus");}// brauseri sulgeminejuht.sule ();}}

Koodi selgitus

Ülaltoodud näites

Kaaluge järgmist koodi:

driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);

Kaudne ootamine aktsepteerib 2 parameetrit, esimene parameeter aktsepteerib aega täisarvu väärtusena ja teine ​​parameeter aktsepteerib aja mõõtmist sekundites, MINUTites, MILISEKONDIDES, MIKROSEKUNDIT, NANOSEKUNDIT, PÄEVA, TUNNI jne.

Selge ootamine seleenis

Otsene ootama Seleen on tavaks öelda Web Driver ootama teatud tingimustel (Oodatav tingimused) või maksimaalne aeg ületatud enne viskamine "ElementNotVisibleException" erand. See on intelligentne ooteaeg, kuid seda saab rakendada ainult määratud elementide jaoks. See annab paremaid võimalusi kui kaudne ootamine, oodates dünaamiliselt laaditud Ajaxi elemente.

Kui oleme selgesõnalise ootuse välja kuulutanud, peame kasutama funktsiooni " ExpectedConditions " või saame konfigureerida, kui sageli soovime tingimust kontrollida sujuva ootamise abil . Nendel päevadel kasutame rakendamise ajal Thread.Sleep () seda kasutada

Allpool toodud näites loome klassi " WebDriverWait " viiteootamise ja viite " WebDriver " abil installeerimise ning anname maksimaalse ajavahemiku 20 sekundit.

Süntaks:

WebDriverWait wait = uus WebDriverWait (WebDriverRefrence, TimeOut);
pakett guru.test99;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.support.ui.ExpectedConditions;import org.openqa.selenium.support.ui.WebDriverWait;import org.testng.annotations.Test;avalik klass AppTest2 {kaitstud WebDriveri draiver;@Testpublic void guru99tutorials () viskab katkestatud erandi{System.setProperty ("veebidraiver.chrome.driver", ". \\ chromedriver.exe");draiver = uus ChromeDriver ();WebDriverWait wait = uus WebDriverWait (draiver, 20);String eTitle = "Demo Guru99 leht";String aTitle = "";// käivitage Chrome ja suunake see ümber põhi-URL-iledriver.get ("http://demo.guru99.com/test/guru99home/");// Maksimeerib brauseriaknadraiver.halda (). aken (). maksimeeri ();// saada pealkirja tegelik väärtusaTitle = draiver.getTitle ();// võrdle tegelikku pealkirja oodatava pealkirjagaif (aTitle.contentEquals (eTitle)){System.out.println ("Test läbitud");}veel {System.out.println ("Test nurjus");}WebElementi guru99seleniumlink;guru99seleniumlink = ootama. Kuni (ExpectedConditions.visibilityOfElementLocated (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2] / div [2] / div / div / div / div / div [1] / div / div / a / i ")));guru99seleniumlink.click ();}}

Koodi selgitus

Kaaluge järgmist koodi:

WebElementi guru99seleniumlink;guru99seleniumlink = ootama. Kuni (ExpectedConditions.visibilityOfElementLocated (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2] / div [2] / div / div / div / div / div [1] / div / div / a / i ")));guru99seleniumlink.click ();

Selles WebDriveri ootenäites oodake klassis " WebDriverWait " või " ExpectedConditions " määratletud aja möödumist olenevalt sellest, kumb toimub varem.

Ülaltoodud Java-kood ütleb, et me ootame 20-sekundilist ajavahemikku, nagu on määratletud veebilehe klassis " WebDriverWait ", kuni " ExpectedConditions " on täidetud ja tingimuseks on " visibilityofElementLocated ".

Järgmised on eeldatavad tingimused, mida saab kasutada seleeni selgesõnalises ootuses

  1. alertIsPresent ()
  2. elementSelectionStateToBe ()
  3. elementToBeClickable ()
  4. elementToBeSelected ()
  5. frameToBeAvaliableAndSwitchToIt ()
  6. invisibilityOfTheElementLocated ()
  7. invisibilityOfElementWithText ()
  8. kohalolekOfAllElementsLocatedBy ()
  9. kohalolekOfElementLocated ()
  10. textToBePresentInElement ()
  11. textToBePresentInElementLocated ()
  12. textToBePresentInElementValue ()
  13. pealkiriIs ()
  14. pealkiri sisaldab ()
  15. visibilityOf ()
  16. visibilityOfAllElements ()
  17. visibilityOfAllElementsLocatedBy ()
  18. visibilityOfElementLocated ()

Sujuv ootamine seleenis

Fluent ootama Seleen määratlemiseks kasutatakse maksimaalselt aega veebis juht ootama tingimus, samuti seda, kui tihti me tahame kontrollida seisukorras enne viskamine "ElementNotVisibleException" erand. See kontrollib veebielementi korrapäraste ajavahemike järel, kuni objekt leitakse või toimub aegumine.

Sagedus: kordustsükli seadistamine ajaraamiga, et kontrollida / kontrollida seisundit regulaarselt

Vaatleme stsenaariumi, kus element laaditakse erinevate ajaintervallidega. Element võib laadida 10 sekundi, 20 sekundi või isegi rohkem kui see, kui kuulutame selgesõnaliseks 20 sekundi pikkuseks ootamiseks. Enne erandi viskamist oodatakse määratud ajani. Selliste stsenaariumide korral on sujuv ootamine ideaalne ooteaeg, kuna see püüab leida elemendi erineval sagedusel, kuni see leiab või viimane taimer saab otsa.

Süntaks:

Oota oot = uus FluentWait (viide WebDriverile).withTimeout (timeout, SECONDS).pollingEvery (ajalõpp, SECONDS).ignoring (Exception.class);

Ülaltoodud kood on vananenud versioonis Selenium v3.11 ja uuemates versioonides. Peate kasutama

Oota oot = uus FluentWait (viide WebDriverile).withTimeout (Sekundite kestus (SECONDS)).pollingEvery (Sekundite kestus (SECONDS)).ignoring (Exception.class);
pakett guru.test99;import org.testng.annotations.Test;import java.util.NoSuchElementException;import java.util.concurrent.TimeUnit;import java.util.function.Function;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.support.ui.ExpectedConditions;import org.openqa.selenium.support.ui.FluentWait;import org.openqa.selenium.support.ui.Oota;import org.openqa.selenium.support.ui.WebDriverWait;import org.testng.annotations.Test;avalik klass AppTest3 {kaitstud WebDriveri draiver;@Testpublic void guru99tutorials () viskab katkestatud erandi{System.setProperty ("veebidraiver.chrome.driver", ". \\ chromedriver.exe");String eTitle = "Demo Guru99 leht";String aTitle = "";draiver = uus ChromeDriver ();// käivitage Chrome ja suunake see ümber põhi-URL-iledriver.get ("http://demo.guru99.com/test/guru99home/");// Maksimeerib brauseriaknadraiver.halda (). aken (). maksimeeri ();// saada pealkirja tegelik väärtusaTitle = draiver.getTitle ();// võrdle tegelikku pealkirja oodatava pealkirjagaif (aTitle.contentEquals (eTitle)){System.out.println ("Test läbitud");}veel {System.out.println ("Test nurjus");}Oodake  oodake = uus FluentWait  (draiver).WithTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).kirjutamine (NoSuchElementException.class);WebElement clickeleniumlink = wait.until (uus funktsioon  () {avalik WebElementi rakendamine (WebDriveri draiver) {tagastage draiver.findElement (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2 ] / div [2] / div / div / div / div / div [1] / div / div / a / i "));}});// klõpsake seleeni lingilclickeleniumlink.click ();// sulgege ~ brauserjuht.sule ();}}

Koodi selgitus

Kaaluge järgmist koodi:

Oodake  oodake = uus FluentWait  (draiver).WithTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).kirjutamine (NoSuchElementException.class);

Ülaltoodud näites kuulutame välja sujuva ootamise, mille ajalõpp on 30 sekundit ja sageduseks seatakse 5 sekundit, eirates valikut " NoSuchElementException "

Kaaluge järgmist koodi:

avalik WebElementi rakendamine (WebDriveri draiver) {tagastage draiver.findElement (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2 ] / div [2] / div / div / div / div / div [1] / div / div / a / i ")); 

Oleme loonud uue funktsiooni lehe veebielemendi tuvastamiseks. (Nt: siin pole veebielement muud kui veebilink Selenium).

Sageduseks on seatud 5 sekundit ja maksimaalseks ajaks 30 sekundit. Seega tähendab see, et see kontrollib veebilehel olevat elementi iga 5 sekundi järel maksimaalselt 30 sekundi jooksul. Kui element asub selle aja jooksul, sooritab ta toiminguid, muidu viskab ta elemendi " ElementNotVisibleException "

Erinevus kaudse ootamise ja selgesõnalise ootamise vahel

Kaudne ootamine Selgesõnaline ootamine
  • Kaudset ooteaega rakendatakse skripti kõigile elementidele
  • Selgesõnalist ooteaega rakendatakse ainult neile elementidele, mis on meie jaoks ette nähtud
  • Kaudses ootuses ei pea me lokaliseeritavale elemendile määrama "ExpectedConditions"
  • Selgesõnalises ootuses peame lokaliseeritavale elemendile määrama "ExpectedConditions"
  • Soovitatav on kasutada, kui elemendid asuvad seleeni kaudses ootuses määratud ajaraamiga
  • Seda on soovitatav kasutada siis, kui elementide laadimine võtab kaua aega, ja ka elemendi nagu (visibilityOfElementLocated, elementToBeClickable, elementToBeSelected) omaduste kontrollimiseks.

Järeldus:

Seleenis kasutatavad erinevad ootused on kaudsed, selgesõnalised ja sujuvad ootused. Nende ootuste kasutamine põhineb täielikult erinevatel ajaintervallidel laaditavatel elementidel. Rakenduse testimise või raamistiku loomise ajal ei ole alati soovitatav kasutada rakendust Thread.Sleep ().

Selle artikli kirjutas Chaitanya Pujari