Wat is Ajax?
AJAX staat voor Asynchronous JavaScript & XML en stelt de webpagina in staat om kleine hoeveelheden gegevens van de server op te halen zonder de hele pagina opnieuw te laden.
Ajax is een techniek die wordt gebruikt om snelle en dynamische webpagina's te maken. Deze techniek is asynchroon en maakt gebruik van een combinatie van Javascript en XML.
Het zal de onderdelen van een webpagina bijwerken zonder de hele pagina opnieuw te laden.
Enkele van de bekende applicaties die de AJAX-techniek gebruiken, zijn Gmail, Google Maps, Facebook, Youtube, etc.
In deze tutorial leer je-
- Wat is Ajax?
- Hoe Ajax werkt?
- Hoe Ajax-oproep af te handelen met Selenium Webdriver
- Uitdagingen bij het afhandelen van Ajax-oproep in Selenium Webdriver
Hoe Ajax werkt?
Als u bijvoorbeeld op de verzendknop klikt, zal JavaScript een verzoek indienen bij de server, het resultaat interpreteren en het huidige scherm bijwerken zonder de webpagina opnieuw te laden.
- Een Ajax-aanroep is een asynchroon verzoek dat wordt geïnitieerd door de browser en dat niet direct resulteert in een paginaovergang. Dit betekent dat als u een Ajax-verzoek start, de gebruiker nog steeds aan de toepassing kan werken terwijl het verzoek op een antwoord wacht.
- AJAX stuurt HTTP-verzoeken van de client naar de server en verwerkt vervolgens het antwoord van de server, zonder de hele pagina opnieuw te laden. Dus wanneer u een AJAX-oproep plaatst, bent u niet helemaal zeker van de tijd die de server nodig heeft om u een antwoord te sturen .
Vanuit het oogpunt van een tester, als u de inhoud of het weer te geven element controleert, moet u wachten tot u het antwoord krijgt. Tijdens een AJAX-oproep worden de gegevens opgeslagen in XML-indeling en opgehaald van de server.
Hoe Ajax-oproep af te handelen met Selenium Webdriver
De grootste uitdaging bij het afhandelen van een Ajax-oproep is het kennen van de laadtijd voor de webpagina. Aangezien het laden van de webpagina slechts een fractie van seconden duurt, is het moeilijk voor de tester om een dergelijke toepassing te testen met een automatiseringstool. Daarvoor moet Selenium Webdriver de wachtmethode gebruiken op deze Ajax-oproep.
Dus door dit wachtcommando uit te voeren, zal selenium de uitvoering van de huidige testcase opschorten en wachten op de verwachte of nieuwe waarde. Wanneer de nieuwe waarde of het nieuwe veld verschijnt, worden de opgeschorte testgevallen uitgevoerd door Selenium Webdriver.
Hieronder volgen de wachtmethoden die Selenium Webdriver kan gebruiken
- Thread.Sleep ()
- Thread.Sleep () is geen verstandige keuze, aangezien het de huidige thread voor de opgegeven hoeveelheid tijd onderbreekt.
- In AJAX weet je nooit zeker wat de exacte wachttijd is. Uw test zal dus mislukken als het element niet binnen de wachttijd verschijnt. Bovendien verhoogt het de overhead omdat het aanroepen van Thread.sleep (t) ervoor zorgt dat de huidige thread wordt verplaatst van de actieve wachtrij naar de wachtrij.
- Nadat de tijd 't' is bereikt, wordt de huidige thread verplaatst van de wachtrij naar de gereedstaande wachtrij, en dan duurt het even voordat de CPU het opgeeft en actief is.
- Impliciet wachten ()
- Deze methode vertelt de webdriver om te wachten als het element niet onmiddellijk beschikbaar is, maar deze wachttijd blijft van kracht zolang de browser open is. Dus elke zoekopdracht naar de elementen op de pagina kan de tijd in beslag nemen waarop de impliciete wachttijd is ingesteld.
- Expliciet wachten ()
- Expliciet wachten wordt gebruikt om de testuitvoering te bevriezen totdat aan een bepaalde voorwaarde is voldaan of de maximale tijd is verstreken.
- Webdriver Wacht
- Het kan onder alle omstandigheden worden gebruikt. Dit kan worden bereikt met WebDriverWait in combinatie met ExpectedCondition
- De beste manier om dynamisch op een element te wachten, is elke seconde controleren op de voorwaarde en doorgaan met de volgende opdracht in het script zodra aan de voorwaarde is voldaan.
Maar het probleem met al deze wachttijden is dat je de time-outeenheid moet vermelden. Wat als het element binnen de tijd nog steeds niet aanwezig is? Dus er is nog een wachttijd genaamd Vloeiend wachten.
- Vloeiend wachten
- Dit is een implementatie van de Wait-interface met een time-out en een polling-interval. Elke FluentWait-instantie bepaalt de maximale hoeveelheid tijd die op een conditie moet worden gewacht, evenals de frequentie waarmee de conditie moet worden gecontroleerd.
Uitdagingen bij het afhandelen van Ajax-oproep in Selenium Webdriver
- Het gebruik van de opdracht "pauze" voor het afhandelen van een Ajax-oproep is niet helemaal betrouwbaar. Een lange pauzetijd maakt de test onaanvaardbaar traag en verlengt de testtijd. In plaats daarvan zal "waitforcondition" nuttiger zijn bij het testen van Ajax-applicaties.
- Het risico van bepaalde Ajax-applicaties is moeilijk in te schatten
- Aangezien de ontwikkelaars de volledige vrijheid hebben om de Ajax-applicatie aan te passen, wordt het testproces een uitdaging
- Het maken van een geautomatiseerd testverzoek kan moeilijk zijn voor testtools, aangezien een dergelijke AJAX-applicatie vaak verschillende coderings- of serialisatietechnieken gebruikt om POST-gegevens in te dienen.
Een voorbeeld voor Ajax HANDLING
import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.support.ui.ExpectedConditions;importeer org.openqa.selenium.support.ui.WebDriverWait;importeer org.testng.Assert;importeer org.testng.annotations.BeforeClass;importeer org.testng.annotations.Test;openbare klasse Ajaxdemo {private String URL = "http://demo.guru99.com/test/ajax.html";WebDriver-stuurprogramma;WebDriverWait wacht;@Voor klasopenbare leegte setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// maak een Chrome-instantiedriver = nieuwe ChromeDriver ();driver.manage (). window (). maximaliseren ();driver.navigate (). naar (URL);@Testopenbare ongeldigheid test_AjaxExample () {By container = By.cssSelector (". Container");wait = nieuwe WebDriverWait (stuurprogramma, 5);wait.until (ExpectedConditions.presenceOfElementLocated (container));// Haal de tekst op voordat u een ajax-oproep uitvoertWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Klik op het keuzerondjedriver.findElement (By.id ("yes")). click ();// Klik op de knop Controlerendriver.findElement (By.id ("buttoncheck")). click ();/ * Haal de tekst op na ajax-oproep * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Verifieer beide teksten voor ajax-oproep en na ajax-oproep. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Ajax-oproep uitgevoerd");String verwachteText = "Keuzerondje is aangevinkt en de waarde is Ja";/ * Verifieer verwachte tekst met tekst bijgewerkt na ajax-oproep * /Assert.assertEquals (textAfter, verwachteText);driver.close ();
Overzicht:
- Met AJAX kan de webpagina kleine hoeveelheden gegevens van de server ophalen zonder de hele pagina opnieuw te laden.
- Om de Ajax-applicatie te testen, moeten verschillende wachtmethoden worden toegepast
- ThreadSleep
- Impliciet wachten
- Expliciet wachten
- Webdriver Wacht
- Vloeiend wachten
- Het maken van een geautomatiseerd testverzoek kan moeilijk zijn voor testtools, aangezien een dergelijke AJAX-applicatie vaak verschillende coderings- of serialisatietechnieken gebruikt om POST-gegevens in te dienen.