Nightwatch.js异步Selenium操作

dwo*_*dgb 0 nightwatch.js

假设我有一个Nightwatch测试,其中有两个步骤可以填写表格.作为第一步的一部分,我需要动态查询页面中的一些数据(使用Selenium api),然后使用该数据进行额外的selenium调用,并使用最终结果进行自定义断言.我需要使用Selenium api的原因并不是我不知道如何使用普通的Nightwatch断言,而是正常的断言不足以测试我想要测试的事物的类型.此外,在第一步结束时,单击一个按钮,该按钮将移动到表单的下一部分(为第二步准备).

(代码版):

module.exports = {
  'Part 1': (client) => {

    // ... do cool stuff

    client.SOME_SELENIUM_COMMAND(...SOME_ARGS..., (result) => {

      client.SOME_OTHER_SELENIUM_COMMAND(...SOME_OTHER_ARGS..., (result2) => {
        // ... do more cool stuff with result2
      });
    });

    // moves the page onto part 2
    client.click(SOME_BUTTON);
  },

  'Part 2': (client) => {
    // ... part 2 stuff
  }
};
Run Code Online (Sandbox Code Playgroud)

我的问题是:在selenium命令结果部分解析之前,测试将移至第二部分.

我知道内部Nightwatch使用某种事件队列和EventEmitters来确保命令以正确的顺序执行,但是看起来第一部分末尾的click命令正在排队,之后回调中的命令可以是.

Fre*_*lin 6

您可以使用Nightwatch perform命令执行其他一些命令,并done()在希望测试继续执行第2部分时调用.您可以执行以下操作:

module.exports = {

    'Part 1': (client) => {

    // ... do cool stuff

    client
    .perform(function(client, done) {

         client.SOME_SELENIUM_COMMAND(...SOME_ARGS..., (result) => {

             client.SOME_OTHER_SELENIUM_COMMAND(...SOME_OTHER_ARGS..., (result2) => {
                 // ... do more cool stuff with result2
                 // Call done to continue to Part 2
                 done();
             });
        });
    })
    // moves the page onto part 2
    .click(SOME_BUTTON);
  },

  'Part 2': (client) => {
    // ... part 2 stuff
  }
};
Run Code Online (Sandbox Code Playgroud)