2012-07-19 50 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