如果我們點(diǎn)擊Get按鈕后,直接判斷頁面是否返回”Hello World”時(shí),這樣會(huì)出錯(cuò),因?yàn)楝F(xiàn)在還沒有立即返回。
這時(shí)我們需要使用Selenium的WaitForCondition方法,這個(gè)方法會(huì)不停的去判斷一個(gè)javascript表達(dá)式是否是true. 知道返回true時(shí)才繼續(xù)執(zhí)行。
我們可以看到,我們需要寫js表達(dá)式,如果我們需要判斷的很復(fù)雜,那么些表達(dá)式也是一件很麻煩的事,同時(shí)這個(gè)方法經(jīng)過我的使用,它對(duì)IE的支持不好。那么有沒有更好的方法呢?
更好的方法判斷Ajax調(diào)用是否結(jié)束
事實(shí)上我們測(cè)試Ajax程序大的麻煩,是想上面一樣來判斷Ajax調(diào)用是否結(jié)束,上面我們是判斷頁面中如果出現(xiàn)”Hello World”,證明Ajax已經(jīng)結(jié)束了,那么什么是更好的方法呢,我們經(jīng)常使用的javascript的類庫是JQuery,如何判斷JQuery的Ajax調(diào)用已經(jīng)結(jié)束了呢?
經(jīng)過研究發(fā)現(xiàn)當(dāng)沒有ajax調(diào)用時(shí),Jquery.active=0.
所以,我們可以使用這個(gè)的表達(dá)式判斷Ajax是否返回。
selenium.WaitForCondition("selenium.browserbot.getCurrentWindow().jQuery.active == 0", "50000");
是不是整個(gè)世界清靜多了
image
下面我收集了判斷其它類庫的Ajax活動(dòng)狀態(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″);