Jak obsługiwać połączenie AJAX w Selenium Webdriver

Spisie treści:

Anonim

Co to jest Ajax?

AJAX to skrót od Asynchronous JavaScript & XML i umożliwia stronie internetowej pobieranie niewielkich ilości danych z serwera bez ponownego ładowania całej strony.

Ajax to technika używana do tworzenia szybkich i dynamicznych stron internetowych. Ta technika jest asynchroniczna i wykorzystuje połączenie JavaScript i XML.

Zaktualizuje część / części strony internetowej bez ponownego ładowania całej strony.

Niektóre ze znanych aplikacji wykorzystujących technikę AJAX to Gmail, Mapy Google, Facebook, Youtube itp.

W tym samouczku nauczysz się:

  • Co to jest Ajax?
  • Jak działa Ajax?
  • Jak obsługiwać połączenia Ajax przy użyciu Selenium Webdriver
  • Wyzwania w obsłudze połączeń Ajax w Selenium Webdriver

Jak działa Ajax?

Na przykład, po kliknięciu przycisku przesyłania, JavaScript wyśle ​​żądanie do serwera, zinterpretuje wynik i zaktualizuje bieżący ekran bez ponownego ładowania strony.

  • Wywołanie Ajax to asynchroniczne żądanie zainicjowane przez przeglądarkę, które nie prowadzi bezpośrednio do przejścia strony. Oznacza to, że jeśli uruchomisz żądanie Ajax, użytkownik może nadal pracować nad aplikacją, podczas gdy żądanie oczekuje na odpowiedź.
  • AJAX wysyła żądania HTTP od klienta do serwera, a następnie przetwarza odpowiedź serwera bez ponownego ładowania całej strony. Więc kiedy wykonujesz połączenie AJAX, nie jesteś pewien, ile czasu zajmuje serwer, aby wysłać ci odpowiedź .

Z punktu widzenia testera, jeśli sprawdzasz zawartość lub element do wyświetlenia, musisz poczekać, aż otrzymasz odpowiedź. Podczas połączenia AJAX dane są zapisywane w formacie XML i pobierane z serwera.

Jak obsługiwać połączenia Ajax przy użyciu Selenium Webdriver

Największe wyzwanie w zakresie obsługi Ajax wezwanie wiedząc, czas ładowania dla strony internetowej. Ponieważ ładowanie strony trwa tylko ułamek sekund, testerowi trudno jest przetestować taką aplikację za pomocą narzędzia do automatyzacji. W tym celu Selenium Webdriver musi użyć metody wait na tym wywołaniu Ajax.

Tak więc, wykonując to polecenie czekania, selenium zawiesi wykonanie bieżącego przypadku testowego i zaczeka na oczekiwaną lub nową wartość. Gdy pojawi się nowa wartość lub pole, zawieszone przypadki testowe zostaną wykonane przez Selenium Webdriver.

Poniżej przedstawiono metody oczekiwania, których może używać Selenium Webdriver

  1. Thread.Sleep ()
  • Thread.Sleep () nie jest mądrym wyborem, ponieważ zawiesza bieżący wątek na określony czas.
  • W AJAX nigdy nie możesz być pewien dokładnego czasu oczekiwania. Tak więc test zakończy się niepowodzeniem, jeśli element nie pojawi się w czasie oczekiwania. Ponadto zwiększa to obciążenie, ponieważ wywołanie Thread.sleep (t) powoduje przeniesienie bieżącego wątku z kolejki uruchomionej do kolejki oczekującej.
  • Po osiągnięciu czasu „t” bieżący wątek zostanie przeniesiony z kolejki oczekujących do kolejki gotowości, a następnie może zająć trochę czasu, zanim zostanie wybrany przez procesor i będzie działał.
  1. Niejawne oczekiwanie ()
  • Ta metoda nakazuje webdriverowi czekanie, jeśli element nie jest dostępny natychmiast, ale to oczekiwanie będzie obowiązywać przez cały czas otwarcia przeglądarki. Zatem każde wyszukiwanie elementów na stronie może zająć czas, na który ustawione jest niejawne oczekiwanie.
  1. Jawne oczekiwanie ()
  • Jawne oczekiwanie służy do wstrzymania wykonania testu do czasu spełnienia określonego warunku lub upływu maksymalnego czasu.
  1. Webdriver Czekaj
  • Może być stosowany w każdych warunkach. Można to osiągnąć dzięki WebDriverWait w połączeniu z ExpectedCondition
  • Najlepszym sposobem dynamicznego czekania na element jest sprawdzanie warunku co sekundę i przechodzenie do następnego polecenia w skrypcie, gdy tylko warunek zostanie spełniony.

Ale problem z tymi wszystkimi oczekiwaniami polega na tym, że musisz wspomnieć o jednostce czasu oczekiwania. Co się stanie, jeśli element nadal nie będzie obecny w czasie? Jest więc jeszcze jedno oczekiwanie zwane płynnym czekaniem.

  1. Płynne czekanie
  • Jest to implementacja interfejsu Wait, która ma swój limit czasu i interwał sondowania. Każda instancja FluentWait określa maksymalny czas oczekiwania na warunek, a także częstotliwość sprawdzania warunku.

Wyzwania w obsłudze połączeń Ajax w Selenium Webdriver

  • Używanie polecenia „pause” do obsługi wywołań Ajax nie jest całkowicie niezawodne. Długi czas przerwy sprawia, że ​​test jest niedopuszczalnie powolny i wydłuża czas testu. Zamiast tego „waitforcondition” będzie bardziej pomocne w testowaniu aplikacji Ajax.
  • Trudno jest ocenić ryzyko związane z określonymi aplikacjami Ajax
  • Dając programistom pełną swobodę modyfikowania aplikacji Ajax, proces testowania jest trudny
  • Tworzenie zautomatyzowanych żądań testów może być trudne w przypadku narzędzi testujących, ponieważ takie aplikacje AJAX często używają różnych technik kodowania lub serializacji do przesyłania danych POST.

Przykład obsługi Ajax

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import 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;public class Ajaxdemo {prywatny adres URL ciągu = "http://demo.guru99.com/test/ajax.html";Sterownik WebDriver;WebDriver Czekaj, czekaj;@Przed zajęciamipublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// utwórz instancję chromesterownik = nowy ChromeDriver ();driver.manage (). window (). maximize ();driver.navigate (). to (URL);}@Testpublic void test_AjaxExample () {By container = By.cssSelector (". Container");wait = new WebDriverWait (sterownik, 5);wait.until (ExpectedConditions.presenceOfElementLocated (container));// Pobierz tekst przed wykonaniem połączenia AJAXWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Kliknij przycisk opcjidriver.findElement (By.id ("tak")). click ();// Kliknij przycisk Sprawdźdriver.findElement (By.id ("buttoncheck")). click ();/ * Pobierz tekst po wywołaniu Ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Weryfikuj oba teksty przed wywołaniem Ajax i po tekście wywołania Ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Wykonano wywołanie Ajax");String spodziewanyText = "Przycisk radiowy jest zaznaczony i jego wartość to Tak";/ * Zweryfikuj oczekiwany tekst z tekstem zaktualizowanym po wywołaniu Ajax * /Assert.assertEquals (textAfter, spodziewanyText);driver.close ();}}

Podsumowanie:

  • AJAX umożliwia stronie internetowej pobieranie niewielkich ilości danych z serwera bez ponownego ładowania całej strony.
  • Aby przetestować aplikację Ajax, należy zastosować różne metody oczekiwania
    • ThreadSleep
    • Niejawne oczekiwanie
    • Jawne oczekiwanie
    • Webdriver Czekaj
    • Płynne czekanie
  • Tworzenie zautomatyzowanych żądań testów może być trudne w przypadku narzędzi testujących, ponieważ takie aplikacje AJAX często używają różnych technik kodowania lub serializacji do przesyłania danych POST.