Jak obsługiwać wywołania AJAX Selenium Sterownik internetowy
Co to jest Ajax?
AJAX oznacza Asynchroniczny JavaSkrypt i XML, i umożliwia stronie internetowej pobranie niewielkich ilości danych z serwera bez konieczności ponownego ładowania całej strony.
Ajax to technika używana do tworzenia szybkich i dynamicznych stron internetowych. Ta technika jest asynchroniczna i wykorzystuje kombinację Javascript i XML. Zaktualizuje część/części strony internetowej bez przeładowywania całej strony. Niektóre ze znanych aplikacji, które wykorzystują technikę AJAX to Gmail, Google Maps, Facebook, Youtube itp.
Jak działa Ajax?
Na przykład, kiedy klikniesz przycisk Prześlij, 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 powoduje bezpośrednio 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. Kiedy więc wykonujesz wywołanie AJAX, ty nie są do końca pewni, ile czasu potrzebuje serwer na wysłanie odpowiedzi.
Z punktu widzenia testera, jeśli sprawdzasz zawartość lub element, który ma zostać wyświetlony, musisz poczekać, aż otrzymasz odpowiedź. Podczas wywołania AJAX dane są przechowywane w formacie XML i pobierane z serwera.
Jak obsługiwać wywołania Ajax Selenium Sterownik internetowy
największym wyzwaniem w obsłudze wywołań Ajax jest znajomość czasu ładowania strony internetowej. Ponieważ ładowanie strony internetowej będzie trwało tylko ułamek sekundy, testerowi trudno jest przetestować taką aplikację za pomocą narzędzia automatyzującego. Za to, Selenium Webdriver musi użyć metody oczekiwania w tym wywołaniu Ajax.
W wyniku wykonania tego polecenia wait, selen zawiesi wykonywanie bieżącego Przypadek testowy i poczekaj na oczekiwaną lub nową wartość. Kiedy pojawi się nowa wartość lub pole, zawieszone przypadki testowe zostaną wykonane Selenium Sterownik internetowy.
Poniżej przedstawiono metody oczekiwania, które Selenium Webdriver może korzystać
Wątek.Sen()
- Thread.Sleep() nie jest mądrym wyborem, ponieważ wstrzymuje bieżący wątek na określony czas.
- W AJAX nigdy nie można być pewnym dokładnego czasu oczekiwania. Zatem Twój test zakończy się niepowodzeniem, jeśli element nie pojawi się w czasie oczekiwania. Co więcej, zwiększa to obciążenie, ponieważ wywołanie Thread.sleep(t) powoduje przeniesienie bieżącego wątku z kolejki działającej do kolejki oczekującej.
- Po osiągnięciu czasu t bieżący wątek zostanie przesunięty z kolejki oczekującej do kolejki gotowych, po czym potrzeba trochę czasu, aby został wybrany przez procesor i uruchomiony.
Niejawne oczekiwanie()
- Ta metoda informuje webdriver, aby zaczekał, jeśli element nie będzie natychmiast dostępny, ale to oczekiwanie będzie trwało przez cały czas otwarcia przeglądarki. Dlatego każde wyszukiwanie elementów na stronie może zająć trochę czasu, na który ustawiono ukryte oczekiwanie.
Wyraźne oczekiwanie()
- Wyraźne oczekiwanie służy do zamrożenia wykonania testu do czasu spełnienia określonego warunku lub upłynięcia maksymalnego czasu.
Sterownik sieciowyCzekaj
- Można go stosować w każdych warunkach. Można to osiągnąć za pomocą WebDriverWait w połączeniu z oczekiwanym stanem
- Najlepszym sposobem dynamicznego oczekiwania na element jest sprawdzanie warunku co sekundę i przejście do następnego polecenia w skrypcie, gdy tylko warunek zostanie spełniony.
Ale problem z tymi wszystkimi czekami polega na tym, że musisz wspomnieć o jednostce limitu czasu. Co się stanie, jeśli element nadal nie będzie obecny w określonym czasie? Jest więc jeszcze jedno oczekiwanie zwane oczekiwaniem płynnym.
Płynne czekanie
- Jest to implementacja interfejsu Wait posiadająca limit czasu i interwał odpytywania. 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 Selenium Sterownik internetowy
- Używanie polecenia „pauza” do obsługi wywołań Ajax nie jest całkowicie niezawodne. Długi czas pauzy sprawia, że test jest niedopuszczalnie powolny i zwiększa Testy czas. Zamiast tego „warunek oczekiwania” będzie bardziej pomocny w testowaniu aplikacji Ajax.
- Trudno jest ocenić ryzyko związane z konkretnymi aplikacjami Ajax
- Biorąc pod uwagę pełną swobodę programistów w modyfikowaniu aplikacji Ajax, proces testowania staje się wyzwaniem
- Tworzenie zautomatyzowanego żądania testu może być trudne w przypadku narzędzi testowych, ponieważ aplikacje AJAX często korzystają z różnych technik kodowania lub serializacji w celu przesyłania danych POST.
Przykład kodu dla OBSŁUGI Ajax przy użyciu Selenium Sterownik internetowy
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 { private String URL = "https://demo.guru99.com/test/ajax.html"; WebDriver driver; WebDriverWait wait; @BeforeClass public void setUp() { System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe"); //create chrome instance driver = new ChromeDriver(); driver.manage().window().maximize(); driver.navigate().to(URL); } @Test public void test_AjaxExample() { By container = By.cssSelector(".container"); wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.presenceOfElementLocated(container)); //Get the text before performing an ajax call WebElement noTextElement = driver.findElement(By.className("radiobutton")); String textBefore = noTextElement.getText().trim(); //Click on the radio button driver.findElement(By.id("yes")).click(); //Click on Check Button driver.findElement(By.id("buttoncheck")).click(); /*Get the text after ajax call*/ WebElement TextElement = driver.findElement(By.className("radiobutton")); wait.until(ExpectedConditions.visibilityOf(TextElement)); String textAfter = TextElement.getText().trim(); /*Verify both texts before ajax call and after ajax call text.*/ Assert.assertNotEquals(textBefore, textAfter); System.out.println("Ajax Call Performed"); String expectedText = "Radio button is checked and it's value is Yes"; /*Verify expected text with text updated after ajax call*/ Assert.assertEquals(textAfter, expectedText); driver.close(); } }
Podsumowanie
- AJAX umożliwia stronie internetowej pobieranie niewielkich ilości danych z serwera bez konieczności ponownego ładowania całej strony.
- Aby przetestować aplikację Ajax, należy zastosować różne metody oczekiwania
- WątekSen
- Niejawne oczekiwanie
- Wyraźne oczekiwanie
- Sterownik sieciowyCzekaj
- Płynne czekanie
- Tworzenie zautomatyzowanego żądania testu może być trudne w przypadku narzędzi testowych, ponieważ aplikacje AJAX często korzystają z różnych technik kodowania lub serializacji w celu przesyłania danych POST.