假设我有一个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使用某种事件队列和EventEmitters来确保命令以正确的顺序执行,但是看来第一部分末尾的click命令在命令之前排队了回调可以。
答案 0 :(得分:6)
您可以使用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
}
};