Debugging 有没有办法一步一步地进入CasperJS代码并调试

Debugging 有没有办法一步一步地进入CasperJS代码并调试,debugging,remote-debugging,casperjs,Debugging,Remote Debugging,Casperjs,虽然我已经使用CasperJS一段时间了,并且依赖控制台日志进行调试。我想知道是否有支持CasperJS分步调试的IDE,或者是否有其他方法(远程调试)来介入CasperJS代码?有人成功地做到了吗?任何信息都会有帮助 谢谢,当我想用CasperJS进行调试时,我会做以下事情:我用slimerJS启动我的脚本(它会打开一个firefox窗口,这样我就可以很容易地看到单击问题、表单填充问题、ajax返回错误、媒体上传…-,以及代码在哪一步阻塞) 因此,我不需要经常查看控制台,也不需要多次调用.ca

虽然我已经使用CasperJS一段时间了,并且依赖控制台日志进行调试。我想知道是否有支持CasperJS分步调试的IDE,或者是否有其他方法(远程调试)来介入CasperJS代码?有人成功地做到了吗?任何信息都会有帮助


谢谢,

当我想用CasperJS进行调试时,我会做以下事情:我用slimerJS启动我的脚本(它会打开一个firefox窗口,这样我就可以很容易地看到单击问题、表单填充问题、ajax返回错误、媒体上传…-,以及代码在哪一步阻塞)

因此,我不需要经常查看控制台,也不需要多次调用.capture('img.jpg')进行调试(现在我不测试响应性设计,所以我不需要使用capture,如果您测试它,请查看PhantomCSS)

我使用slimerJS进行调试(始终使用casper),但在持续集成jenkins中使用phantomJS(无头),尽管在linux或Mac上也可以将slimerJS(无头)用于xvfb

但有时我必须查看控制台以了解更多细节,因此我使用这些选项(您也可以在命令行中调用它们):

命名闭包对于这些选项很有用,因为将显示名称

我认为没有IDE:如果一个步骤失败,包含以下所有步骤的堆栈将停止(使用多重等待(并封装它们)来执行不同的闭包并得到所有闭包的结果,即使其中一个失败,仍然有可能进行“某种黑客攻击”;但在这种情况下,我们不是在堆叠同步步骤,而是在执行异步指令:如果尝试,请注意超时和逻辑流).Care:我说的是“如果一个步骤失败”,如果它只是一个闭包中的指令失败,那么当然会执行以下步骤

因此,一个失败的闭包->执行以下步骤。 如果某个步骤失败(例如:thenOpen(FSSFSFSF),且未定义fssfsf),堆栈将停止。 可以异步完成多个wait()

因此,如果您有很多bug并按顺序执行测试(堆叠步骤),您只能逐个调试它们,或者通过关闭独立步骤函数来调试它们-我认为IDE在这种情况下可以工作-(>对于一个文件。如果启动文件夹,堆栈当然是独立的)。通常在开始时,您每次完成一个步骤都会启动文件。当您习惯了该工具时,您会立即编写整个脚本

在大多数情况下,bug是由于异步、范围和上下文问题(实际上是js问题,尽管casper简化了异步问题:“回调/侦听器是Promise模式的实现。”)

  • 如果你想循环一套指令,不要忘记IIFE或使用casper-each函数,并用then()语句(或直接每次)包含所有指令。如果需要,我可以展示一些示例。否则它将循环最后一个索引“I.length”次,js中没有循环范围,默认情况下我有相同的引用

  • 单击步骤末尾的链接时,请使用wait()-step函数too-语句after;而不是then()。如果我已经很好地理解了then()语句,它将在上一步完成时启动。因此,它将在单击()之后启动。如果此单击启动ajax返回,并且您的下一步将对此ajax返回的结果进行刮取或测试,那么它将随机失败,因为您没有明确要求等待资源。我在第一次测试中看到了类似的问题

  • 不要混合使用两个上下文:casper环境和页面DOM环境。使用evaluate函数()从一个上下文传递到另一个上下文。在evaluate函数中,可以将参数从casper上下文传递到页面DOM

…就像这样:

var casperContext=“phantom”;
casper.evaluate(函数(pageDomContext){
log(“will echo->phantom
casper.options.verbose = true;
casper.options.logLevel ="debug";
casper.options.waitTimeout = 10000;