1

当从评估上下文调用函数时,有什么方法可以调用 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 作为消息总线,但我正在寻找更好的解决方案。

谢谢

4

2 回答 2

3

在 PhantomJS(因此也包括 CasperJS)中,evaluate在被监禁的环境中运行。只有原始对象,您可以通过序列化JSON.stringify并被JSON.parse接受。

通常的做法是从主脚本运行屏幕截图。您仍然可以从其他地方触发捕获,包括在内部evaluate,您只需将其传达回主脚本。查看 PhantomJS 包含run-qunit.js的示例,该示例通过监视特定 DOM 元素的存在来检测测试的完成。

于 2012-12-30T16:53:29.057 回答
2

没有办法在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 回答