Hvordan håndtere AJAX Call i Selenium Webdriver

Innholdsfortegnelse:

Anonim

Hva er Ajax?

AJAX står for Asynchronous JavaScript & XML, og det gjør det mulig for websiden å hente små mengder data fra serveren uten å laste hele siden på nytt.

Ajax er en teknikk som brukes til å lage raske og dynamiske websider. Denne teknikken er asynkron og bruker en kombinasjon av Javascript og XML.

Den oppdaterer delene av en webside uten å laste hele siden på nytt.

Noen av de berømte applikasjonene som bruker AJAX-teknikken er Gmail, Google Maps, Facebook, Youtube, etc.

I denne veiledningen vil du lære-

  • Hva er Ajax?
  • Hvordan Ajax fungerer?
  • Hvordan håndtere Ajax-samtale ved hjelp av Selenium Webdriver
  • Utfordringer i håndtering av Ajax Call i Selen Webdriver

Hvordan Ajax fungerer?

Når du for eksempel klikker på send-knappen, vil JavaScript be om en forespørsel til serveren, tolke resultatet og oppdatere gjeldende skjerm uten å laste inn nettsiden på nytt.

  • En Ajax-samtale er en asynkron forespørsel initiert av nettleseren som ikke direkte resulterer i en sideovergang. Det betyr at hvis du fyrer en Ajax-forespørsel, kan brukeren fortsatt jobbe med applikasjonen mens forespørselen venter på svar.
  • AJAX sender HTTP-forespørsler fra klienten til serveren og behandler deretter serverens svar uten å laste hele siden på nytt. Så når du foretar et AJAX-anrop, er du ikke helt sikker på hvor lang tid det tar av serveren å sende deg et svar .

Fra en testers synspunkt, hvis du sjekker innholdet eller elementet som skal vises, må du vente til du får svaret. Under AJAX-samtalen lagres dataene i XML-format og hentes fra serveren.

Hvordan håndtere Ajax-samtale ved hjelp av Selenium Webdriver

Den største utfordringen i håndteringen av Ajax-samtalen er å vite lastetiden for websiden. Siden lastingen av websiden bare varer i en brøkdel av sekunder, er det vanskelig for testeren å teste en slik applikasjon gjennom automatiseringsverktøyet. For det må Selenium Webdriver bruke ventemetoden på denne Ajax-samtalen.

Så ved å utføre denne ventekommandoen, vil selen avbryte utførelsen av gjeldende testsak og vente på den forventede eller nye verdien. Når den nye verdien eller feltet vises, vil de suspenderte testsakene bli henrettet av Selenium Webdriver.

Følgende er ventemetodene som Selenium Webdriver kan bruke

  1. Tråd. Sove ()
  • Thread.Sleep () er ikke et klokt valg, da den suspenderer den gjeldende tråden i den angitte tiden.
  • I AJAX kan du aldri være sikker på nøyaktig ventetid. Så testen din vil mislykkes hvis elementet ikke vises i løpet av ventetiden. Videre øker det overhead fordi å ringe til Thread.sleep (t) gjør at gjeldende tråd flyttes fra den kjørende køen til ventekøen.
  • Etter at tiden 't' er nådd, vil den gjeldende tråden bevege seg fra ventekøen til klar kø, og deretter tar det litt tid å bli plukket av CPU og kjøre.
  1. Implisitt ventetid ()
  • Denne metoden ber webdriver om å vente hvis elementet ikke er tilgjengelig umiddelbart, men denne ventetiden vil være på plass hele tiden nettleseren er åpen. Så ethvert søk etter elementene på siden kan ta tiden den implisitte ventetiden er satt til.
  1. Eksplisitt ventetid ()
  • Eksplisitt venting brukes til å fryse testutførelsen til den tid en bestemt betingelse er oppfylt eller maksimal tid går ut.
  1. Webdriver Vent
  • Den kan brukes under alle forhold. Dette kan oppnås med WebDriverWait i kombinasjon med ExpectedCondition
  • Den beste måten å vente på et element dynamisk er å sjekke tilstanden hvert sekund og fortsette til neste kommando i skriptet så snart betingelsen er oppfylt.

Men problemet med alle disse ventingene er at du må nevne tidsavbruddsenheten. Hva om elementet fremdeles ikke er til stede i løpet av tiden? Så det er en ventetid til som heter Fluent wait.

  1. Flytende vent
  • Dette er en implementering av Wait-grensesnittet som har tidsavbrudd og avstemningsintervall. Hver FluentWait-forekomst bestemmer den maksimale tiden det skal vente på en tilstand, samt hyppigheten for å sjekke tilstanden.

Utfordringer i håndtering av Ajax Call i Selen Webdriver

  • Å bruke kommandoen "pause" for å håndtere Ajax-samtale er ikke helt pålitelig. Lang pausetid gjør testen uakseptabelt treg og øker testtiden. I stedet vil "waitforcondition" være mer nyttig for å teste Ajax-applikasjoner.
  • Det er vanskelig å vurdere risikoen forbundet med bestemte Ajax-applikasjoner
  • Gitt utviklingsfrihet til å endre Ajax-applikasjonen, gjør testprosessen utfordrende
  • Det kan være vanskelig å lage automatiserte testforespørsler for testverktøy, da AJAX-applikasjonen ofte bruker annen koding eller serialiseringsteknikk for å sende inn POST-data.

Et eksempel på Ajax HÅNDTERING

importer org.openqa.selenium.By;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.WebElement;importer org.openqa.selenium.chrome.ChromeDriver;importer org.openqa.selenium.support.ui.ExpectedConditions;importer org.openqa.selenium.support.ui.WebDriverWait;importer org.testng.Assert;importer org.testng.annotations.BeforeClass;importer org.testng.annotations.Test;offentlig klasse Ajaxdemo {privat streng URL = "http://demo.guru99.com/test/ajax.html";WebDriver driver;WebDriverVent vent;@BeforeClassoffentlig ugyldig setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// opprett kromforekomstdriver = ny ChromeDriver ();driver.manage (). vindu (). maksimere ();driver.navigate (). til (URL);}@Testoffentlig ugyldig test_AjaxExample () {Etter container = By.cssSelector (". Container");vent = ny WebDriverWait (driver, 5);wait.until (ExpectedConditions.presenceOfElementLocated (container));// Få teksten før du utfører et ajax-anropWebElement noTextElement = driver.findElement (By.className ("radioknapp"));String textBefore = noTextElement.getText (). Trim ();// Klikk på alternativknappendriver.findElement (By.id ("yes")). klikk ();// Klikk på Sjekk-knappendriver.findElement (By.id ("buttoncheck")). klikk ();/ * Få teksten etter ajax-samtale * /WebElement TextElement = driver.findElement (By.className ("radioknapp"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Bekreft begge tekstene før ajax-samtalen og etter ajax-samtaleteksten. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Ajax-samtale utført");String expectText = "Radioknappen er merket av og verdien er Ja";/ * Bekreft forventet tekst med tekst oppdatert etter ajax-samtale * /Assert.assertEquals (textAfter, expectedText);driver.close ();}}

Sammendrag:

  • AJAX lar websiden hente små mengder data fra serveren uten å laste hele siden på nytt.
  • For å teste Ajax-applikasjon, bør forskjellige ventemetoder brukes
    • ThreadSleep
    • Implisitt Vent
    • Eksplisitt Vent
    • Webdriver Vent
    • Flytende vent
  • Det kan være vanskelig å lage automatiserte testforespørsler for testverktøy, da AJAX-applikasjonen ofte bruker annen koding eller serialiseringsteknikk for å sende inn POST-data.