【问题标题】:Cannot access casper instance methods at breakpoints using PhantomJS remote debugger无法使用 PhantomJS 远程调试器在断点处访问 casper 实例方法
【发布时间】:2015-06-04 19:45:34
【问题描述】:

我正在尝试调试 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 做到这一点?

【问题讨论】:

    标签: debugging phantomjs casperjs remote-debugging


    【解决方案1】:

    当您处于断点时,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;您在当前步骤之后立即添加了一个步骤,但您仍处于断点处

    所以继续/步骤,您的文本将被打印。如果您愿意,可以在 casper.then() 块内添加额外的 debugger 语句;然后,您将在第 4 步(您新添加的步骤)处暂停。脚本选项卡将使用仅包含您的函数的小脚本进行更新。


    更多关于casper.then的信息在这个答案中:https://stackoverflow.com/a/11957919

    【讨论】:

      猜你喜欢
      • 2013-04-17
      • 2018-04-22
      • 2013-06-22
      • 2019-10-24
      • 2012-03-17
      • 2011-06-28
      • 2016-05-20
      • 2017-10-12
      • 2013-03-16
      相关资源
      最近更新 更多