如果我們點擊Get按鈕后,直接判斷頁面是否返回”Hello World”時,這樣會出錯,因為現(xiàn)在還沒有立即返回。
這時我們需要使用Selenium的WaitForCondition方法,這個方法會不停的去判斷一個javascript表達式是否是true. 知道返回true時才繼續(xù)執(zhí)行。
我們可以看到,我們需要寫js表達式,如果我們需要判斷的很復雜,那么些表達式也是一件很麻煩的事,同時這個方法經過我的使用,它對IE的支持不好。那么有沒有更好的方法呢?
更好的方法判斷Ajax調用是否結束
事實上我們測試Ajax程序大的麻煩,是想上面一樣來判斷Ajax調用是否結束,上面我們是判斷頁面中如果出現(xiàn)”Hello World”,證明Ajax已經結束了,那么什么是更好的方法呢,我們經常使用的javascript的類庫是JQuery,如何判斷JQuery的Ajax調用已經結束了呢?
經過研究發(fā)現(xiàn)當沒有ajax調用時,Jquery.active=0.
所以,我們可以使用這個的表達式判斷Ajax是否返回。
selenium.WaitForCondition("selenium.browserbot.getCurrentWindow().jQuery.active == 0", "50000");
是不是整個世界清靜多了
image
下面我收集了判斷其它類庫的Ajax活動狀態(tài)
jQuery: “jQuery.active”
Prototype: “Ajax.activeRequestCount”
Dojo: “dojo.io.XMLHTTPTransport.inFlight.length”
ASP.NET AJAX:
Javascript:
function isInAsyncPostBack() {
instance = Sys.WebForms.PageRequestManager.getInstance();
return instance.get_isInAsyncPostBack();
}
C#
selenium.WaitForCondition(“!selenium.browserbot.getCurrentWindow().isInAsyncPostBack()”, “1000″);