Ce este Ajax?
AJAX înseamnă Asynchronous JavaScript & XML și permite paginii Web să recupereze cantități mici de date de pe server fără a reîncărca întreaga pagină.
Ajax este o tehnică utilizată pentru crearea de pagini web rapide și dinamice. Această tehnică este asincronă și folosește o combinație de Javascript și XML.
Acesta va actualiza partea / părțile unei pagini web fără a reîncărca întreaga pagină.
Unele dintre aplicațiile celebre care utilizează tehnica AJAX sunt Gmail, Google Maps, Facebook, Youtube etc.
În acest tutorial, veți învăța-
- Ce este Ajax?
- Cum funcționează Ajax?
- Cum să gestionați apelul Ajax folosind Selenium Webdriver
- Provocări în gestionarea apelului Ajax în Selenium Webdriver
Cum funcționează Ajax?
De exemplu, când faceți clic pe butonul de trimitere, JavaScript va face o cerere către server, va interpreta rezultatul și va actualiza ecranul curent fără a reîncărca pagina web.
- Un apel Ajax este o cerere asincronă inițiată de browser care nu duce direct la o tranziție de pagină. Înseamnă că, dacă declanșați o cerere Ajax, utilizatorul poate lucra în continuare la aplicație în timp ce solicitarea așteaptă un răspuns.
- AJAX trimite solicitări HTTP de la client la server și apoi procesează răspunsul serverului, fără a reîncărca întreaga pagină. Deci, atunci când efectuați un apel AJAX, nu sunteți destul de sigur cu privire la timpul necesar serverului pentru a vă trimite un răspuns .
Din punctul de vedere al testerului, dacă verificați conținutul sau elementul care trebuie afișat, trebuie să așteptați până veți primi răspunsul. În timpul apelului AJAX, datele sunt stocate în format XML și preluate de pe server.
Cum să gestionați apelul Ajax folosind Selenium Webdriver
Cea mai mare provocare în gestionarea apelului Ajax este cunoașterea timpului de încărcare pentru pagina web. Deoarece încărcarea paginii web va dura doar o fracțiune de secunde, este dificil pentru tester să testeze o astfel de aplicație prin instrumentul de automatizare. Pentru aceasta, Selenium Webdriver trebuie să utilizeze metoda de așteptare pentru acest apel Ajax.
Deci, executând această comandă de așteptare, seleniul va suspenda executarea cazului de test curent și va aștepta valoarea așteptată sau nouă. Când apare noua valoare sau câmp, cazurile de testare suspendate vor fi executate de Selenium Webdriver.
Următoarele sunt metodele de așteptare pe care Selenium Webdriver le poate folosi
- Thread.Sleep ()
- Thread.Sleep () nu este o alegere înțeleaptă, deoarece suspendă firul curent pentru intervalul de timp specificat.
- În AJAX, nu puteți fi niciodată sigur cu privire la timpul exact de așteptare. Deci, testul dvs. va eșua dacă elementul nu va apărea în timpul de așteptare. Mai mult, crește cheltuielile generale, deoarece apelarea Thread.sleep (t) face ca firul curent să fie mutat de la coada de rulare la coada de așteptare.
- După timpul „t” atins, firul curent se va deplasa de la coada de așteptare la coada gata, iar apoi durează ceva timp pentru a fi ales de către CPU și să ruleze.
- Așteptare implicită ()
- Această metodă îi solicită webdriver-ului să aștepte dacă elementul nu este disponibil imediat, dar această așteptare va fi în loc pentru tot timpul când browserul este deschis. Deci, orice căutare a elementelor de pe pagină ar putea dura timpul pentru care este setată așteptarea implicită.
- Așteptare explicită ()
- Așteptarea explicită este utilizată pentru a îngheța execuția testului până când se îndeplinește o anumită condiție sau până când expiră timpul maxim.
- Webdriver Așteptați
- Poate fi folosit în orice condiții. Acest lucru poate fi realizat cu WebDriverWait în combinație cu ExpectedCondition
- Cel mai bun mod de a aștepta un element dinamic este verificarea condiției în fiecare secundă și continuarea la următoarea comandă din script imediat ce condiția este îndeplinită.
Dar problema cu toate aceste așteptări este că trebuie să menționați unitatea de expirare. Ce se întâmplă dacă elementul încă nu este prezent în timp? Deci, mai există o așteptare numită Fluent wait.
- Așteptați fluent
- Aceasta este o implementare a interfeței de așteptare care are expirarea și intervalul de sondare. Fiecare instanță FluentWait determină durata maximă de așteptare pentru o afecțiune, precum și frecvența cu care se verifică starea.
Provocări în gestionarea apelului Ajax în Selenium Webdriver
- Utilizarea comenzii „pauză” pentru gestionarea apelului Ajax nu este complet fiabilă. Timpul lung de pauză face ca testul să fie lent și să crească timpul de testare. În schimb, „waitforcondition” va fi mai util în testarea aplicațiilor Ajax.
- Este dificil de evaluat riscul asociat cu anumite aplicații Ajax
- Având în vedere libertatea deplină a dezvoltatorilor de a modifica aplicația Ajax, procesul de testare este dificil
- Crearea cererii de testare automată poate fi dificilă pentru instrumentele de testare, deoarece o astfel de aplicație AJAX folosește adesea tehnici diferite de codificare sau serializare pentru a trimite date POST.
Un exemplu pentru manipularea Ajax
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 {URL șir privat = "http://demo.guru99.com/test/ajax.html";Driver WebDriver;WebDriverWait așteptați;@Înainte de curspublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// creați o instanță cromatădriver = nou ChromeDriver ();driver.manage (). window (). maximize ();driver.navigate (). to (URL);}@Testpublic void test_AjaxExample () {By container = By.cssSelector (". Container");wait = new WebDriverWait (driver, 5);wait.until (ExpectedConditions.presenceOfElementLocated (container));// Obțineți textul înainte de a efectua un apel ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));Șir textBefore = noTextElement.getText (). Trim ();// Faceți clic pe butonul radiodriver.findElement (By.id ("da")). click ();// Faceți clic pe butonul Verificaredriver.findElement (By.id ("buttoncheck")). faceți clic pe ();/ * Obțineți textul după apelul ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));Șir textAfter = TextElement.getText (). Trim ();/ * Verificați ambele texte înainte de apelul ajax și după textul apelului ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println („Apel Ajax efectuat”);String expectedText = "Butonul radio este bifat și valoarea este Da";/ * Verificați textul așteptat cu text actualizat după apelul ajax * /Assert.assertEquals (textAfter, expectedText);driver.close ();}}
Rezumat:
- AJAX permite paginii Web să recupereze cantități mici de date de pe server fără a reîncărca întreaga pagină.
- Pentru a testa aplicația Ajax, ar trebui aplicate diferite metode de așteptare
- ThreadSleep
- Așteptați implicit
- Așteptați explicit
- Webdriver Așteptați
- Așteptați fluent
- Crearea cererii de testare automată poate fi dificilă pentru instrumentele de testare, deoarece o astfel de aplicație AJAX folosește adesea tehnici diferite de codificare sau serializare pentru a trimite date POST.