Hvad er Ajax?
AJAX står for Asynchronous JavaScript & XML, og det giver websiden mulighed for at hente små mængder data fra serveren uden at genindlæse hele siden.
Ajax er en teknik, der bruges til at oprette hurtige og dynamiske websider. Denne teknik er asynkron og bruger en kombination af Javascript og XML.
Det opdaterer delene af en webside uden at genindlæse hele siden.
Nogle af de berømte applikationer, der bruger AJAX-teknik, er Gmail, Google Maps, Facebook, Youtube osv.
I denne vejledning lærer du-
- Hvad er Ajax?
- Hvordan fungerer Ajax?
- Sådan håndteres Ajax-opkald ved hjælp af Selenium Webdriver
- Udfordringer i håndtering af Ajax Call i Selen Webdriver
Hvordan fungerer Ajax?
For eksempel, når du klikker på knappen Send, vil JavaScript indgive en anmodning til serveren, fortolke resultatet og opdatere den aktuelle skærm uden at genindlæse websiden.
- Et Ajax-opkald er en asynkron anmodning initieret af browseren, der ikke direkte resulterer i en sideovergang. Det betyder, at hvis du affyrer en Ajax-anmodning, kan brugeren stadig arbejde på applikationen, mens anmodningen venter på svar.
- AJAX sender HTTP-anmodninger fra klienten til serveren og behandler derefter serverens svar uden at genindlæse hele siden. Så når du foretager et AJAX-opkald, er du ikke ret sikker på, hvor lang tid det tager af serveren at sende dig et svar .
Fra en testers synspunkt, hvis du tjekker indholdet eller det element, der skal vises, skal du vente, indtil du får svaret. Under AJAX-opkald lagres dataene i XML-format og hentes fra serveren.
Sådan håndteres Ajax-opkald ved hjælp af Selenium Webdriver
Den største udfordring ved håndtering af Ajax-opkald er at kende indlæsningstiden til websiden. Da indlæsningen af websiden kun varer i en brøkdel af sekunder, er det vanskeligt for testeren at teste en sådan anvendelse via automatiseringsværktøjet. For det skal Selenium Webdriver bruge ventemetoden på dette Ajax-opkald.
Så ved at udføre denne ventekommando, vil selen suspendere udførelsen af den aktuelle testsag og vente på den forventede eller nye værdi. Når den nye værdi eller det nye felt vises, bliver de suspenderede testsager udført af Selenium Webdriver.
Følgende er de ventemetoder, som Selenium Webdriver kan bruge
- Tråd. Søvn ()
- Thread.Sleep () er ikke et klogt valg, da det suspenderer den aktuelle tråd i det angivne tidsrum.
- I AJAX kan du aldrig være sikker på den nøjagtige ventetid. Så din test mislykkes, hvis elementet ikke vises inden ventetiden. Desuden øger det overhead, fordi det at ringe til Thread.sleep (t) gør, at den aktuelle tråd flyttes fra den kørende kø til ventekøen.
- Efter det tidspunkt 't' er nået, flytter den aktuelle tråd fra ventekøen til den klare kø, og det tager derefter noget tid at blive valgt af CPU'en og køre.
- Implicit Vent ()
- Denne metode beder webdriver om at vente, hvis elementet ikke er tilgængeligt med det samme, men denne ventetid vil være på plads i hele den tid, browseren er åben. Så enhver søgning efter elementerne på siden kan tage den tid, den implicitte ventetid er sat til.
- Eksplicit Vent ()
- Eksplicit ventetid bruges til at fryse testudførelsen, indtil det tidspunkt, en bestemt betingelse er opfyldt, eller den maksimale tid går ud.
- Webdriver Vent
- Det kan bruges til alle forhold. Dette kan opnås med WebDriverWait i kombination med ExpectedCondition
- Den bedste måde at vente på et element dynamisk er at kontrollere tilstanden hvert sekund og fortsætte til den næste kommando i scriptet, så snart betingelsen er opfyldt.
Men problemet med alle disse ventetider er, at du skal nævne timeout-enheden. Hvad hvis elementet stadig ikke er til stede inden for tiden? Så der er endnu en ventetid, der hedder Flydende ventetid.
- Flydende Vent
- Dette er en implementering af Vent-grænsefladen, der har sin timeout og afstemningsinterval. Hver FluentWait-forekomst bestemmer den maksimale tid til at vente på en betingelse samt hyppigheden, hvormed tilstanden skal kontrolleres.
Udfordringer i håndtering af Ajax Call i Selen Webdriver
- Brug af kommandoen "pause" til håndtering af Ajax-opkald er ikke helt pålidelig. Lang pausetid gør testen uacceptabelt langsom og øger testtiden. I stedet vil "waitforcondition" være mere nyttigt ved test af Ajax-applikationer.
- Det er vanskeligt at vurdere risikoen forbundet med bestemte Ajax-applikationer
- Givet fuld frihed for udviklere til at ændre Ajax-applikationen gør testprocessen udfordrende
- Oprettelse af automatiseret testanmodning kan være vanskelig for testværktøjer, da AJAX-applikationen ofte bruger forskellige kodnings- eller serialiseringsteknikker til at indsende POST-data.
Et eksempel på Ajax HÅNDTERING
importer 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;offentlig klasse Ajaxdemo {privat streng URL = "http://demo.guru99.com/test/ajax.html";WebDriver driver;WebDriver Vent, vent;@BeforeClassoffentlig ugyldig setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// opret krominstansdriver = ny ChromeDriver ();driver.manage (). vindue (). maksimere ();driver.navigate (). til (URL);}@Prøveoffentlig ugyldig test_AjaxExample () {Efter container = By.cssSelector (". Container");vent = ny WebDriverWait (driver, 5);wait.until (ExpectedConditions.presenceOfElementLocated (container));// Få teksten, før du udfører et ajax-opkaldWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Klik på alternativknappendriver.findElement (By.id ("ja")). klik ();// Klik på Check-knappendriver.findElement (By.id ("buttoncheck")). klik ();/ * Få teksten efter ajax-opkald * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Bekræft begge tekster før ajax-opkald og efter ajax-opkaldstekst. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Ajax-opkald udført");String expectText = "Radioknappen er markeret, og dens værdi er Ja";/ * Bekræft forventet tekst med tekst opdateret efter ajax-opkald * /Assert.assertEquals (textAfter, expectedText);driver.close ();}}
Resumé:
- AJAX giver websiden mulighed for at hente små mængder data fra serveren uden at genindlæse hele siden.
- For at teste Ajax-applikation skal forskellige ventemetoder anvendes
- Trådsøvn
- Implicit Vent
- Eksplicit Vent
- Webdriver Vent
- Flydende Vent
- Oprettelse af automatiseret testanmodning kan være vanskelig for testværktøjer, da AJAX-applikationen ofte bruger forskellige kodnings- eller serialiseringsteknikker til at indsende POST-data.