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
- Netiešā gaidīšana
- 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ā
- alertIsPresent ()
- elementSelectionStateToBe ()
- elementToBeClickable ()
- elementToBeSelected ()
- frameToBeAvaliableAndSwitchToIt ()
- invisibilityOfTheElementLocated ()
- invisibilityOfElementWithText ()
- klātbūtneOfAllElementsLocatedBy ()
- klātbūtneOfElementLocated ()
- textToBePresentInElement ()
- textToBePresentInElementLocated ()
- textToBePresentInElementValue ()
- titleIs ()
- titleContains ()
- visibilityOf ()
- visibilityOfAllElements ()
- visibilityOfAllElementsLocatedBy ()
- 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");}Pagaidietpagaidiet = 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:
Pagaidietpagaidiet = 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 |
---|---|
|
|
|
|
|
|
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