【发布时间】:2016-08-03 10:12:29
【问题描述】:
我正在尝试在 nightwatch 中进行调试。 当我放入 console.log 时,它会在测试运行之前打印 - 同时它会进行某种构造/编译测试。 我还尝试了 Visual Studio 代码调试器和相同的东西 - 在测试实际运行之前命中断点。 感谢您的帮助 - 标记
【问题讨论】:
-
您遇到什么错误?所提出的问题缺乏特异性。你要修改什么文件来添加你的控制台语句?
我正在尝试在 nightwatch 中进行调试。 当我放入 console.log 时,它会在测试运行之前打印 - 同时它会进行某种构造/编译测试。 我还尝试了 Visual Studio 代码调试器和相同的东西 - 在测试实际运行之前命中断点。 感谢您的帮助 - 标记
【问题讨论】:
由于您实际上没有示例或运行的某些代码,因此我只能为您提供可以尝试解决问题的一般方向。
发生这种情况是因为您的代码是异步运行的(因为这就是 javascript 的工作方式),并且与浏览器/html 无关的所有内容都将在您的浏览器开始实际测试之前运行。我建议您应该尝试使用 callbacks 以避免首先打印您的检查消息(这样您就可以将 console.log 链接到取决于浏览器的代码并且它将运行只有在这完成之后。如果你这样做,控制台日志的调试将真正起作用。
也许你可以学习here 怎么做,例如。
【讨论】:
“nightwatch”是基于 node.js 构建的。 Node.js 异步执行语句。如果写console.log();,会异步执行。
您使用browser(或client)对象(例如browser.url();、browser.click(); 等)编写的语句将在Selenium Server 排队。它们也由 node.js 异步执行,但在 selenium 服务器上排队。
要与 nightwatch 中的其他语句同步执行 console.log(),请使用 .perform()。您将获得与其他语句同步的输出。
var elementValue;
browser
.getValue('.some-element', function(result) {
elementValue = result.value;
})
// other stuff going on ...
//
// self-completing callback
.perform(function() {
console.log('elementValue', elementValue);
// without any defined parameters, perform
// completes immediately (synchronously)
})
.end();
出于调试目的,您可以停止执行以查找元素值或检查浏览器相关数据。使用此命令:browser.pause();(或client.pause();)。不要在这里传递任何计时器。它将停止执行。
【讨论】: