首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Casperjs waitForResource

Casperjs waitForResource
EN

Stack Overflow用户
提问于 2015-04-03 01:49:25
回答 3查看 911关注 0票数 0

我正在进行UI端到端测试,在测试开始之前,我们想要构建测试所需的数据。为此,我们使用CasperJS和waitForResource()函数。

我们希望等到资源在数据库中创建完毕。例如等待http GET响应状态从404切换到200 (或201)。这是一个API REST。

代码:

代码语言:javascript
运行
复制
casper.waitForResource(urls.rootBE + 'ratecards/default?api_key=' + user.apiKey + '&company=' + organization.id, function(resource) {
    utils.dump(resource);
});

这不管用。你知道怎么做吗?

EN

回答 3

Stack Overflow用户

发布于 2015-04-22 18:11:51

你能给我看一下你的实际调用API的代码吗?

waitForResource实际上只是等待页面本身或casperjs手动调用的资源。这样做可以实现某种循环,在该循环中,您将每隔5秒调用一次API,并断言API将以200或201作为响应。

编辑:

首先,您需要知道数据库中的资源应该等待多长时间。花掉你计算出的最大时间。然后编写函数,它将迭代API调用,如下所示。

代码语言:javascript
运行
复制
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。

票数 1
EN

Stack Overflow用户

发布于 2016-03-29 14:26:17

现在并不容易。

如果在casperjs中打开页面时没有等待,同时当前步骤是最后一步,casperjs将退出,因此必须在打开页面步骤之后执行等待步骤,以检查您的资源是否已加载。

您可以在客户端挂钩ajax或jsonp请求并使用casper.evaluate()接收响应体,或者如果您的请求restful只是一个"GET“方法,您可以使用带有sendAJAX()方法detail的casperjs clientutils模块。

这个link可能会给你很大的帮助。

票数 0
EN

Stack Overflow用户

发布于 2017-02-02 10:31:03

考虑对有效页面所不具有的内容使用waitForSelector(),或者改为获取页面状态代码并进行适当排序,如下所示:

代码语言:javascript
运行
复制
casper.on('resource.received', function(resource) {
    statuscode = resource.status;

});

if (statuscode < 404) {
    // Thing to do on valid pages
}

waitForSelector()的值是,您可以非常容易地设置超时,以及在遇到超时时声明一个隐式操作。

一个潜在的缺点是,一些站点/API有一个重定向,破坏的URL被重定向到非404页面,这在第二个实例中不会被拾取。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29419294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档