Одна из самых больших проблем при тестировании веб-приложений, использующих 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.Pageclass 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.GebReportingSpecclass 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 . |