casperjs等待ajax请求结束

在做前端自动化测试的时候可能需要等待某些ajax请求执行完之后再执行比如截图之类的操作, 在实际使用过程中我是这么实现的:

var dataUrls = ['http://xxxx.com/dota/data/', 'http://xxxx.tv/dm/'];
var counts = {};
casper.on('resource.requested', function(resource) {
    Array.prototype.map.call(dataUrls, function(url) {
    	if (resource.url.indexOf(url) !== -1) {
    		casper.log("request:" + resource.url, "debug");
    		counts['requested']++;
    	}
    })
});

casper.on('resource.received', function(resource) {
    Array.prototype.map.call(dataUrls, function(url) {
    	if (resource.url.indexOf(url) !== -1 && resource.stage === 'end') {
    		casper.log("responsed:" + resource.url, "debug");
    		counts['responsed']++;
    	}
    })
});

也就是等待包含特定网址的request数和response数相等的时候,认为请求已经完成。

当然,请求完成之后渲染页面和js执行还需要时间,所以最好再wait个几百毫秒,然后再进行后续操作。