在 Nightwatch.js 中等待 JavaScript 条件

Wait for JavaScript condition in Nightwatch.js

我是 Nightwatch.js 的新手,正在从 WD.js 库中转移一些测试。 WD.js 的一个绝妙功能是 .waitForConditionInBrowser(),它等待任意 JavaScript 片段为真。然而,我无法弄清楚如何在 Nightwatch.js 中以这种方式与 JavaScript 进行交互,或者如果它甚至可能(在阅读文档之后)。这是我想要做的一个例子:

假设我正在加载一个页面,大约 3 秒后 my_js_var 变为 5。在 WD.js 中,它看起来像这样(最多等待 5 秒):

.get(my_page_url)
.waitForConditionInBrowser('my_js_var === 5', 5000)
// continue if my_js_var === 5 within 5 s

我什至尝试在 Nightwatch 中做一些更脏的事情,但我可能完全误解了与页面 JS 的交互是如何工作的:

.url(my_page_url)
.pause(5000)
.execute(function() {
    return (my_js_var === 5);
})
// continue if my_js_var === 5 within 5 s

但是无论返回什么,它都会继续,而且不清楚结果去向。

Nightwatch 中是否有合适的 waitFor 函数,如果没有,我如何 运行 对评估的 JavaScript 代码进行基本断言?

已经有一段时间了,但我曾经做过这样的事情:

exports.command = function(callback) {
  var self = this;
  this.timeoutsAsyncScript(5000, function() {
    this.executeAsync(function(done) {
        if(my_js_var === 5) {
          return my_js_var === 5
        }
        else {
          done();
        }
      },
      [], 
      function(result) {
        if(typeof(callback) === "function") {
          callback.call(self, result);
        }
      });
  });
  return this;
};

timeoutsAsyncScript 中的超时可让您确保合理的等待时间,以便测试在应该 失败时相应地失败。