Ожидание завершения всех AJAX-запросов


(Pavel) #1

Добрый день. Столкнулся с проблемой ожидания изменения элементов.

На странице имеется таблица, которую можно сортировать (сортировка реализована на сервере). Не получается реализовать ожидание, когда прийдут новые данные с сервера. Необходимо дождаться выполнения всех ajax запросов, а не появления какого-либо элемента. 

Как я понял, необходимо http://habrahabr.ru/post/111649/. Но я не разобрался, как это сделать.

Заранее спасибо.


(re1ax) #2

Если брать в общем, то советую JS'ом смотреть сколько активных AJAX-запросов сейчас в обработке. Например, в Prototype это делается при помощи Ajax.activeRequestCount. Для других фреймворков, соответственно, будут другие команды.

В моём проекте используется всё тот же Prototype, так что ожидание завершения всех AJAX-запросов у меня сделано следующим образом:

 

active_requests = driver.execute_script('return Ajax.activeRequestCount')
 
while active_requests is not 0:
    active_requests = driver.execute_script('return Ajax.activeRequestCount')
    time.sleep(0.1)

(Vol) #3

Витягнув з одного із опен сорсних проектів тут, сам не користувався, небуло потреби...

 

Вони робили наступним чином (перепрошую за форматування):

private static final String JQUERY_ACTIVE_CONNECTIONS_QUERY = "return $.active == 0;";
 

void waitUntilAjaxRequestCompletes() { FluentWait<WebDriver>(driver).withTimeout(DEFAULT_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS)pollingEvery(DEFAULT_SLEEP_TIME_IN_SECONDS, TimeUnit.SECONDS).until(new ExpectedCondition<Boolean>() { Boolean apply(WebDriver d) { jsExec = (JavascriptExecutor) d; (Boolean) jsExec.executeScript(JQUERY_ACTIVE_CONNECTIONS_QUERY);