Kako ravnati s klicem AJAX v programu Selenium Webdriver

Kazalo:

Anonim

Kaj je Ajax?

AJAX pomeni Asinhroni JavaScript in XML in omogoča spletni strani, da s strežnika pridobi majhne količine podatkov brez ponovnega nalaganja celotne strani.

Ajax je tehnika, ki se uporablja za ustvarjanje hitrih in dinamičnih spletnih strani. Ta tehnika je asinhrona in uporablja kombinacijo Javascripta in XML.

Posodobil bo dele spletne strani brez ponovnega nalaganja celotne strani.

Nekatere znane aplikacije, ki uporabljajo tehniko AJAX, so Gmail, Google Maps, Facebook, Youtube itd.

V tej vadnici boste izvedeli-

  • Kaj je Ajax?
  • Kako deluje Ajax?
  • Kako ravnati s klicem Ajax s pomočjo programa Selenium Webdriver
  • Izzivi pri ravnanju s klici Ajax v programu Selenium Webdriver

Kako deluje Ajax?

Ko na primer kliknete gumb za oddajo, bo JavaScript strežniku poslal zahtevo, razložil rezultat in posodobil trenutni zaslon, ne da bi ponovno naložil spletno stran.

  • Klic Ajax je asinhrona zahteva, ki jo sproži brskalnik in ne povzroči neposrednega prehoda strani. To pomeni, da če sprožite zahtevo Ajaxa, lahko uporabnik še vedno dela na aplikaciji, medtem ko zahteva čaka na odgovor.
  • AJAX pošlje zahteve HTTP od odjemalca strežniku in nato obdela strežnikov odgovor, ne da bi ponovno naložil celotno stran. Ko pokličete AJAX, niste prepričani, koliko časa je strežnik poslal, da vam pošlje odgovor .

Če preverjate vsebino ali element, ki ga želite prikazati, morate z vidika preizkuševalca počakati, da dobite odgovor. Med klicem AJAX se podatki shranijo v obliki XML in pridobijo s strežnika.

Kako ravnati s klicem Ajax s pomočjo programa Selenium Webdriver

Največji izziv pri ravnanju Ajax klic je vedela čas nalaganja spletne strani. Ker bo nalaganje spletne strani trajalo le delček sekund, preizkuševalec težko preizkusi takšno aplikacijo z orodjem za avtomatizacijo. Za to mora Selenium Webdriver uporabiti metodo čakanja pri tem klicu Ajax.

Torej bo selen z izvajanjem tega ukaza za čakanje zaustavil izvajanje trenutnega testnega primera in počakal na pričakovano ali novo vrednost. Ko se prikaže nova vrednost ali polje, bo suspendirane testne primere izvršil Selenium Webdriver.

Sledijo metode čakanja, ki jih lahko uporabi Selenium Webdriver

  1. Thread.Sleep ()
  • Thread.Sleep () ni pametna izbira, saj začasno zadrži trenutno nit.
  • V AJAX-u nikoli ne morete biti prepričani o natančnem času čakanja. Torej, test ne bo uspel, če se element ne bo prikazal v čakalnem času. Poleg tega poveča režijske stroške, ker se zaradi klica Thread.sleep (t) trenutna nit premakne iz tekoče čakalne vrste v čakalno vrsto.
  • Po doseženem času 't' se trenutna nit premakne iz čakalne vrste v čakalno vrsto, nato pa traja nekaj časa, da jo CPU izbere in zažene.
  1. Implicitno čakanje ()
  • Ta metoda spletnemu gonilniku sporoči, naj počaka, če element ni takoj na voljo, vendar bo to čakanje veljalo ves čas, ko je brskalnik odprt. Tako lahko vsako iskanje elementov na strani traja čas, za katerega je nastavljeno implicitno čakanje.
  1. Izrecno čakanje ()
  • Izrecno čakanje se uporablja za zamrznitev izvedbe testa, dokler ni izpolnjen določen pogoj ali ne poteče največ časa.
  1. Webdriver Počakaj
  • Uporablja se lahko v vseh pogojih. To je mogoče doseči z WebDriverWait v kombinaciji z ExpectedCondition
  • Najboljši način za dinamično čakanje na element je preverjanje stanja vsako sekundo in nadaljevanje do naslednjega ukaza v skriptu, takoj ko je pogoj izpolnjen.

Toda težava vseh teh čakanj je, da morate omeniti enoto zakasnitve. Kaj pa, če element še vedno ni prisoten v določenem času? Torej obstaja še eno čakanje, imenovano Fluent wait.

  1. Tekoče počakajte
  • To je izvedba vmesnika Wait s časovno omejitvijo in intervalom glasovanja. Vsak primerek FluentWait določi največ časa za čakanje na stanje in pogostost preverjanja stanja.

Izzivi pri ravnanju s klici Ajax v programu Selenium Webdriver

  • Uporaba ukaza "pause" za obdelavo klica Ajax ni popolnoma zanesljiva. Dolg čas premora naredi test nesprejemljivo počasen in podaljša čas testiranja. Namesto tega bo "waitforcondition" bolj koristen pri preizkušanju aplikacij Ajax.
  • Težko je oceniti tveganje, povezano s posameznimi aplikacijami Ajax
  • Glede na to, da imajo razvijalci popolno svobodo pri spreminjanju aplikacije Ajax, je postopek testiranja zahteven
  • Ustvarjanje avtomatizirane testne zahteve je lahko za orodja za preizkušanje težavno, saj taka aplikacija AJAX za pošiljanje podatkov POST pogosto uporablja drugačno tehniko kodiranja ali serializacije.

Primer za ravnanje z Ajaxom

uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz 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;javni razred Ajaxdemo {URL zasebnega niza = "http://demo.guru99.com/test/ajax.html";Gonilnik WebDriver;WebDriverWait počakajte;@BeforeClassjavna void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// ustvari primerek kromagonilnik = nov ChromeDriver ();driver.manage (). window (). maximize ();driver.navigate (). do (URL);}@Testpublic void test_AjaxExample () {Z vsebnikom = By.cssSelector (". Vsebnik");wait = nov WebDriverWait (gonilnik, 5);wait.until (ExpectedConditions.presenceOfElementLocated (vsebnik));// Pridobite besedilo, preden izvedete klic ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));Niz besedilaBefore = noTextElement.getText (). Trim ();// Kliknite izbirni gumbdriver.findElement (By.id ("da")). click ();// Kliknite gumb Preveridriver.findElement (By.id ("checkcheck")). click ();/ * Pridobite besedilo po klicu ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Preverite besedila pred klicem ajax in po besedilu klica ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Izveden klic Ajax");String očekujeText = "Izbirni gumb je preverjen in njegova vrednost je Da";/ * Preverite pričakovano besedilo z besedilom, posodobljenim po klicu ajax * /Assert.assertEquals (textAfter, pričakovanoText);driver.close ();}}

Povzetek:

  • AJAX omogoča spletni strani, da s strežnika pridobi majhne količine podatkov brez ponovnega nalaganja celotne strani.
  • Za preizkus aplikacije Ajax je treba uporabiti različne metode čakanja
    • ThreadSleep
    • Implicitno počakajte
    • Izrecno počakajte
    • Webdriver Počakaj
    • Tekoče počakajte
  • Ustvarjanje avtomatizirane testne zahteve je lahko za orodja za preizkušanje težavno, saj taka aplikacija AJAX za pošiljanje podatkov POST pogosto uporablja drugačno tehniko kodiranja ali serializacije.