Как обрабатывать вызов AJAX в Selenium Webdriver

Содержание:

Anonim

Что такое Аякс?

AJAX означает асинхронный JavaScript и XML, и он позволяет веб-странице получать небольшие объемы данных с сервера без перезагрузки всей страницы.

Ajax - это метод, используемый для создания быстрых и динамичных веб-страниц. Этот метод является асинхронным и использует комбинацию Javascript и XML.

Он обновит части веб-страницы без перезагрузки всей страницы.

Некоторые из известных приложений, использующих технику AJAX, - это Gmail, Google Maps, Facebook, Youtube и т. Д.

В этом руководстве вы узнаете:

  • Что такое Аякс?
  • Как работает 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. WebdriverWait
  • Его можно использовать в любых условиях. Этого можно добиться с помощью WebDriverWait в сочетании с ExpectedCondition.
  • Лучший способ динамического ожидания элемента - это проверять условие каждую секунду и переходить к следующей команде в сценарии, как только условие будет выполнено.

Но проблема со всеми этими ожиданиями в том, что вы должны упомянуть блок тайм-аута. Что делать, если элемент все еще отсутствует в течение времени? Итак, есть еще одно ожидание, называемое Fluent wait.

  1. Беглое ожидание
  • Это реализация интерфейса ожидания с тайм-аутом и интервалом опроса. Каждый экземпляр FluentWait определяет максимальное время ожидания условия, а также частоту проверки условия.

Проблемы обработки вызовов Ajax в Selenium Webdriver

  • Использование команды «пауза» для обработки вызова Ajax не совсем надежно. Длительная пауза делает тест неприемлемо медленным и увеличивает время тестирования. Вместо этого «waitforcondition» будет более полезным при тестировании приложений Ajax.
  • Трудно оценить риск, связанный с конкретными приложениями Ajax.
  • Предоставление разработчикам полной свободы изменения приложения Ajax делает процесс тестирования сложным.
  • Создание автоматизированного тестового запроса может быть трудным для инструментов тестирования, поскольку такое приложение AJAX часто использует другую методику кодирования или сериализации для отправки данных POST.

Пример Ajax HANDLING

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 {частный строковый URL = "http://demo.guru99.com/test/ajax.html";Драйвер WebDriver;WebDriverWait wait;@BeforeClasspublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// создаем экземпляр хромадрайвер = новый ChromeDriver ();driver.manage (). window (). maximize ();driver.navigate (). to (URL);}@Тестpublic void test_AjaxExample () {По контейнеру = By.cssSelector (". Контейнер");ждать = новый WebDriverWait (драйвер, 5);wait.until (ExpectedConditions.presenceOfElementLocated (контейнер));// Получаем текст перед выполнением вызова ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Нажмите на радиокнопкуdriver.findElement (By.id ("да")). click ();// Нажимаем на кнопку "Проверить"driver.findElement (By.id ("buttoncheck")). click ();/ * Получить текст после вызова ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));Строка textAfter = TextElement.getText (). Trim ();/ * Проверяем оба текста перед вызовом ajax и после текста вызова ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println («Выполненный вызов Ajax»);String expectedText = "Радиокнопка отмечена, и ее значение - Да";/ * Проверяем ожидаемый текст с текстом, обновленным после вызова ajax * /Assert.assertEquals (textAfter, expectedText);driver.close ();}}

Резюме:

  • AJAX позволяет веб-странице получать небольшие объемы данных с сервера без перезагрузки всей страницы.
  • Для тестирования приложения Ajax следует применять разные методы ожидания.
    • ThreadSleep
    • Неявное ожидание
    • Явное ожидание
    • WebdriverWait
    • Беглое ожидание
  • Создание автоматизированного тестового запроса может быть трудным для инструментов тестирования, поскольку такое приложение AJAX часто использует другую методику кодирования или сериализации для отправки данных POST.