Jak zpracovat volání AJAX v selenovém webdriveru

Obsah:

Anonim

Co je Ajax?

AJAX znamená Asynchronous JavaScript & XML a umožňuje webové stránce načítat malé množství dat ze serveru bez opětovného načtení celé stránky.

Ajax je technika používaná k vytváření rychlých a dynamických webových stránek. Tato technika je asynchronní a používá kombinaci Javascript a XML.

Aktualizuje části webové stránky bez opětovného načtení celé stránky.

Mezi slavné aplikace využívající techniku ​​AJAX patří Gmail, Mapy Google, Facebook, Youtube atd.

V tomto výukovém programu se naučíte

  • Co je Ajax?
  • Jak Ajax funguje?
  • Jak zpracovat volání Ajaxu pomocí selenového webdriveru
  • Výzvy při řešení volání Ajaxu v selenovém webdriveru

Jak Ajax funguje?

Například když kliknete na tlačítko Odeslat, JavaScript provede požadavek na server, interpretuje výsledek a aktualizuje aktuální obrazovku bez opětovného načtení webové stránky.

  • Volání Ajaxu je asynchronní požadavek iniciovaný prohlížečem, který nevede přímo k přechodu na stránku. To znamená, že pokud spustíte požadavek Ajaxu, může uživatel na aplikaci stále pracovat, zatímco požadavek čeká na odpověď.
  • AJAX odesílá požadavky HTTP z klienta na server a poté zpracovává odpověď serveru bez opětovného načtení celé stránky. Když tedy uskutečňujete volání AJAX, nejste si docela jisti časem, který server potřebuje k odeslání odpovědi .

Z pohledu testera, pokud kontrolujete obsah nebo prvek, který se má zobrazit, musíte počkat, až dostanete odpověď. Během volání AJAX jsou data uložena ve formátu XML a načtena ze serveru.

Jak zpracovat volání Ajaxu pomocí selenového webdriveru

Největším problémem při manipulaci s Ajax volání je znát čas načítání na webovou stránku. Vzhledem k tomu, že načítání webové stránky bude trvat jen zlomek sekund, je pro testera obtížné otestovat takovou aplikaci pomocí automatizačního nástroje. K tomu musí Selenium Webdriver použít u tohoto Ajax Call metodu čekání.

Provedením tohoto příkazu čekání tedy selen pozastaví provádění aktuálního testovacího případu a počká na očekávanou nebo novou hodnotu. Když se objeví nová hodnota nebo pole, pozastavené testovací případy provede Selenium Webdriver.

Následují metody čekání, které může Selenium Webdriver použít

  1. Thread.Sleep ()
  • Thread.Sleep () není moudrá volba, protože pozastaví aktuální vlákno na zadanou dobu.
  • V AJAX si nikdy nemůžete být jisti přesnou čekací dobou. Váš test tedy selže, pokud se prvek během čekací doby nezobrazí. Navíc zvyšuje režii, protože voláním Thread.sleep (t) se aktuální vlákno přesune z běžící fronty do čekající fronty.
  • Po dosažení času 't' se aktuální vlákno přesune z fronty čekání do fronty připravenosti a poté trvá, než si CPU vyzvedne a běží.
  1. Implicitní čekání ()
  • Tato metoda říká webdriveru, aby počkal, pokud prvek není okamžitě k dispozici, ale toto čekání bude na místě po celou dobu otevření prohlížeče. Takže jakékoli hledání prvků na stránce může trvat, než je nastaveno implicitní čekání.
  1. Explicitní čekání ()
  • Explicitní čekání se používá k pozastavení provádění testu, dokud není splněna určitá podmínka nebo dokud neuplyne maximální čas.
  1. Webdriver Počkejte
  • Lze jej použít za jakýchkoli podmínek. Toho lze dosáhnout pomocí WebDriverWait v kombinaci s ExpectedCondition
  • Nejlepší způsob, jak dynamicky čekat na prvek, je kontrola podmínky každou sekundu a pokračování k dalšímu příkazu ve skriptu, jakmile je podmínka splněna.

Ale problém všech těchto čekání je, že musíte zmínit jednotku časového limitu. Co když prvek v dané době stále není? Existuje tedy ještě jedno čekání s názvem Plynulé čekání.

  1. Plynule počkejte
  • Toto je implementace rozhraní Wait, které má svůj časový limit a interval dotazování. Každá instance FluentWait určuje maximální dobu čekání na podmínku a také frekvenci kontroly stavu.

Výzvy při řešení volání Ajaxu v selenovém webdriveru

  • Použití příkazu „pause“ pro zpracování volání Ajaxu není zcela spolehlivé. Dlouhá doba pauzy činí test nepřijatelně pomalým a prodlužuje čas testování. Místo toho bude při testování aplikací Ajax užitečnější „waitforcondition“.
  • Je obtížné posoudit riziko spojené s konkrétními aplikacemi Ajaxu
  • Vzhledem k tomu, že vývojářům poskytuje plnou svobodu upravovat aplikaci Ajax, je testovací proces náročný
  • Vytvoření požadavku na automatický test může být pro testovací nástroje obtížné, protože taková aplikace AJAX často používá k odesílání dat POST jinou techniku ​​kódování nebo serializace.

Příklad manipulace Ajaxu

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;importovat org.openqa.selenium.support.ui.ExectedConditions;importovat org.openqa.selenium.support.ui.WebDriverWait;import org.testng.Assert;import org.testng.annotations.BeforeClass;import org.testng.annotations.Test;veřejná třída Ajaxdemo {private String URL = "http://demo.guru99.com/test/ajax.html";Ovladač WebDriver;WebDriver Počkejte;@Před hodinoupublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// vytvoření chrome instancedriver = new ChromeDriver ();driver.manage (). window (). maximize ();driver.navigate (). to (URL);}@Testpublic void test_AjaxExample () {By container = By.cssSelector (". Container");počkat = nový WebDriverWait (ovladač, 5);wait.until (ExpectedConditions.presenceOfElementLocated (kontejner));// Získejte text před provedením volání ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));Řetězec textBefore = noTextElement.getText (). Trim ();// Klikněte na přepínačdriver.findElement (By.id ("yes")). click ();// Klikněte na tlačítko Zkontrolovatdriver.findElement (By.id ("buttoncheck")). click ();/ * Získejte text po volání Ajaxu * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));Řetězec textAfter = TextElement.getText (). Trim ();/ * Ověřte oba texty před hovorem ajax a po textu volání ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Provedeno volání Ajaxu");String expectText = "Přepínač je zaškrtnutý a jeho hodnota je Ano";/ * Ověřte očekávaný text s textem aktualizovaným po volání ajax * /Assert.assertEquals (textAfter, expectText);driver.close ();}}

Souhrn:

  • AJAX umožňuje webové stránce načítat malé množství dat ze serveru bez opětovného načtení celé stránky.
  • K otestování aplikace Ajax je třeba použít různé metody čekání
    • ThreadSleep
    • Implicitní počkat
    • Explicitní čekání
    • Webdriver Počkejte
    • Plynule počkejte
  • Vytvoření požadavku na automatický test může být pro testovací nástroje obtížné, protože taková aplikace AJAX často používá k odesílání dat POST jinou techniku ​​kódování nebo serializace.