Netiešs, nepārprotams un & Brīvi gaidiet selēna WebDriver

Satura rādītājs:

Anonim

Selēnā "Waits" spēlē nozīmīgu lomu testu izpildē. Šajā apmācībā jūs uzzināsiet dažādus gan “netiešās”, gan “nepārprotamās” gaidīšanas aspektus selēnā.

Šajā apmācībā jūs uzzināsiet:

  • Kāpēc mums vajag gaidīt selēnu?
  • Netiešā gaidīšana
  • Nepārprotama gaidīšana
  • Tekoši gaidiet

Kāpēc mums vajag gaidīt selēnu?

Lielākā daļa tīmekļa lietojumprogrammu tiek izstrādātas, izmantojot Ajax un Javascript. Kad pārlūkprogramma ielādē lapu, elementi, ar kuriem vēlamies mijiedarboties, var tikt ielādēti dažādos laika intervālos.

Tas ne tikai apgrūtina elementa identificēšanu, bet arī, ja elements neatrodas, tas radīs izņēmumu " ElementNotVisibleException ". Izmantojot Selenium Waits, mēs varam atrisināt šo problēmu.

Apsvērsim scenāriju, kurā testā jāizmanto gan netieša, gan skaidra gaidīšana. Pieņemsim, ka netiešais gaidīšanas laiks ir iestatīts uz 20 sekundēm un nepārprotams gaidīšanas laiks ir iestatīts uz 10 sekundēm.

Pieņemsim, ka mēs cenšamies atrast elementu, kuram ir daži "ExpectedConditions " (skaidra gaidīšana). Ja elements neatrodas skaidrā gaidīšanas laikā (10 sekundes), tas izmantos netiešās gaidīšanas noteikto laika periodu ( 20 sekundes), pirms iemetat " ElementNotVisibleException ".

Gaida selēna tīmekļa draiveris

  1. Netiešā gaidīšana
  2. Nepārprotama gaidīšana

Netiešā gaidīšana selīnā

Netieši gaidīt Selēns tiek izmantota, lai pastāstītu interneta draiveri jāgaida noteiktu laiku, pirms to izmet "Nav tāda Element izņēmumu". Noklusējuma iestatījums ir 0. Kad būsim iestatījuši laiku, tīmekļa draiveris gaidīs elementu šajā laikā, pirms izmet izņēmumu.

Selenium Web Driver ir aizņēmies netiešās gaidīšanas ideju no Watir.

Zemāk sniegtajā piemērā mēs esam paziņojuši par netiešu gaidīšanu ar laika periodu 10 sekundes. Tas nozīmē, ka, ja elements šajā laika posmā neatrodas tīmekļa lapā, tas radīs izņēmumu.

Lai paziņotu par netiešu gaidīšanu:

Sintakse :

driver.manage (). taimauti (). implicitlyWait (TimeOut, TimeUnit.SECONDS); 
pakete guru.test99;importēt java.util.concurrent.TimeUnit;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.chrome.ChromeDriver;importēt org.testng.annotations.Test;public class AppTest {aizsargāts WebDriver draiveris;@Pārbaudepublic void guru99tutorials () met InterruptedException{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");draiveris = jauns ChromeDriver ();draiveris.manage (). taimauts (). implicitlyWait (10, TimeUnit.SECONDS);String eTitle = "Demo Guru99 lapa";String aTitle = "";// palaidiet pārlūku Chrome un novirziet to uz bāzes URLdriver.get ("http://demo.guru99.com/test/guru99home/");// Palielina pārlūka logudraiveris.pārvaldīt (). logs (). maksimizēt ();// iegūt faktisko nosaukuma vērtībuaTitle = draiveris.getTitle ();// salīdzināt faktisko virsrakstu ar gaidīto virsrakstuja (aTitle.equals (eTitle)){System.out.println ("Pārbaudīts nokārtots");}cits {System.out.println ("Pārbaude neizdevās");}// aizveriet pārlūkuvadītājs.slēgt ();}}

Kodeksa skaidrojums

Iepriekš minētajā piemērā

Apsveriet šādu kodu:

draiveris.manage (). taimauts (). implicitlyWait (10, TimeUnit.SECONDS);

Netiešā gaidīšana pieņems divus parametrus, pirmais parametrs pieņems laiku kā veselu skaitli un otrais parametrs pieņems laika mērījumus sekunžu, MINUTU, MILISEKONDU, MIKROSEKUNDU, NANOSEKUNDU, DIENU, STUNDU utt.

Nepārprotama gaidīšana selīnā

Atklāta gaidīt Selēns tiek izmantota, lai pastāstītu Web Driver gaidīt zināmiem nosacījumiem (gaidāmajiem apstākļiem) vai maksimālo laiku pārsniedza pirms throwing "ElementNotVisibleException" izņēmums. Tas ir inteliģents gaidīšanas veids, taču to var piemērot tikai noteiktiem elementiem. Tas dod labākas iespējas nekā netieša gaidīšana, jo tā gaida dinamiski ielādētos Ajax elementus.

Kad mēs paziņojam par nepārprotamu gaidīšanu, mums jāizmanto " ExpectedConditions " vai arī mēs varam konfigurēt, cik bieži mēs vēlamies pārbaudīt stāvokli, izmantojot Fluent Wait . Šajās dienās, īstenojot, mēs izmantojam Thread.Sleep (), parasti to nav ieteicams izmantot

Jo tālāk piemērā, mēs radām atskaites jāgaida " WebDriverWait " klasē un Instances izmantojot " WebDriver " atsauces, un mēs dodam maksimālais laika posms ir 20 sekundes.

Sintakse:

WebDriverWait wait = new WebDriverWait (WebDriverRefrence, TimeOut);
pakete guru.test99;importēt java.util.concurrent.TimeUnit;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.WebElement;importēt org.openqa.selenium.chrome.ChromeDriver;importēt org.openqa.selenium.support.ui.ExpectedConditions;importēt org.openqa.selenium.support.ui.WebDriverWait;importēt org.testng.annotations.Test;publiskā klase AppTest2 {aizsargāts WebDriver draiveris;@Pārbaudepublic void guru99tutorials () met InterruptedException{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");draiveris = jauns ChromeDriver ();WebDriverWait wait = new WebDriverWait (draiveris, 20);String eTitle = "Demo Guru99 lapa";String aTitle = "";// palaidiet pārlūku Chrome un novirziet to uz bāzes URLdriver.get ("http://demo.guru99.com/test/guru99home/");// Palielina pārlūka logudraiveris.pārvaldīt (). logs (). maksimizēt ();// iegūt faktisko nosaukuma vērtībuaTitle = draiveris.getTitle ();// salīdzināt faktisko virsrakstu ar gaidīto virsrakstuif (aTitle.contentEquals (eTitle)){System.out.println ("Pārbaudīts nokārtots");}cits {System.out.println ("Pārbaude neizdevās");}WebElement guru99seleniumlink;guru99seleniumlink = pagaidīt.lidz (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 ();}}

Kodeksa skaidrojums

Apsveriet šādu kodu:

WebElement guru99seleniumlink;guru99seleniumlink = gaidīt. līdz [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 ();

Šajā WebDriver gaidīšanas piemērā pagaidiet, kamēr notiek laiks, kas noteikts klasē " WebDriverWait " vai " ExpectedConditions ", atkarībā no tā, kas notiek vispirms.

Iepriekš minētais Java kods norāda, ka mēs gaida elementu laika posmā 20 sekundes, kā noteikts tīmekļa vietnes klasē " WebDriverWait ", līdz tiek izpildīti nosacījumi " ExpectedConditions " un nosacījums ir " visibilityofElementLocated ".

Šie ir sagaidāmie apstākļi, kurus var izmantot selēna tiešā gaidīšanā

  1. alertIsPresent ()
  2. elementSelectionStateToBe ()
  3. elementToBeClickable ()
  4. elementToBeSelected ()
  5. frameToBeAvaliableAndSwitchToIt ()
  6. invisibilityOfTheElementLocated ()
  7. invisibilityOfElementWithText ()
  8. klātbūtneOfAllElementsLocatedBy ()
  9. klātbūtneOfElementLocated ()
  10. textToBePresentInElement ()
  11. textToBePresentInElementLocated ()
  12. textToBePresentInElementValue ()
  13. titleIs ()
  14. titleContains ()
  15. visibilityOf ()
  16. visibilityOfAllElements ()
  17. visibilityOfAllElementsLocatedBy ()
  18. visibilityOfElementLocated ()

Brīnišķīga gaidīšana selīnā

Tekoši gaidīt Selēns tiek izmantots, lai noteiktu maksimālo laiku web vadītājs gaidīt stāvokli, kā arī to, cik bieži mēs vēlamies, lai pārbaudītu stāvokli pirms throwing "ElementNotVisibleException" izņēmums. Tas regulāri pārbauda tīmekļa elementu, līdz objekts tiek atrasts vai iestājas taimauts.

Biežums: atkārtota cikla iestatīšana ar laika periodu, lai regulāri pārbaudītu / pārbaudītu stāvokli

Apsvērsim scenāriju, kurā elements tiek ielādēts dažādos laika intervālos. Elementu var ielādēt 10 sekundēs, 20 sekundēs vai pat vairāk nekā tad, ja mēs paziņojam par nepārprotamu gaidīšanu 20 sekundes. Pirms izmet izņēmumu, tas gaidīs līdz norādītajam laikam. Šādos scenārijos plūstoša gaidīšana ir ideāla gaidīšanas iespēja, jo tas mēģinās atrast elementu citā frekvencē, līdz tas to atradīs vai beigsies pēdējais taimeris.

Sintakse:

Pagaidiet gaidiet = jauns FluentWait (WebDriver atsauce).withTimeout (taimauts, SECONDS).pollingEvery (taimauts, SECONDS).greznošana (Exception.class);

Iepriekš minētais kods ir novecojis Selenium v3.11 un jaunākās versijās. Jums jāizmanto

Pagaidiet gaidiet = jauns FluentWait (WebDriver atsauce).withTimeout (sekunžu ilgums (SECONDS)).pollingEvery (sekunžu ilgums (SECONDS)).greznošana (Exception.class);
pakete guru.test99;importēt org.testng.annotations.Test;importēt java.util.NoSuchElementException;importēt java.util.concurrent.TimeUnit;importēt java.util.function.Function;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.WebElement;importēt org.openqa.selenium.chrome.ChromeDriver;importēt org.openqa.selenium.support.ui.ExpectedConditions;importēt org.openqa.selenium.support.ui.FluentWait;importēt org.openqa.selenium.support.ui.Wait;importēt org.openqa.selenium.support.ui.WebDriverWait;importēt org.testng.annotations.Test;publiskā klase AppTest3 {aizsargāts WebDriver draiveris;@Pārbaudepublic void guru99tutorials () met InterruptedException{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");String eTitle = "Demo Guru99 lapa";String aTitle = "";draiveris = jauns ChromeDriver ();// palaidiet pārlūku Chrome un novirziet to uz bāzes URLdriver.get ("http://demo.guru99.com/test/guru99home/");// Palielina pārlūka logudraiveris.pārvaldīt (). logs (). maksimizēt ();// iegūt faktisko nosaukuma vērtībuaTitle = draiveris.getTitle ();// salīdzināt faktisko virsrakstu ar gaidīto virsrakstuif (aTitle.contentEquals (eTitle)){System.out.println ("Pārbaudīts nokārtots");}cits {System.out.println ("Pārbaude neizdevās");}Pagaidiet  pagaidiet = new FluentWait  (draiveris).withTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).ignoring (NoSuchElementException.class);WebElement noklikšķina uz saites = wait.until (jauna funkcija  () {publisks WebElement pieteikums (WebDriver draiveris) {return driver.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 "));}});// noklikšķiniet uz saites selēnsclickeleniumlink.click ();// aizvērt ~ pārlūkuvadītājs.slēgt ();}}

Kodeksa skaidrojums

Apsveriet šādu kodu:

Pagaidiet  pagaidiet = new FluentWait  (draiveris).withTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).ignoring (NoSuchElementException.class);

Iepriekš minētajā piemērā mēs paziņojam par plūstošu gaidīšanu ar noildzi 30 sekundes, un frekvence tiek iestatīta uz 5 sekundēm, ignorējot " NoSuchElementException "

Apsveriet šādu kodu:

publisks WebElement pieteikums (WebDriver draiveris) {return driver.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 ")); 

Mēs esam izveidojuši jaunu funkciju, lai identificētu tīmekļa elementu lapā. (Piemēram: šeit tīmekļa elements nav nekas cits kā saite Selēns tīmekļa lapā).

Frekvence ir iestatīta uz 5 sekundēm, bet maksimālais laiks - uz 30 sekundēm. Tādējādi tas nozīmē, ka tas ik pēc 5 sekundēm pārbaudīs, vai vietnē ir elements, maksimāli 30 sekundes. Ja elements atrodas šajā laika posmā, tas veiks darbības, pretējā gadījumā tas izmetīs " ElementNotVisibleException "

Starpība starp netiešo gaidīšanu un nepārprotamo gaidīšanu

Netiešā gaidīšana Nepārprotama gaidīšana
  • Netiešais gaidīšanas laiks tiek piemērots visiem skripta elementiem
  • Skaidrs gaidīšanas laiks tiek piemērots tikai tiem elementiem, kurus mēs esam iecerējuši
  • Sadaļā Netiešā gaidīšana elementam, kas atrodas, nav jānorāda “ExpectedConditions”
  • Sadaļā Explicit Wait mums ir jānorāda "ExpectedConditions" elementam, kas atrodas
  • Ieteicams izmantot, ja elementi atrodas ar Selenium implicit wait norādīto laika periodu
  • Ieteicams izmantot, ja elementu ielāde prasa ilgu laiku, kā arī lai pārbaudītu elementa īpašību, piemēram, (visibilityOfElementLocated, elementToBeClickable, elementToBeSelected)

Secinājums:

Netiešā, nepārprotamā un plūstošā gaidīšana ir dažādas selēnā izmantotās gaidīšanas. Šo nogaidījumu izmantošana pilnībā balstās uz elementiem, kas tiek ielādēti dažādos laika intervālos. Pārbaudot lietojumprogrammu vai veidojot sistēmu, vienmēr nav ieteicams izmantot Thread.Sleep ().

Šī raksta autore ir Čaitanja Pudžari