Što je Ajax?
AJAX je kratica od Asinkroni JavaScript i XML, a web stranici omogućuje preuzimanje malih količina podataka s poslužitelja bez ponovnog učitavanja cijele stranice.
Ajax je tehnika koja se koristi za stvaranje brzih i dinamičnih web stranica. Ova je tehnika asinkrona i koristi kombinaciju Javascripta i XML-a.
Ažurirat će dijelove web stranice bez ponovnog učitavanja cijele stranice.
Neke od poznatih aplikacija koje koriste AJAX tehniku su Gmail, Google Maps, Facebook, Youtube itd.
U ovom vodiču naučit ćete-
- Što je Ajax?
- Kako Ajax radi?
- Kako se nositi s Ajax pozivom pomoću Selenium Webdriver
- Izazovi u rukovanju Ajax pozivima u Selenium Webdriver
Kako Ajax radi?
Na primjer, kada kliknete na gumb za slanje, JavaScript će poslati zahtjev poslužitelju, protumačiti rezultat i ažurirati trenutni zaslon bez ponovnog učitavanja web stranice.
- Ajaxov poziv je asinkroni zahtjev koji pokreće preglednik koji ne rezultira izravno prijelazom stranice. Znači, ako aktivirate Ajaxov zahtjev, korisnik i dalje može raditi na aplikaciji dok zahtjev čeka odgovor.
- AJAX šalje HTTP zahtjeve s klijenta na poslužitelj, a zatim obrađuje odgovor poslužitelja, bez ponovnog učitavanja cijele stranice. Dakle, kada uputite AJAX poziv, niste prilično sigurni u to koliko je vremena poslužitelju trebalo da vam pošalje odgovor .
S gledišta testera, ako provjeravate sadržaj ili element koji će se prikazati, morate pričekati dok ne dobijete odgovor. Tijekom AJAX poziva podaci se pohranjuju u XML formatu i preuzimaju s poslužitelja.
Kako se nositi s Ajax pozivom pomoću Selenium Webdriver
Najveći izazov u rukovanju Ajax poziv je znao vrijeme učitavanja za web-stranicu. Budući da će učitavanje web stranice trajati samo djelić sekundi, testeru je teško testirati takvu aplikaciju pomoću alata za automatizaciju. Za to, Selenium Webdriver mora koristiti metodu čekanja na ovom Ajax pozivu.
Izvršenjem ove naredbe čekanja, selenij će obustaviti izvršavanje trenutnog test slučaja i pričekati očekivanu ili novu vrijednost. Kad se pojavi nova vrijednost ili polje, suspendirane će test slučajeve izvršiti Selenium Webdriver.
Slijede metode čekanja koje Selenium Webdriver može koristiti
- Thread.Sleep ()
- Thread.Sleep () nije mudar izbor jer suspendira trenutnu nit na određeno vrijeme.
- U AJAX-u nikada ne možete biti sigurni u točno vrijeme čekanja. Dakle, test neće uspjeti ako se element ne pojavi u vremenu čekanja. Štoviše, to povećava opće troškove jer pozivanje Thread.sleep (t) čini da se trenutna nit premjesti iz tekućeg reda u red čekanja.
- Nakon dosegnutog vremena 't', trenutna nit premjestit će se iz reda čekanja u red spremnosti, a zatim treba određeno vrijeme da ga CPU odabere i pokrene.
- Implicitno čekanje ()
- Ova metoda govori webdriveru da pričeka ako element nije dostupan odmah, ali to će čekanje biti na snazi cijelo vrijeme dok je preglednik otvoren. Dakle, svako traženje elemenata na stranici može potrajati vrijeme za koje je postavljeno implicitno čekanje.
- Eksplicitno pričekajte ()
- Eksplicitno čekanje koristi se za zamrzavanje izvođenja testa dok ne ispuni određeni uvjet ili ne istekne maksimalno vrijeme.
- WebdriverČekaj
- Može se koristiti u bilo kojim uvjetima. To se može postići WebDriverWait-om u kombinaciji s ExpectedCondition
- Najbolji način da se dinamički čeka element je provjera stanja svake sekunde i nastavak na sljedeću naredbu u skripti čim je uvjet zadovoljen.
Ali problem svih ovih čekanja je, morate spomenuti jedinicu za vremensko ograničenje. Što ako element još uvijek nije prisutan unutar vremena? Dakle, postoji još jedno čekanje koje se naziva Tečno čekanje.
- Tečno pričekajte
- Ovo je implementacija sučelja Wait s vremenskim ograničenjem i intervalom glasanja. Svaka instanca FluentWait određuje maksimalno vrijeme čekanja na stanje, kao i učestalost provjere stanja.
Izazovi u rukovanju Ajax pozivima u Selenium Webdriver
- Korištenje naredbe "pause" za rukovanje Ajax pozivom nije potpuno pouzdano. Dugo vrijeme pauze čini test neprihvatljivo sporim i povećava vrijeme testiranja. Umjesto toga, "waitforcondition" će biti korisniji u testiranju Ajax aplikacija.
- Teško je procijeniti rizik povezan s određenim Ajaxovim aplikacijama
- Dajući punu slobodu programerima da modificiraju Ajaxovu aplikaciju, postupak testiranja predstavlja izazov
- Stvaranje automatiziranog zahtjeva za testiranje može biti teško za alate za testiranje, jer takva aplikacija AJAX često koristi različite tehnike kodiranja ili serializacije za slanje POST podataka.
Primjer za AJAXOVO RUKOVANJE
uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz 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;javna klasa Ajaxdemo {URL privatnog niza = "http://demo.guru99.com/test/ajax.html";Upravljački program za WebDriver;WebDriverWait pričekajte;@BeforeClassjavna void postavka () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// izrada chrome instanceupravljački program = novi ChromeDriver ();driver.manage (). window (). maximize ();driver.navigate (). to (URL);}@Testjavna praznina test_AjaxExample () {Po kontejneru = By.cssSelector (". Spremnik");pričekajte = novi WebDriverWait (upravljački program, 5);wait.until (ExpectedConditions.presenceOfElementLocated (spremnik));// Dohvatite tekst prije izvođenja ajax pozivaWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Kliknite radio gumbdriver.findElement (By.id ("yes")). click ();// Kliknite gumb za provjerudriver.findElement (By.id ("provjera gumba")). click ();/ * Dohvati tekst nakon ajax poziva * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Provjerite oba teksta prije ajax poziva i nakon ajax teksta poziva. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Izvršen Ajaxov poziv");String očekujeText = "Radio gumb je provjeren i vrijednost mu je Da";/ * Potvrdite očekivani tekst s tekstom ažuriranim nakon ajax poziva * /Assert.assertEquals (textAfter, očekivaniText);driver.close ();}}
Sažetak:
- AJAX omogućuje web stranici da dohvaća male količine podataka s poslužitelja bez ponovnog učitavanja cijele stranice.
- Za testiranje aplikacije Ajax treba primijeniti različite metode čekanja
- ThreadSleep
- Implicitno čekanje
- Eksplicitno pričekajte
- WebdriverČekaj
- Tečno pričekajte
- Stvaranje automatiziranog zahtjeva za testiranje može biti teško za alate za testiranje, jer takva aplikacija AJAX često koristi različite tehnike kodiranja ili serializacije za slanje POST podataka.