1

評価コンテキストから関数が呼び出されたときにcaptureのようなcasperjsメソッドを呼び出す方法はありますか?

説明:「実際の」ブラウザーまたはキャスパーの両方で実行できる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をメッセージバスとして使用する方法があることは知っていますが、より良い解決策を探しています。

ありがとう

4

2 に答える 2

3

PhantomJS(したがってCasperJS)ではevaluate、jailされた環境で実行されます。プリミティブオブジェクトのみ。シリアル化できるものでJSON.stringifyあり、JSON.parse受け入れられます。

通常の方法は、メインスクリプトからスクリーンキャプチャを実行することです。内を含む他の場所からキャプチャをトリガーすることもできevaluateます。メインスクリプトに通信する必要があります。run-qunit.js特定のDOM要素の存在を監視することによってテストの完了を検出するPhantomJSに含まれている例を確認してください。

于 2012-12-30T16:53:29.057 に答える
2

内でcasperメソッドを実行する方法はありませんevaluate()。修正されたコードは次のとおりです。

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()
于 2012-12-30T23:40:23.293 に答える