无法使用PhantomJS远程调试器在断点处访问casper实例方法

时间:2015-03-31 12:54:19

标签: debugging phantomjs casperjs remote-debugging

我试图调试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:

  • 定义了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做到这一点?

1 个答案:

答案 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