我正在尝试调试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/

10-14 05:51