我正在尝试调试casperjs脚本using the remote debugger,发现直到脚本执行完成,casper实例方法才起作用。似乎这是关于then()和run()在casper中如何工作的一些回调怪癖,但是我不确定如果您不能暂停程序执行并以如下方式运行代码,调试器的casper控制台端将如何有用。如果它仍在运行(this answer听起来确实可以)。
例如,hello_wolfram.js启动一个Casper实例,转到Wolfram alpha,回显页面标题,搜索分形,然后再次回显页面标题。这些页面标题调用在正在运行的脚本中可以正常工作,但是如果我尝试在casper上下文控制台中运行该命令,它将返回null。其他卡斯珀方法均无效。虽然定义了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:
定义了casper变量,并返回带有以下内容的Casper对象:
currentURL =“ http://www.wolframalpha.com/”
casper.getTitle()返回null
休息2:
定义了casper变量,并返回带有currentURL =“ http://www.wolframalpha.com/input/?i=fractals”的Casper对象
casper.getTitle()返回null
我真的希望我可以在casper控制台中运行casper命令,并在另一个窗口中查看它们对DOM的影响,这似乎就像调试器将为您提供的。有没有办法用casperjs做到这一点?
最佳答案
在断点时,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关于debugging - 使用PhantomJS远程调试器无法在断点处访问casper实例方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29369162/