Nightwatch.js 异步 Selenium 操作
Nightwatch.js Async Selenium Operations
假设我有一个 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
}
};
我的问题是:在 selenium 命令结果部分解决之前,测试进入第二部分。
我知道 Nightwatch 在内部使用某种事件队列和 EventEmitter 来确保命令以正确的顺序执行,但是看起来第一部分末尾的单击命令在命令之前排队在回调中即可。
您可以使用 Nightwatch perform command 执行一些其他命令,并在您希望测试继续到第 2 部分时调用 done()
。您可以这样做:
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
}
};
假设我有一个 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
}
};
我的问题是:在 selenium 命令结果部分解决之前,测试进入第二部分。
我知道 Nightwatch 在内部使用某种事件队列和 EventEmitter 来确保命令以正确的顺序执行,但是看起来第一部分末尾的单击命令在命令之前排队在回调中即可。
您可以使用 Nightwatch perform command 执行一些其他命令,并在您希望测试继续到第 2 部分时调用 done()
。您可以这样做:
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
}
};