Vad är Ajax?
AJAX står för Asynchronous JavaScript & XML, och det gör att webbsidan kan hämta små mängder data från servern utan att ladda hela sidan igen.
Ajax är en teknik som används för att skapa snabba och dynamiska webbsidor. Denna teknik är asynkron och använder en kombination av Javascript och XML.
Det uppdaterar delarna av en webbsida utan att ladda om hela sidan.
Några av de berömda applikationerna som använder AJAX-teknik är Gmail, Google Maps, Facebook, Youtube, etc.
I den här handledningen lär du dig-
- Vad är Ajax?
- Hur fungerar Ajax?
- Hur man hanterar Ajax-samtal med Selenium Webdriver
- Utmaningar vid hantering av Ajax Call i Selen Webdriver
Hur fungerar Ajax?
När du till exempel klickar på knappen Skicka kommer JavaScript att göra en begäran till servern, tolka resultatet och uppdatera den aktuella skärmen utan att ladda om webbsidan.
- Ett Ajax-samtal är en asynkron begäran initierad av webbläsaren som inte direkt resulterar i en sidövergång. Det betyder att om du avfyrar en Ajax-begäran kan användaren fortfarande arbeta med applikationen medan begäran väntar på svar.
- AJAX skickar HTTP-förfrågningar från klienten till servern och bearbetar sedan serverns svar utan att ladda om hela sidan. Så när du ringer ett AJAX-samtal är du inte riktigt säker på hur lång tid det tar för servern att skicka ett svar .
Ur en testares synvinkel måste du vänta tills du får svaret om du kontrollerar innehållet eller det element som ska visas. Under AJAX-samtal lagras data i XML-format och hämtas från servern.
Hur man hanterar Ajax-samtal med Selenium Webdriver
Den största utmaningen att hantera Ajax-samtal är att känna till laddningstiden för webbsidan. Eftersom laddningen av webbsidan endast kommer att pågå i en bråkdel av sekunder är det svårt för testaren att testa en sådan applikation via automatiseringsverktyget. För det måste Selenium Webdriver använda väntemetoden på detta Ajax-samtal.
Så genom att utföra detta väntkommando kommer selen att avbryta körningen av nuvarande testfall och vänta på det förväntade eller nya värdet. När det nya värdet eller det nya fältet visas kommer de avstängda testärenden att köras av Selenium Webdriver.
Följande är de väntemetoder som Selenium Webdriver kan använda
- Thread.Sleep ()
- Thread.Sleep () är inte ett klokt val eftersom den stänger av den aktuella tråden under angiven tid.
- I AJAX kan du aldrig vara säker på exakt väntetid. Så ditt test misslyckas om elementet inte visas inom väntetiden. Dessutom ökar det omkostnaderna eftersom det ringer till Thread.sleep (t) gör att den aktuella tråden flyttas från den körande köen till väntekön.
- Efter tiden 't' uppnåtts kommer den aktuella tråden att flyttas från väntekön till den färdiga köen, och sedan tar det lite tid att plockas av CPU och köras.
- Implicit Vänta ()
- Den här metoden ber webdriver att vänta om elementet inte är tillgängligt omedelbart, men denna väntan kommer att vara på plats under hela webbläsaren är öppen. Så varje sökning efter elementen på sidan kan ta den tid som den implicita väntan är inställd på.
- Explicit Wait ()
- Explicit väntan används för att frysa testkörningen till den tidpunkt då ett visst villkor uppfylls eller maximal tid förfaller.
- Webdriver Vänta
- Den kan användas under alla förhållanden. Detta kan uppnås med WebDriverWait i kombination med ExpectedCondition
- Det bästa sättet att vänta på ett element dynamiskt är att leta efter villkoret varje sekund och fortsätta till nästa kommando i skriptet så snart villkoret är uppfyllt.
Men problemet med alla dessa väntningar är att du måste nämna timeout-enheten. Vad händer om elementet fortfarande inte finns inom tiden? Så det finns ytterligare en vänta som heter Fluent wait.
- Flytande vänta
- Detta är en implementering av Wait-gränssnittet som har sin timeout och pollingintervall. Varje FluentWait-instans bestämmer den maximala tiden att vänta på ett tillstånd, liksom frekvensen för att kontrollera tillståndet.
Utmaningar vid hantering av Ajax Call i Selen Webdriver
- Att använda "paus" -kommandot för hantering av Ajax-samtal är inte helt pålitligt. Lång paustid gör testet oacceptabelt långsamt och ökar testtiden. Istället kommer "waitforcondition" att vara mer användbart vid testning av Ajax-applikationer.
- Det är svårt att bedöma risken för vissa Ajax-applikationer
- Med tanke på frihet för utvecklare att ändra Ajax-applikationen blir testprocessen utmanande
- Att skapa automatisk testbegäran kan vara svårt för testverktyg eftersom AJAX-applikationen ofta använder olika kodnings- eller serialiseringstekniker för att skicka POST-data.
Ett exempel på Ajax HANTERING
importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.WebElement;importera org.openqa.selenium.chrome.ChromeDriver;importera org.openqa.selenium.support.ui.ExpectedConditions;importera org.openqa.selenium.support.ui.WebDriverWait;importera org.testng.Assert;importera org.testng.annotations.BeforeClass;importera org.testng.annotations.Test;offentlig klass Ajaxdemo {privat sträng-URL = "http://demo.guru99.com/test/ajax.html";WebDriver-drivrutin;WebDriverVänta, vänta;@Innan lektionenpublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// skapa krominstansdrivrutin = ny ChromeDriver ();driver.manage (). fönster (). maximera ();driver.navigate (). till (URL);}@Testaoffentligt ogiltigt test_AjaxExempel () {Efter container = By.cssSelector (". Container");vänta = ny WebDriverWait (drivrutin, 5);wait.until (ExpectedConditions.presenceOfElementLocated (container));// Få texten innan du gör ett ajax-samtalWebElement noTextElement = driver.findElement (By.className ("radioknapp"));SträngtextBefore = noTextElement.getText (). Trim ();// Klicka på alternativknappendriver.findElement (By.id ("yes")). klicka ();// Klicka på Kontrollknappendriver.findElement (By.id ("buttoncheck")). klicka ();/ * Få texten efter ajax-samtal * /WebElement TextElement = driver.findElement (By.className ("radioknapp"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Verifiera båda texterna före ajax-samtal och efter ajax-samtalstext. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Ajax-samtal utfört");String expectText = "Radioknappen är markerad och dess värde är Ja";/ * Verifiera förväntad text med text uppdaterad efter ajax-samtal * /Assert.assertEquals (textAfter, expectText);driver.close ();}}
Sammanfattning:
- AJAX tillåter webbsidan att hämta små mängder data från servern utan att ladda hela sidan igen.
- För att testa Ajax-applikationen bör olika väntemetoder tillämpas
- ThreadSleep
- Implicit Vänta
- Explicit Wait
- Webdriver Vänta
- Flytande vänta
- Att skapa automatisk testbegäran kan vara svårt för testverktyg eftersom AJAX-applikationen ofta använder olika kodnings- eller serialiseringstekniker för att skicka POST-data.