2010-09-24 2 views
1

Я чрезвычайно новичок в mvc и webtest, поэтому, пожалуйста, принесите меня здесь.Ожидание запроса ajax, чтобы закончить, прежде чем получить resposne

У меня есть вид клиента. Представление клиента вызывает функцию javascript на document.ready. Этот javascript-вызов выполняет ajax-сообщение для действия в контроллере клиента, которое возвращает json в исходный javascript, который, в свою очередь, обновляет представление клиента.

В моем веб-тестировании у меня есть запрос к представлению клиента, но ответ возвращается до того, как последующий вызов ajax завершен, и представление обновлено, поэтому у меня нет последнего содержимого страницы.

Есть ли способ подождать, пока этот последующий запрос не будет завершен, чтобы я мог проанализировать полную страницу со всеми данными? Или я иду об этом в неправильном направлении?

здесь вид:

<script type="text/javascript" language="javascript"> 
    //Set initial state of list during page load 
    $(document).ready(function() { 
     ApplyFilters();   
    }) 
</script> 

Что вызывает этот JavaScript:

function ApplyFilters() { 
..... 
$.ajax({ 
    type: "POST", 
    url: "/Customer/FilterList", 
    datatype: "html", 
    beforeSend: function() { 
     //do some stuff 
    }, 
    success: function(result) { 
     ... 
     BindCustomrGrid($find(GridClientID), result); 
    }, 
    error: function(req, status, error) { 
     // do some stuff 
    } 
}); 
} 

и, наконец, контроллер:

[AcceptVerbs(HttpVerbs.Post)] 
    public JsonResult FilterList(string io, string name, string owner) 
    { 
     ... // some api calls 
     return this.Json(new { customerList, serviceException }); 
    } 

ответ

0

, что я решил сделать вместо этого поста в URL, который вызывается из запроса AJAX , десериализовать json в пользовательском классе проверки и проверить его там.

0

функция Сукчес запускается, когда запрос возвращается. однако вы запускаете этот вызов ajax при загрузке DOM. который является нечетным, обычно пользователь может сделать некоторый запрос AJAX после того, как пользователь что-то сделал или через определенное время.

, если вы хотите, чтобы ждать, пока загрузится вся страница, прежде чем запрос AJAX сделан вы можете использовать:

$(window).load(function() { 
    ApplyFilters();   
}) 
+0

Это не мой сайт, я просто тестирую его прямо сейчас. Применимые фильтры в основном захватывают данные и заполняют сетку. Удобно, что это действие задерживается до тех пор, пока страница не будет загружена, так как время ответа намного быстрее, но я просто не уверен, как тестировать его. – earthling

1

В таких случаях я настоятельно рекомендую TestPlan в качестве инструмента для тестирования. Преимущество состоит в том, что при поиске элементов на странице он автоматически ждет их завершения JavaScript. Так что если вы делаете что-то вроде:

Check //button[@id='get123'] 

Он будет ожидать, пока эта кнопка не появится. Очевидно, это не будет ждать вечно. И в безэкранном обратном интерфейсе он проверяет, работает ли какой-либо JavaScript, и если он не будет возвращен сразу, так как невозможно что-то появиться.

+0

спасибо за рекомендацию. Я посмотрю. – earthling

Смежные вопросы