Статьи

Geb Gems: обработка запросов AJAX

Одна из самых больших проблем при тестировании веб-приложений, использующих AJAX, связана с проблемами синхронизации, вызванными асинхронным характером запроса. Распространенным решением является использование тайм-аутов для ожидания завершения вызова AJAX. Это может вызвать много проблем со временем. Используя Geb, есть лучший способ определить, что AJAX-вызов и его обратный вызов завершены.

В этом посте мы протестируем веб-сайт W3Schools, на котором есть кнопка, которая выполняет запрос AJAX: http://www.w3schools.com/ajax/ajax_example.asp

Сначала мы изменим наш baseUrl в файле GebConfig.groovy на сайт w3school:

Во-вторых, мы определяем страницу W3schools с необходимым содержанием и методом makeRequest, который нажимает кнопку.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import geb.Page
 
class WwwSchoolsAjaxExamplePage extends Page{
 
  private  static final DEFAULT_DIV_CONTENT = 'Let AJAX change this text'
 
  static url = "ajax/ajax_example.asp"
 
  static at = {
      title=="AJAX Example"
  }
 
  static content = {
      theButton { $(".example button") }
      theResultDiv { $("#myDiv") }
  }
 
  def makeRequest() {
      theButton.click()
      waitFor { theResultDiv.text()!=DEFAULT_DIV_CONTENT }
  }
 
}

Ключевым оператором здесь является строка waitFor . Это будет ждать, пока условие в замыкании не вернет true waitFor использует конфигурацию тайм-аута по умолчанию, которая составляет 5 секунд.

Далее мы собираемся сделать наш тест, который проверяет, что наш контент был обновлен.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
import geb.spock.GebReportingSpec
 
class AjaxRequestSpec extends GebReportingSpec{
 
  def "Validate if content gets updated after button click"() {
 
          given:
          to WwwSchoolsAjaxExamplePage
 
          when:
          makeRequest()
 
          then:
           theResultDiv.children()[0].text() == "AJAX is not a new programming language."
           theResultDiv.children()[1].text() == "AJAX is a technique for creating fast and dynamic web pages."
 
  }
 
}

Когда вы запустите сейчас запустить тест, тест будет успешно проверять обновленное содержимое веб- сайта w3schools .

  • Сделано в Groovy 2.4.3
Ссылка: Geb Gems: Обработка запросов AJAX от нашего партнера JCG Альберта ван Вина в блоге JDriven .