Как да се справя с повикване AJAX в Selenium Webdriver

Съдържание:

Anonim

Какво представлява Ajax?

AJAX означава асинхронен JavaScript и XML и позволява на уеб страницата да извлича малки количества данни от сървъра, без да презарежда цялата страница.

Ajax е техника, използвана за създаване на бързи и динамични уеб страници. Тази техника е асинхронна и използва комбинация от Javascript и XML.

Той ще актуализира частите на уеб страницата, без да презарежда цялата страница.

Някои от известните приложения, които използват техниката AJAX, са Gmail, Google Maps, Facebook, Youtube и др.

В този урок ще научите -

  • Какво представлява Ajax?
  • Как работи Ajax?
  • Как да се справя с обаждането на Ajax с помощта на Selenium Webdriver
  • Предизвикателства при обработката на обажданията на Ajax в Selenium Webdriver

Как работи Ajax?

Например, когато кликнете върху бутона за изпращане, JavaScript ще направи заявка до сървъра, ще интерпретира резултата и ще актуализира текущия екран, без да презарежда уеб страницата.

  • Извикването на Ajax е асинхронна заявка, инициирана от браузъра, която не води директно до преход на страница. Това означава, че ако задействате заявка на Ajax, потребителят все още може да работи върху приложението, докато заявката чака отговор.
  • AJAX изпраща HTTP заявки от клиента към сървъра и след това обработва отговора на сървъра, без да презарежда цялата страница. Така че, когато правите повикване AJAX, не сте съвсем сигурни за времето, необходимо на сървъра, за да ви изпрати отговор .

От гледна точка на тестера, ако проверявате съдържанието или елемента, който ще се показва, трябва да изчакате, докато получите отговора. По време на разговор AJAX данните се съхраняват в XML формат и се извличат от сървъра.

Как да се справя с обаждането на Ajax с помощта на Selenium Webdriver

Най -голямото предизвикателство при обработката на обаждане от Ajax е да се знае времето за зареждане на уеб страницата. Тъй като зареждането на уеб страницата ще продължи само за части от секундите, за тестера е трудно да тества такова приложение чрез инструмент за автоматизация. За това Selenium Webdriver трябва да използва метода за изчакване при това повикване на Ajax.

Така че, изпълнявайки тази команда за изчакване, селенът ще спре изпълнението на текущия тест и ще изчака очакваната или новата стойност. Когато се появи новата стойност или поле, спряните тестови случаи ще бъдат изпълнени от Selenium Webdriver.

Следват методите за изчакване, които Selenium Webdriver може да използва

  1. Thread.Sleep ()
  • Thread.Sleep () не е разумен избор, тъй като спира текущата нишка за посочения период от време.
  • В AJAX никога не можете да сте сигурни за точното време на изчакване. И така, тестът ви ще се провали, ако елементът не се появи в рамките на времето за изчакване. Освен това увеличава режийните, защото извикването на Thread.sleep (t) прави текущата нишка да бъде преместена от работещата опашка в чакащата опашка.
  • След достигане на времето „t“, текущата нишка ще се премести от опашката за чакане в опашката за готовност и след това е необходимо известно време, за да бъде избрана от процесора и да бъде изпълнена.
  1. Неявно чакане ()
  • Този метод казва на webdriver да изчака, ако елементът не е налице веднага, но това изчакване ще бъде налице през цялото време, когато браузърът е отворен. Така че всяко търсене на елементите на страницата може да отнеме времето, за което е зададено неявното изчакване.
  1. Изрично изчакайте ()
  • Изричното изчакване се използва за замразяване на изпълнението на теста, докато не бъде изпълнено определено условие или не изтече максимално време.
  1. Webdriver Изчакайте
  • Може да се използва при всякакви условия. Това може да се постигне с WebDriverWait в комбинация с ExpectedCondition
  • Най-добрият начин за динамично изчакване на елемент е проверката на състоянието всяка секунда и продължаването към следващата команда в скрипта веднага щом условието е изпълнено.

Но проблемът с всички тези чакания е, че трябва да споменете единицата за изчакване. Ами ако елементът все още не присъства в рамките на времето? Така че има още едно чакане, наречено Fluent wait.

  1. Плавно изчакайте
  • Това е реализация на интерфейса Wait, който има своя таймаут и интервал за избиране. Всеки екземпляр на FluentWait определя максималното време за изчакване на условие, както и честотата, с която да се проверява състоянието.

Предизвикателства при обработката на обажданията на Ajax в Selenium Webdriver

  • Използването на командата "пауза" за обработка на извикване на Ajax не е напълно надеждно. Дългото време за пауза прави теста неприемливо бавен и увеличава времето за тестване. Вместо това, „waitforcondition“ ще бъде по-полезно при тестване на приложения на Ajax.
  • Трудно е да се оцени рискът, свързан с конкретни приложения на Ajax
  • Дадена пълна свобода на разработчиците да модифицират приложението Ajax прави процеса на тестване предизвикателен
  • Създаването на автоматизирана тестова заявка може да бъде трудно за инструменти за тестване, тъй като такова приложение AJAX често използва различни техники за кодиране или сериализация, за да изпрати POST данни.

Пример за АЯКС РАБОТА

внос org.openqa.selenium.By;импортиране на org.openqa.selenium.WebDriver;внос org.openqa.selenium.WebElement;импортиране на org.openqa.selenium.chrome.ChromeDriver;импортиране на org.openqa.selenium.support.ui.ExpectedConditions;импортиране на org.openqa.selenium.support.ui.WebDriverWait;import org.testng.Assert;импортиране на org.testng.annotations.BeforeClass;внос org.testng.annotations.Test;публичен клас Ajaxdemo {частен низ URL = "http://demo.guru99.com/test/ajax.html";Драйвер за WebDriver;WebDriverWait изчакайте;@BeforeClasspublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// създаване на екземпляр на chromeдрайвер = нов ChromeDriver ();driver.manage (). window (). maximize ();driver.navigate (). до (URL);}@Тестpublic void test_AjaxExample () {По контейнер = By.cssSelector (". Контейнер");изчакайте = нов WebDriverWait (драйвер, 5);wait.until (ExpectedConditions.presenceOfElementLocated (контейнер));// Вземете текста, преди да извършите повикване ajaxWebElement noTextElement = driver.findElement (By.className ("радиобутон"));Текст на низа textBefore = noTextElement.getText (). Trim ();// Щракнете върху бутона за изборdriver.findElement (By.id ("да")). click ();// Щракнете върху бутона за проверкаdriver.findElement (By.id ("checkcheck")). click ();/ * Вземете текста след обаждане от ajax * /WebElement TextElement = driver.findElement (By.className ("радиобутон"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Проверете и двата текста преди извикване ajax и след ajax извикване. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println („Извършено повикване Ajax“);String očekujeText = "Радио бутонът е проверен и стойността му е Да";/ * Проверете очаквания текст с текст, актуализиран след извикване на ajax * /Assert.assertEquals (textAfter, очакванText);driver.close ();}}

Резюме:

  • AJAX позволява на уеб страницата да извлича малки количества данни от сървъра, без да презарежда цялата страница.
  • За да тествате приложението на Ajax, трябва да се прилагат различни методи на изчакване
    • ThreadSleep
    • Неявно чакане
    • Изрично изчакайте
    • Webdriver Изчакайте
    • Плавно изчакайте
  • Създаването на автоматизирана тестова заявка може да бъде трудно за инструменти за тестване, тъй като такова приложение AJAX често използва различни техники за кодиране или сериализация, за да изпрати POST данни.