Ako zvládnuť volanie AJAX v selenovom webdriveri

Obsah:

Anonim

Čo je Ajax?

AJAX znamená asynchrónny JavaScript a XML a umožňuje webovej stránke načítať malé množstvo údajov zo servera bez opätovného načítania celej stránky.

Ajax je technika používaná na vytváranie rýchlych a dynamických webových stránok. Táto technika je asynchrónna a využíva kombináciu Javascript a XML.

Aktualizuje časti webovej stránky bez opätovného načítania celej stránky.

Niektoré zo slávnych aplikácií, ktoré používajú techniku ​​AJAX, sú Gmail, Google Maps, Facebook, Youtube atď.

V tomto návode sa naučíte

  • Čo je Ajax?
  • Ako Ajax funguje?
  • Ako vybaviť hovor Ajaxu pomocou selénového webdriveru
  • Výzvy pri vybavovaní Ajaxu Zavolajte si Selenium Webdriver

Ako Ajax funguje?

Napríklad keď kliknete na tlačidlo odoslať, JavaScript urobí požiadavku na server, interpretuje výsledok a aktualizuje aktuálnu obrazovku bez opätovného načítania webovej stránky.

  • Volanie Ajaxu je asynchrónna požiadavka iniciovaná prehliadačom, ktorá priamo nevedie k prechodu stránky. To znamená, že ak spustíte žiadosť Ajaxu, používateľ môže na aplikácii pracovať, kým žiadosť čaká na odpoveď.
  • AJAX odosiela požiadavky HTTP z klienta na server a potom spracuje odpoveď servera bez opätovného načítania celej stránky. Takže keď uskutočňujete hovor AJAX, nie ste si celkom istí časom, ktorý server potrebuje na odoslanie odpovede .

Z hľadiska testera, pokiaľ kontrolujete obsah alebo prvok, ktorý sa má zobraziť, musíte počkať, kým dostanete odpoveď. Počas hovoru AJAX sú údaje uložené vo formáte XML a načítané zo servera.

Ako vybaviť hovor Ajaxu pomocou selénového webdriveru

Najväčším problémom pri manipulácii s Ajax volanie je poznať čas načítania na webovú stránku. Pretože načítanie webovej stránky bude trvať iba zlomok sekúnd, je pre testera ťažké testovať takúto aplikáciu pomocou automatizačného nástroja. Preto musí Selenium Webdriver pri tomto Ajax Call používať metódu čakania.

Vykonaním tohto príkazu čakania teda selén pozastaví vykonávanie aktuálneho testovacieho prípadu a počká na očakávanú alebo novú hodnotu. Keď sa zobrazí nová hodnota alebo pole, pozastavené testovacie prípady vykoná server Selenium Webdriver.

Nasledujú metódy čakania, ktoré môže server Selenium Webdriver použiť

  1. Thread.Sleep ()
  • Thread.Sleep () nie je rozumná voľba, pretože pozastavuje aktuálne vlákno na zadaný čas.
  • V AJAX si nikdy nemôžete byť istí presnou dobou čakania. Váš test teda zlyhá, ak sa prvok nezobrazí v rámci čakacej doby. Navyše zvyšuje réžiu, pretože volanie Thread.sleep (t) spôsobí, že sa súčasné vlákno presunie z bežiaceho frontu do čakacieho frontu.
  • Po dosiahnutí času „t“ sa súčasné vlákno presunie z čakacieho frontu do pripraveného frontu a potom trvá, kým ho CPU vyberie a spustí.
  1. Implicitné čakanie ()
  • Táto metóda hovorí webdriveru, aby počkal, ak prvok nie je okamžite k dispozícii, ale toto čakanie bude platiť po celú dobu otvorenia prehliadača. Takže akékoľvek hľadanie prvkov na stránke môže chvíľu trvať, kým sa nastaví implicitné čakanie.
  1. Explicitné čakanie ()
  • Explicitné čakanie sa používa na pozastavenie vykonania testu, kým nie je splnená konkrétna podmienka alebo kým neuplynie maximálny čas.
  1. WebdriverPočkajte
  • Môže byť použitý za akýchkoľvek podmienok. To sa dá dosiahnuť pomocou WebDriverWait v kombinácii s ExpectedCondition
  • Najlepším spôsobom, ako dynamicky čakať na prvok, je kontrola stavu každú sekundu a pokračovanie k ďalšiemu príkazu v skripte, akonáhle je podmienka splnená.

Ale problém so všetkými týmito čakaniami je, musíte spomenúť jednotku časového limitu. Čo ak prvok stále nie je v danom čase? Existuje teda ešte jedno čakanie s názvom Plynulé čakanie.

  1. Plynule počkajte
  • Toto je implementácia rozhrania Wait, ktorá má svoj časový limit a interval dotazovania. Každá inštancia FluentWait určuje maximálny čas čakania na stav, ako aj frekvenciu, s akou sa má stav skontrolovať.

Výzvy pri vybavovaní Ajaxu Zavolajte si Selenium Webdriver

  • Používanie príkazu „pause“ na spracovanie hovoru Ajaxu nie je úplne spoľahlivé. Vďaka dlhej dobe pauzy je test neprijateľne pomalý a zvyšuje sa čas testu. Namiesto toho bude pri testovaní aplikácií Ajax užitočnejšia „waitforcondition“.
  • Je ťažké vyhodnotiť riziko spojené s konkrétnymi aplikáciami Ajaxu
  • Vďaka úplnej slobode vývojárov pri úprave aplikácie Ajax je testovací proces náročný
  • Vytvorenie požiadavky na automatický test môže byť pre testovacie nástroje náročné, pretože takáto aplikácia AJAX často používa na odosielanie údajov POST inú techniku ​​kódovania alebo serializácie.

Príklad manipulácie s Ajaxom

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;importovať org.openqa.selenium.support.ui.ExectedConditions;import org.openqa.selenium.support.ui.WebDriverWait;import org.testng.Assert;import org.testng.annotations.BeforeClass;import org.testng.annotations.Test;verejná trieda Ajaxdemo {private String URL = "http://demo.guru99.com/test/ajax.html";Ovládač WebDriver;WebDriver Počkajte;@BeforeClasspublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// vytvorenie chrómovej inštancieovládač = nový ChromeDriver ();driver.manage (). window (). maximize ();driver.navigate (). to (URL);}@Testpublic void test_AjaxExample () {By container = By.cssSelector (". Container");počkajte = nový WebDriverWait (ovládač, 5);wait.until (ExpectedConditions.presenceOfElementLocated (kontajner));// Získajte text pred uskutočnením hovoru ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));Reťazec textBefore = noTextElement.getText (). Trim ();// Kliknite na prepínačdriver.findElement (By.id ("yes")). click ();// Kliknite na tlačidlo Skontrolovaťdriver.findElement (By.id ("buttoncheck")). click ();/ * Získajte text po zavolaní ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));Reťazec textAfter = TextElement.getText (). Trim ();/ * Overte obidva texty pred hovorom ajax aj po texte hovoru ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Uskutočnilo sa volanie Ajaxu");String expectText = "Prepínač je začiarknutý a jeho hodnota je Áno";/ * Overte očakávaný text s textom aktualizovaným po zavolaní ajax * /Assert.assertEquals (textAfter, expectText);driver.close ();}}

Zhrnutie:

  • AJAX umožňuje webovej stránke načítať malé množstvo dát zo servera bez opätovného načítania celej stránky.
  • Na testovanie aplikácie Ajax by sa mali použiť rôzne spôsoby čakania
    • ThreadSleep
    • Implicitné čakanie
    • Explicitné čakanie
    • WebdriverPočkajte
    • Plynule počkajte
  • Vytvorenie požiadavky na automatický test môže byť pre testovacie nástroje náročné, pretože takáto aplikácia AJAX často používa na odosielanie údajov POST inú techniku ​​kódovania alebo serializácie.