Як обробляти виклики 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
  • Найкращим способом динамічного очікування елемента є перевірка стану щосекунди та перехід до наступної команди в сценарії, як тільки умова буде виконана.

Але проблема всіх цих очікувань полягає в тому, що ви повинні згадати одиницю тайм-ауту. Що робити, якщо елемент все ще відсутній протягом часу? Отже, є ще одне очікування, яке називається Плавне очікування.

  1. Вільно зачекайте
  • Це реалізація інтерфейсу Wait, що має свій час очікування та інтервал опитування. Кожен екземпляр FluentWait визначає максимальну кількість часу для очікування умови, а також частоту перевірки стану.

Проблеми в обробці дзвінків Ajax у Selenium Webdriver

  • Використання команди "пауза" для обробки викликів Ajax не є повністю надійним. Тривала пауза робить тест неприпустимо повільним і збільшує час тестування. Натомість "waitforcondition" буде більш корисним при тестуванні програм Ajax.
  • Важко оцінити ризик, пов'язаний з конкретними програмами Ajax
  • Надаючи розробникам повну свободу модифікувати додаток Ajax, процес тестування стає складним
  • Створення автоматизованого тестового запиту може бути складним для інструментів тестування, оскільки такий додаток AJAX часто використовує різні методи кодування або серіалізації для подання даних POST.

Приклад для обробки Ajax

імпорт 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;імпорт 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 (). to (URL);}@ Тестpublic void test_AjaxExample () {За контейнером = By.cssSelector (". Контейнер");wait = новий 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 ("перевірка кнопки")). click ();/ * Отримати текст після виклику ajax * /WebElement TextElement = driver.findElement (By.className ("перемикач"));wait.until (ExpectedConditions.visibilityOf (TextElement));Рядок textAfter = TextElement.getText (). Trim ();/ * Перевірте обидва тексти до виклику ajax та після виклику ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Виконано виклик Ajax");String ожидаемийТекст = "Перемикач перевірено, і його значення так";/ * Перевірте очікуваний текст за допомогою тексту, оновленого після виклику ajax * /Assert.assertEquals (textAfter, очікуванийText);driver.close ();}}

Короткий зміст:

  • AJAX дозволяє веб-сторінці отримувати невеликі обсяги даних із сервера без перезавантаження всієї сторінки.
  • Для тестування програми Ajax слід застосовувати різні методи очікування
    • ThreadSleep
    • Неявне очікування
    • Явне очікування
    • WebdriverЗачекайте
    • Вільно зачекайте
  • Створення автоматизованого тестового запиту може бути складним для інструментів тестування, оскільки такий додаток AJAX часто використовує різні методи кодування або серіалізації для подання даних POST.