【问题标题】:How to load JSON via get into variable in CasperJS script如何通过 get 加载 JSON 到 CasperJS 脚本中的变量
【发布时间】:2012-07-18 23:51:56
【问题描述】:

我正在使用以下代码将一些 JSON 数据加载到我的 casperJS 脚本中的变量中:

var casper = require("casper").create({
    verbose: true,
    logLevel: 'debug',
    pageSettings: {
        userName: 'dev',
        password: 'devpass',
    } 
});
var baseUrl = 'http://mysite.com/';

casper.start().then(function() {
    this.open(baseUrl + 'JSON-stuff', {
        method: 'get',
        headers: {
            'Accept': 'application/json'
        }
    });
});

casper.run(function() {
    var journalJson = JSON.parse(this.getPageContent());
    require('utils').dump(journalJson);  //this returns my json stuff as expected
    this.exit();
});

这就像我想要的那样工作 - 我有需要进行处理的 journalJson 对象。但是,我不确定如何继续我的测试。添加到 casper.run() 的其他函数没有按预期执行......例如,如果我将 casper run 函数更改为:

casper.run(function() {
    var journalJson = JSON.parse(this.getPageContent());
    require('utils').dump(journalJson);
    this.open(baseUrl).then(function () {
        this.assertExists('#header');
    });
    this.exit();
});

然后 phantomjs 记录该 url 被请求,但测试从未运行。

我的问题:如何通过 get 访问 JSON,然后使用它来执行测试?我认为我在这里遗漏了一些东西......

【问题讨论】:

    标签: javascript testing phantomjs casperjs


    【解决方案1】:

    在您的 then 回调可能被执行之前,您正在调用 casper.exit()

    试试这样的方法:

    casper.then(function() { // <-- no more run() but then()
        var journalJson = JSON.parse(this.getPageContent());
        require('utils').dump(journalJson);
    });
    
    casper.thenOpen(baseUrl, function() {
        this.test.assertExists('#header'); // notice: this.test.assertExists, not this.assertExists
    });
    
    casper.run(function() {
        this.test.done();
    });
    

    【讨论】:

    • 嗨,我有同样的问题,我的意思是我们已经加载了 JSON,但是在我想要迭代并获取响应代码的 URL 数组的情况下,如何让它工作?
    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多