2010-09-24 29 views
1

我對mvc和webtest非常新,所以請在這裏承擔我。等待阿賈克斯請求完成之前得到resposne

我有一個客戶視圖。客戶視圖在document.ready上調用javascript函數。這個javascript調用執行ajax post到客戶控制器中的一個動作,該動作將json返回到原來的javascript,然後更新客戶視圖。

在我的webtest中,我有一個對客戶視圖的請求,但是在後續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

我決定做的卻是後到從Ajax請求調用的網址,反序列化自定義驗證類中的json並在那裏驗證它。

0

的更迭函數返回的請求時運行。然而,你開始加載DOM的這個Ajax調用。這很奇怪,通常會在用戶做了某些事情之後或在一段時間之後做出一些AJAX請求。

,如果你想等到整個頁面加載之前的AJAX請求時,你可以使用:

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

這不是我的網站,我只是現在就測試它。 applyfilters基本上抓取數據並填充網格。這個動作延遲到頁面加載後很方便,因爲它使響應時間更快,但我不確定如何測試它。 – earthling 2010-09-24 18:37:35

1

在這種情況下,我強烈推薦TestPlan作爲測試工具。它的優點是,當您在頁面上查找元素時,它會自動等待它們以允許JavaScript完成執行。所以如果你做類似的事情:

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

它將等待,直到該按鈕存在。顯然它不會永遠等待。在無顯示的後端它會檢查是否有任何JavaScript正在運行,如果沒有,它會立即返回,因爲它不可能出現。

+0

感謝您的推薦。我會研究它。 – earthling 2010-10-21 13:59:07