我对mvc和webtest非常陌生,所以请在这里向我承诺。
我有一个客户视图。客户视图在document.ready
上调用javascript函数。此javascript调用对客户控制器中的操作执行ajax发布,该操作将json返回到原始javascript,而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 :(得分:1)
在这种情况下,我强烈建议TestPlan作为测试工具。它的优点是,当您在页面上查找元素时,它会自动等待它们允许JavaScript完成执行。所以,如果你做了类似的事情:
Check //button[@id='get123']
它将等到该按钮存在。显然它不会永远等待。在无显示的后端,它将检查是否有任何JavaScript正在运行,如果没有,它将立即返回,因为它不可能出现。
答案 1 :(得分:0)
返回请求时会运行succes函数。但是你在加载DOM时启动这个ajax调用。这是奇怪的,通常会在用户做某事后或在一定时间后发出一些AJAX请求。
如果你想在AJAX请求发出之前等到整个页面被加载,你可以使用:
$(window).load(function() {
ApplyFilters();
})
答案 2 :(得分:0)
我决定做的是发布到从ajax请求调用的url,反序列化自定义验证类中的json并在那里验证它。