2012-12-30 59 views
1

當從評估上下文調用函數時,是否有任何方法可以調用casperjs方法(如捕獲)?從DOM上下文中調用casperjs捕獲(評估)

說明:我希望能夠編寫可以在「真實」瀏覽器或casper中運行的js腳本(qunit)。

樣品:

function screenshot()(
//i'm runing in a "real" browser ? Then only console.log 
//i'm running in casper ? Then call capser.capture() 

我試圖與關閉,但失敗:

var casper = require('casper').create(); 
casper.start('http://google.fr/'); 

casper.evaluate(function(o) { 
o.capture('/tmp/google.png', { 
    top: 100, 
    left: 100, 
    width: 500, 
    height: 400 
}); 
}, {o: this}); 

casper.run() 


TypeError: JSON.stringify cannot serialize cyclic structures.     
    :/modules/webpage.js:249 
    /Users/macbookpro/js:576 in evaluate 
    /Users/macbookpro/js/testClosure.js:11 

我知道有使用用途的console.log作爲消息總線的方式,但我在尋找尋求更好的解決方案。

由於

回答

3

在PhantomJS(並且因此也CasperJS),在監禁的環境evaluate運行。只接受原始對象,您可以通過JSON.stringifyJSON.parse序列化。

通常的做法是從主腳本運行屏幕截圖。你仍然可以從觸發從其他地方捕獲,包括在evaluate之內,你只需要將它傳回主腳本。查看PhantomJS包含的run-qunit.js示例,該示例通過監視特定DOM元素的存在來檢測測試的完成。

+0

好吧所以答案是:評估無法訪問主capserJS對象。我會嘗試找到另一種方法讓DOM上下文與Casper交談,使用return結構或console.log回調。 – jseguillon

2

沒有辦法在evaluate()內運行casper方法。這裏是你的代碼,修正:

var casper = require('casper').create(); 

casper.start('http://google.fr/', function() { 
    this.capture('google.png', { 
     top: 100, 
     left: 100, 
     width: 500, 
     height: 400 
    }); 
}); 

casper.run()