2012-07-19 81 views
6

我用下面的代码加载在我casperJS脚本一些JSON数据到一个变量:如何通过获取负载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(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,然后用它来执行测试?我认为我在这里失去了一些东西...

回答

6

你在打电话casper.exit()之前,你的then回调可能被执行。

尝试这样的事情,而不是:

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(); 
}); 
+0

您好,我有同样的问题,我的意思是我们已经加载JSON,但我怎么能得到它,这将是我想要的URL的数组的情况下工作迭代并获得响应代码? – Denis 2016-06-01 11:29:01