Одна из самых больших проблем при тестировании веб-приложений, использующих AJAX, связана с проблемами синхронизации, вызванными асинхронным характером запроса. Распространенным решением является использование тайм-аутов для ожидания завершения вызова AJAX. Это может вызвать много проблем со временем. Используя Geb, есть лучший способ определить, что AJAX-вызов и его обратный вызов завершены.
В этом посте мы протестируем веб-сайт W3Schools, на котором есть кнопка, которая выполняет запрос AJAX: http://www.w3schools.com/ajax/ajax_example.asp
Сначала мы изменим наш baseUrl в файле GebConfig.groovy на сайт w3school:
1
|
baseUrl = "http://www.w3schools.com/" |
Во-вторых, мы определяем страницу 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 . |