我正在进行UI端到端测试,在测试开始之前,我们想要构建测试所需的数据。为此,我们使用CasperJS和waitForResource()函数。
我们希望等到资源在数据库中创建完毕。例如等待http GET响应状态从404切换到200 (或201)。这是一个API REST。
代码:
casper.waitForResource(urls.rootBE + 'ratecards/default?api_key=' + user.apiKey + '&company=' + organization.id, function(resource) {
utils.dump(resource);
});这不管用。你知道怎么做吗?
发布于 2015-04-22 18:11:51
你能给我看一下你的实际调用API的代码吗?
waitForResource实际上只是等待页面本身或casperjs手动调用的资源。这样做可以实现某种循环,在该循环中,您将每隔5秒调用一次API,并断言API将以200或201作为响应。
编辑:
首先,您需要知道数据库中的资源应该等待多长时间。花掉你计算出的最大时间。然后编写函数,它将迭代API调用,如下所示。
var condition = false;
function loop(index,iteration){
if(condition) {
return;
}
else if(index >= iteration) {
casper.test.fail('Record not found');
return;
}
casper.then(function(){
this.thenOpen('http://www.webpage.com/api/record/543',function(response){
if(response.status==200) {
condition = true;
this.test.pass("Record found");
}
this.echo(response.status);
})
})
.then(function(){
loop.call(this,index+1,iteration)
})
}
casper.test.begin('Test for record',1,function suite(test){
casper.start()
loop.call(this, 0, 20);
casper.run(function(){
test.done();
})
})如果您因为高流量而需要利用调用,那么只需使用setTimeout。
发布于 2016-03-29 14:26:17
现在并不容易。
如果在casperjs中打开页面时没有等待,同时当前步骤是最后一步,casperjs将退出,因此必须在打开页面步骤之后执行等待步骤,以检查您的资源是否已加载。
您可以在客户端挂钩ajax或jsonp请求并使用casper.evaluate()接收响应体,或者如果您的请求restful只是一个"GET“方法,您可以使用带有sendAJAX()方法detail的casperjs clientutils模块。
这个link可能会给你很大的帮助。
发布于 2017-02-02 10:31:03
考虑对有效页面所不具有的内容使用waitForSelector(),或者改为获取页面状态代码并进行适当排序,如下所示:
casper.on('resource.received', function(resource) {
statuscode = resource.status;
});
if (statuscode < 404) {
// Thing to do on valid pages
}waitForSelector()的值是,您可以非常容易地设置超时,以及在遇到超时时声明一个隐式操作。
一个潜在的缺点是,一些站点/API有一个重定向,破坏的URL被重定向到非404页面,这在第二个实例中不会被拾取。
https://stackoverflow.com/questions/29419294
复制相似问题