Я немного тестирую страницы AJAX. Ключ заключается в том, чтобы дождаться завершения обратной передачи asnyc. Если у вас есть
Assert.IsFalse(browser.Div("foo")).ContainsText("gak");
browser_action_that_changes_bar_to_gak
>> Here you need to wait <<
Assert.IsTrue(browser.Div("foo")).ContainsText("gak");
В разделе «ожидания» вы можете выполнить System.Threading.Thread.Sleep (numberOfMilliseconds) <- это <strong>не лучший способ , но это действительно просто. Как только вы определили, что ожидание - это то, что вам нужно, лучший способ подождать - опрашивать статус, а не каждый раз набирать numberOfMilliseconds . Я полагаю, что разные библиотеки AJAX делают вещи по-разному, но для меня работает действительно подобно этому: http://pushpontech.blogspot.com/2008/04/ajax-issues-with-watin.html
Я поместил JavaScript в Eval () во вспомогательную функцию в классе моей базовой страницы, а не вставлял его в каждую страницу, как в статье.
.
класс моей Базовой страницы содержит:
public bool IsInAsyncPostBack()
{
const string isAsyncPostBackScript = "Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()";
return bool.Parse(this.Document.Eval(isAsyncPostBackScript));
}
И тогда мой WaitForAsyncPostback в основном такой же, как в связанном посте, но я добавил максимальное время ожидания. Прежде чем перейти к классам Page (классно; сделайте это!), Я сделал эти статические функции где-то еще, и это тоже сработало.