Kuidas hallata AJAX-kõnesid Selenium Veebidraiver
Mis on Ajax?
AJAX tähistab Asünkroonne Javaskript ja XML, ja see võimaldab veebilehel hankida serverist väikeseid andmeid ilma kogu lehte uuesti laadimata.
Ajax on tehnika, mida kasutatakse kiirete ja dünaamiliste veebilehtede loomiseks. See tehnika on asünkroonne ja kasutab kombinatsiooni Javascript ja XML. See värskendab veebilehe osi ilma kogu lehte uuesti laadimata. Mõned kuulsad rakendused, mis kasutavad AJAX-i tehnikat, on Gmail, Google Maps, Facebook, Youtube jne.
Kuidas Ajax töötab?
Näiteks kui klõpsate nuppu Esita, JavaScript esitab serverile päringu, tõlgendab tulemust ja värskendab praegust ekraani ilma veebilehte uuesti laadimata.
- Ajaxi kõne on brauseri algatatud asünkroonne päring, mis ei too otseselt kaasa lehe üleminekut. See tähendab, et kui käivitate Ajaxi päringu, saab kasutaja endiselt rakendusega töötada, kuni päring ootab vastust.
- AJAX saadab HTTP-päringud kliendilt serverile ja seejärel töötleb serveri vastust ilma kogu lehte uuesti laadimata. Nii et kui teete AJAX-kõne, siis pole päris kindlad, kui kaua kulub serveril vastuse saatmiseks.
Kui kontrollite kuvatavat sisu või elementi, siis testija seisukohast peate ootama, kuni saate vastuse. AJAX-kõne ajal salvestatakse andmed XML-vormingus ja hangitakse serverist.
Kuidas käsitleda Ajaxi kõnesid Selenium Veebidraiver
. suurim väljakutse Ajaxi kõne käsitlemisel on veebilehe laadimisaja teadmine. Kuna veebilehe laadimine kestab vaid murdosa sekunditest, on testijal raske sellist rakendust automatiseerimisvahendi abil testida. Selle eest Selenium Veebidraiver peab selle Ajaxi kõne puhul kasutama ootemeetodit.
Nii et selle ootamiskäsu täitmisel peatab seleen voolu täitmise Testjuhtum ja oodake oodatud või uut väärtust. Kui ilmub uus väärtus või väli, käivitab peatatud testjuhtumid Selenium Veebidraiver.
Järgnevalt on toodud ootemeetodid, mis Selenium Veebidraiver saab kasutada
Thread.Sleep()
- Thread.Sleep () ei ole mõistlik valik, kuna see peatab praeguse lõime määratud ajaks.
- AJAX-is ei saa te täpses ooteajas kunagi kindel olla. Seega teie test ebaõnnestub, kui elementi ooteaja jooksul ei kuvata. Veelgi enam, see suurendab üldkulusid, kuna Thread.sleep(t) kutsumine muudab praeguse lõime töötavast järjekorrast ootejärjekorda teisaldamiseks.
- Pärast aja 't' täitmist liigub praegune lõim ootejärjekorrast valmis järjekorda ja seejärel kulub CPU-l selle valimine ja käivitamine veidi aega.
Kaudne ootamine ()
- See meetod käsib veebidraiveril oodata, kui element pole kohe saadaval, kuid see ootamine jääb kehtima kogu brauseri avatud aja jooksul. Seega võib lehel olevate elementide otsimine võtta aega, milleks on määratud kaudne ootamine.
Otsene ootamine ()
- Otsene ootamine kasutatakse testi täitmise külmutamiseks, kuni konkreetne tingimus on täidetud või maksimaalne aeg möödub.
Veebidraiver, oodake
- Seda saab kasutada mis tahes tingimustel. Seda saab saavutada rakendusega WebDriverWait koos funktsiooniga ExpectedCondition
- Parim viis elemendi dünaamiliseks ootamiseks on tingimuse kontrollimine iga sekundi järel ja skripti järgmise käsuga jätkamine niipea, kui tingimus on täidetud.
Kuid kõigi nende ootamiste probleem on see, et peate mainima ajalõpu ühikut. Mis siis, kui elementi ei ole aja jooksul ikka veel olemas? Seega on veel üks ootamine, mida nimetatakse Fluent ootamiseks.
Sujuv ootamine
- See on ooteliidese teostus, millel on aegumistähtaja ja küsitlusintervall. Iga FluentWait eksemplar määrab tingimuse ootamise maksimaalse aja ja sageduse, millega tingimust kontrollida.
Väljakutsed Ajaxi kõne käsitlemisel Selenium Veebidraiver
- Käsu "paus" kasutamine Ajaxi kõne haldamiseks ei ole täiesti usaldusväärne. Pikk pausiaeg muudab testi lubamatult aeglaseks ja suurendab Testimine aega. Selle asemel on Ajaxi rakenduste testimisel kasulikum „waitforcondition”.
- Konkreetsete Ajaxi rakendustega seotud riske on raske hinnata
- Kui arendajatele on antud täielik vabadus Ajaxi rakendust muuta, muudab testimise protsessi keeruliseks
- Automatiseeritud testipäringu loomine võib testimistööriistade jaoks olla keeruline, kuna sellised AJAX-rakendused kasutavad POST-andmete esitamiseks sageli erinevat kodeerimis- või serialiseerimistehnikat.
Koodinäide Ajax HANDLING'i kasutamiseks Selenium Veebidraiver
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.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class Ajaxdemo { private String URL = "https://demo.guru99.com/test/ajax.html"; WebDriver driver; WebDriverWait wait; @BeforeClass public void setUp() { System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe"); //create chrome instance driver = new ChromeDriver(); driver.manage().window().maximize(); driver.navigate().to(URL); } @Test public void test_AjaxExample() { By container = By.cssSelector(".container"); wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.presenceOfElementLocated(container)); //Get the text before performing an ajax call WebElement noTextElement = driver.findElement(By.className("radiobutton")); String textBefore = noTextElement.getText().trim(); //Click on the radio button driver.findElement(By.id("yes")).click(); //Click on Check Button driver.findElement(By.id("buttoncheck")).click(); /*Get the text after ajax call*/ WebElement TextElement = driver.findElement(By.className("radiobutton")); wait.until(ExpectedConditions.visibilityOf(TextElement)); String textAfter = TextElement.getText().trim(); /*Verify both texts before ajax call and after ajax call text.*/ Assert.assertNotEquals(textBefore, textAfter); System.out.println("Ajax Call Performed"); String expectedText = "Radio button is checked and it's value is Yes"; /*Verify expected text with text updated after ajax call*/ Assert.assertEquals(textAfter, expectedText); driver.close(); } }
kokkuvõte
- AJAX võimaldab veebilehel hankida serverist väikeseid andmeid ilma kogu lehte uuesti laadimata.
- Ajaxi rakenduse testimiseks tuleks rakendada erinevaid ootemeetodeid
- ThreadSleep
- Kaudne ootamine
- Selgesõnaline ootamine
- Veebidraiver, oodake
- Sujuv ootamine
- Automatiseeritud testipäringu loomine võib testimistööriistade jaoks olla keeruline, kuna sellised AJAX-rakendused kasutavad POST-andmete esitamiseks sageli erinevat kodeerimis- või serialiseerimistehnikat.