我试图调试casperjs脚本using the remote debugger,我发现在脚本执行完成之前,casper实例方法不起作用。似乎有一些关于then()和run()如何在casper中工作的回调怪癖,但我不确定如果你不能调试器的casper控制台端是如何有用的暂停程序执行并运行代码,就像它仍在运行一样(this answer确实让它听起来像你一样)。
例如,hello_wolfram.js启动一个casper实例,转到wolfram alpha,回显页面标题,搜索分形,然后再次回显页面标题。这些页面标题调用在正在运行的脚本中运行良好,但如果我尝试在casper上下文控制台中运行该命令,则返回null。其他任何casper方法都不起作用。虽然定义了casper变量,但我确实可以访问一个很好的,信息丰富的Casper对象。
var casper = require('casper').create();
casper.start('http://www.wolframalpha.com');
// echo page title for sanity check
casper.then(function(){
debugger; // 1
this.echo('Hello, Wolfram! The Page title is ' + this.getTitle());
});
// enter search term and submit form
casper.then(function() {
this.fill('form.index', {'i': 'fractals'}, true)
});
// echo page title on search results page
casper.then(function(){
debugger; // 2
this.echo('The Page title is now ' + this.getTitle());
});
casper.run();
休息1:
休息2:
我真的希望我可以在casper控制台中运行casper命令,并在另一个窗口中看到它们对DOM的影响,这看起来就像调试器会给你的。有没有办法用casperjs做到这一点?
答案 0 :(得分:0)
当你处于断点时,casper执行暂停。您可以访问casper对象上的任何属性,但要运行casper命令,您需要将它们添加到队列中。这只是意味着将其包装在casper.then()
中,然后逐步超过断点。
在休息一,如果你运行casper.steps.length
,你有5个步骤,你现在处于第3步(casper.step
的输出)。
然后,您可以添加getTitle
代码,包含在casper.then()
:
casper.then(function() {
this.echo('The Page title is now ' + this.getTitle());
});
现在casper.steps.length === 6
;您已经在当前的之后立即添加了一个步骤,但您仍处于断点。
继续/步骤,您的文字将被打印。如果需要,可以在debugger
块中添加其他casper.then()
语句;然后,您将在步骤4(新添加的步骤)暂停。脚本选项卡将使用仅包含您的功能的小脚本进行更新。
此答案中有关casper.then
的更多信息:https://stackoverflow.com/a/11957919