A szelénben a "Waits" fontos szerepet játszik a tesztek végrehajtásában. Ebben az oktatóanyagban megismerheti mind az "implicit", mind az "explicit" várakozás különböző aspektusait a szelénben.
Ebben az oktatóanyagban megtudhatja:
- Miért van szükség várakozásokra a szelénben?
- Implicit Wait
- Kifejezett várakozás
- Folyékony várakozás
Miért van szükség várakozásokra a szelénben?
A webes alkalmazások nagy részét az Ajax és a Javascript segítségével fejlesztik. Amikor egy oldalt betölt a böngésző, akkor az elemek, amelyekkel kölcsönhatásba szeretnénk lépni, különböző időközönként tölthetők be.
Nem csak ez nehezíti meg az elem azonosítását, hanem ha az elem nincs is elhelyezve, akkor kiveszi az " ElementNotVisibleException " kivételt. A Selenium Waits használatával megoldhatjuk ezt a problémát.
Vizsgáljunk meg egy olyan forgatókönyvet, ahol mind implicit, mind explicit várakozásokat kell használnunk tesztünk során. Tegyük fel, hogy az implicit várakozási idő 20 másodperc, az explicit várakozási idő pedig 10 másodperc.
Tegyük fel, hogy megpróbálunk olyan elemet találni, amely rendelkezik bizonyos "ExpectedConditions " (explicit várakozás) feltételekkel. Ha az elem nem az explicit várakozás által meghatározott időkereten belül található (10 másodperc), akkor az implicit várakozás által meghatározott időkeretet használja ( 20 másodperc), mielőtt eldobná az " ElementNotVisibleException " elemet .
A szelén web-illesztőprogram vár
- Implicit Wait
- Kifejezett várakozás
Implicit várakozás a szelénben
Az implicit várakozás a szelénben arra szólítja fel az internetes illesztőprogramot, hogy várjon egy bizonyos ideig, mielőtt "Nincs ilyen elem kivétel". Az alapértelmezett beállítás: 0. Miután beállítottuk az időt, a webillesztőprogram kivárás előtt megvárja az adott elemet.
A szelén web-illesztőprogram az implicit várakozás ötletét kölcsönkapta Watirtól.
Az alábbi példában implicit várakozást deklaráltunk 10 másodperces időkerettel. Ez azt jelenti, hogy ha az elem az adott időkereten belül nem található meg a weboldalon, kivételt fog hozni.
Az implicit várakozás bejelentése:
Szintaxis :
driver.manage (). timeouts (). implicitlyWait (TimeOut, TimeUnit.SECONDS);
csomag guru.test99;importálja a 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;public class AppTest {védett WebDriver illesztőprogram;@Tesztpublic void guru99tutorials () dobja az InterruptedException-t{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");illesztőprogram = new ChromeDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);String eTitle = "Demo Guru99 oldal";String aTitle = "";// indítsa el a Chrome-ot, és irányítsa át az Alap URL-redriver.get ("http://demo.guru99.com/test/guru99home/");// Maximalizálja a böngészőablakotdriver.manage (). window (). maximize ();// megkapja a cím tényleges értékétaTitle = driver.getTitle ();// hasonlítsa össze a tényleges címet a várható címmelif (aTitle.equals (eTitle)){System.out.println ("Teszt sikeres");}más {System.out.println ("Sikertelen teszt");}// bezárja a böngészőtdriver.close ();}}
A kód magyarázata
A fenti példában
Fontolja meg a következő kódot:
driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);
Az implicit várakozás 2 paramétert fogad el, az első paraméter az időt egész számként fogadja el, a második pedig az időmérést SECONDS, MINUTES, MILISECOND, MICROSECONDS, NANOSECONDS, DAYS, HOURS stb.
Kifejezett várakozás a szelénben
Az explicit várakozás a szelénben arra szólítja fel a webillesztő programot, hogy várjon bizonyos feltételeket (Várható körülmények) vagy a túllépett maximális időt, mielőtt az "ElementNotVisibleException" kivételt dobja. Intelligens típusú várakozás, de csak meghatározott elemekre alkalmazható. Jobb lehetőségeket ad, mint az implicit várakozás, mivel dinamikusan betöltött Ajax elemekre vár.
Amint kifejezett várakozást deklaráltunk, akkor az " ExpectedConditions " -t kell használnunk, vagy a Fluent Wait segítségével beállíthatjuk, hogy milyen gyakran ellenőrizzük az állapotot . Manapság a megvalósítás során a Thread.Sleep () -t használjuk, általában nem ajánlott használni
Az alábbi példában referencia-várakozást hozunk létre a " WebDriverWait " osztály számára, és a " WebDriver " referencia segítségével példázzuk , és a maximális időkeretet 20 másodpercnek adjuk meg.
Szintaxis:
WebDriverWait wait = new WebDriverWait (WebDriverRefrence, TimeOut);
csomag guru.test99;importálja a 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;public class AppTest2 {védett WebDriver illesztőprogram;@Tesztpublic void guru99tutorials () dobja az InterruptedException-t{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");illesztőprogram = new ChromeDriver ();WebDriverWait wait = new WebDriverWait (illesztőprogram, 20);String eTitle = "Demo Guru99 oldal";String aTitle = "";// indítsa el a Chrome-ot, és irányítsa át az Alap URL-redriver.get ("http://demo.guru99.com/test/guru99home/");// Maximalizálja a böngészőablakotdriver.manage (). window (). maximize ();// megkapja a cím tényleges értékétaTitle = driver.getTitle ();// hasonlítsa össze a tényleges címet a várható címmelif (aTitle.contentEquals (eTitle)){System.out.println ("Teszt sikeres");}más {System.out.println ("Sikertelen teszt");}WebElement guru99seleniumlink;guru99seleniumlink = wait.until (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 ();}}
A kód magyarázata
Fontolja meg a következő kódot:
WebElement guru99seleniumlink;guru99seleniumlink = wait.until (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 ();
Ebben a WebDriver várakozási példában várja meg, hogy a " WebDriverWait " osztályban vagy az " ExpectedConditions " -ben meghatározott idő bekövetkezzen, amelyik bekövetkezik.
A fenti Java-kód kimondja, hogy 20 másodperces időkeretre várunk egy elemet, amint azt a weboldal " WebDriverWait " osztálya meghatározza, amíg az " ExpectedConditions " teljesül, és a feltétel " visibilityofElementLocated ".
Az alábbiakban felsoroljuk azokat a várható feltételeket, amelyek a szelén explicit várakozásban használhatók
- alertIsPresent ()
- elementSelectionStateToBe ()
- elementToBeClickable ()
- elementToBeSelected ()
- frameToBeAvaliableAndSwitchToIt ()
- invisibilityOfTheElementLocated ()
- invisibilityOfElementWithText ()
- jelenléteOfAllElementsLocatedBy ()
- jelenlétOfElementLocated ()
- textToBePresentInElement ()
- textToBePresentInElementLocated ()
- textToBePresentInElementValue ()
- titleIs ()
- titleTartalmaz ()
- visibilityOf ()
- visibilityOfAllElements ()
- visibilityOfAllElementsLocatedBy ()
- visibilityOfElementLocated ()
Folyékony várakozás a szelénben
A folyékony várakozás a szelénben arra szolgál, hogy meghatározzuk a web-illesztőprogram maximális idejét egy állapot megvárására, valamint azt a gyakoriságot, amellyel ellenőrizni akarjuk az állapotot, mielőtt az "ElementNotVisibleException" kivételt dobnánk. Rendszeres időközönként ellenőrzi a webelemet, amíg az objektum megtalálható vagy az időkorlát meg nem történik.
Frekvencia: Ismétlődő ciklus beállítása az időkerettel az állapot rendszeres időközönként történő ellenőrzésére / ellenőrzésére
Vegyünk egy forgatókönyvet, amikor egy elemet különböző időközönként töltünk be. Az elem 10 másodpercen belül, 20 másodpercen belül vagy még tovább is betöltődhet, mint akkor, ha kifejezett 20 másodperces várakozást jelentünk be. Kivárásig vár a megadott időig. Ilyen esetekben a folyékony várakozás az ideális várakozás, mivel ez megpróbálja más frekvencián megtalálni az elemet, amíg meg nem találja, vagy a végső időzítő el nem fogy.
Szintaxis:
Várjon várjon = új FluentWait (WebDriver hivatkozás).withTimeout (időtúllépés, SECONDS).pollingEvery (időtúllépés, SECONDS).ignoring (Kivétel.osztály);
A fenti kód elavult a Selenium v3.11 és újabb verzióiban. Használnia kell
Várjon várjon = új FluentWait (WebDriver hivatkozás).withTimeout (Duration.ofSeconds (SECONDS)).pollingEvery (másodpercek időtartama (SECONDS)).ignoring (Kivétel.osztály);
csomag guru.test99;import org.testng.annotations.Test;import java.util.NoSuchElementException;importálja a 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.Várjon;import org.openqa.selenium.support.ui.WebDriverWait;import org.testng.annotations.Test;public class AppTest3 {védett WebDriver illesztőprogram;@Tesztpublic void guru99tutorials () dobja az InterruptedException-t{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");String eTitle = "Demo Guru99 oldal";String aTitle = "";illesztőprogram = new ChromeDriver ();// indítsa el a Chrome-ot, és irányítsa át az Alap URL-redriver.get ("http://demo.guru99.com/test/guru99home/");// Maximalizálja a böngészőablakotdriver.manage (). window (). maximize ();// megkapja a cím tényleges értékétaTitle = driver.getTitle ();// hasonlítsa össze a tényleges címet a várható címmelif (aTitle.contentEquals (eTitle)){System.out.println ("Teszt sikeres");}más {System.out.println ("Sikertelen teszt");}Várjonvárjon = new FluentWait (illesztőprogram).withTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).ignoring (NoSuchElementException.class);WebElement clickeleniumlink = wait.until (új függvény () {nyilvános WebElement alkalmazás (WebDriver illesztőprogram) {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 "));}});// kattintson a szelén linkreclickeleniumlink.click ();// bezárja a ~ böngészőtdriver.close ();}}
A kód magyarázata
Fontolja meg a következő kódot:
Várjonvárjon = new FluentWait (illesztőprogram).withTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).ignoring (NoSuchElementException.class);
A fenti példában folyékony várakozást hirdetünk 30 másodperces időtúllépés mellett, és a frekvenciát 5 másodpercre állítjuk a " NoSuchElementException " figyelmen kívül hagyásával.
Fontolja meg a következő kódot:
nyilvános WebElement alkalmazás (WebDriver illesztőprogram) {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 "));
Új funkciót hoztunk létre a webes elem azonosítására az oldalon. (Például: Itt a Web Element nem más, mint a Selen link a weboldalon).
A frekvencia értéke 5 másodperc, a maximális idő pedig 30 másodperc. Ez tehát azt jelenti, hogy 5 másodpercenként, legfeljebb 30 másodpercig ellenőrzi az elemet a weboldalon. Ha az elem ezen az időkereten belül található, akkor elvégzi a műveleteket, különben eldob egy " ElementNotVisibleException "
Különbség az implicit várakozás és az explicit várakozás között
Implicit Wait | Kifejezett várakozás |
---|---|
|
|
|
|
|
|
Következtetés:
Az implicit, az explicit és a folyékony várakozás a Szelénben használt különféle várakozások. Ezeknek a várakozásoknak a felhasználása teljesen azokon az elemeken alapul, amelyeket különböző időközönként töltenek be. Mindig nem ajánlott a Thread.Sleep () használatát az alkalmazás tesztelése vagy a keretrendszer kiépítése közben.
A cikk írója: Csaitanja Pujari