nightwatch 自定义命令的执行模型是什么,我如何等待它们?
What is the execution model for nightwatch custom commands, and how do I wait for them?
我为 Nightwatch.js 实现的自定义命令似乎正在异步执行。自定义命令中的 console.log
消息显示 在 调用命令后发出的 console.log
消息。我在 nightwatch 文档中找不到任何关于如何执行这些命令的参考资料,但由于它们看起来是异步的,我不确定如何等待以确保在执行下一个命令之前完成一个命令(因为这似乎并非如此。
这是我的自定义命令 ("foo"):
exports.command = function () {
console.log('Command executed');
}
我的测试函数:
module.exports['my test'] = function(browser) {
browser.resizeWindow(400, 600);
browser.foo();
console.log('Test function returning');
};
当我运行这个时,日志显示为:
Test function returning
Command executed
如果我的自定义函数同步执行,这与我期望的顺序相反。
如果您希望您的自定义命令正常工作(并同步),您需要在您的自定义命令中调用至少一个 Nightwatch.js 命令。
试试这个:
exports.command = function () {
console.log('Command executed');
this.execute(function() {});
}
如果想要更深入的了解,可以关注本期:
https://github.com/nightwatchjs/nightwatch/issues/1123
您的命令应将 callback
作为参数:
exports.command = function (callback) {
console.log('Command executed');
if (callback) {
callback();
}
}
并像这样执行:
browser.foo(function() {
console.log('Test function returning');
});
另一种解决方案是使用browser.perform
方法:
module.exports['my test'] = function(browser) {
browser.resizeWindow(400, 600);
browser.foo();
browser.perform(function()
console.log('Test function returning');
});
};
这是 Nightwatch 团队的糟糕设计。我只是花了几个小时试图调试这个问题,唯一对我有用的解决方案是使用 perform()。这是荒唐的。为什么 Nightwatch 开发人员会异步地自定义命令 运行。
我为 Nightwatch.js 实现的自定义命令似乎正在异步执行。自定义命令中的 console.log
消息显示 在 调用命令后发出的 console.log
消息。我在 nightwatch 文档中找不到任何关于如何执行这些命令的参考资料,但由于它们看起来是异步的,我不确定如何等待以确保在执行下一个命令之前完成一个命令(因为这似乎并非如此。
这是我的自定义命令 ("foo"):
exports.command = function () {
console.log('Command executed');
}
我的测试函数:
module.exports['my test'] = function(browser) {
browser.resizeWindow(400, 600);
browser.foo();
console.log('Test function returning');
};
当我运行这个时,日志显示为:
Test function returning
Command executed
如果我的自定义函数同步执行,这与我期望的顺序相反。
如果您希望您的自定义命令正常工作(并同步),您需要在您的自定义命令中调用至少一个 Nightwatch.js 命令。
试试这个:
exports.command = function () {
console.log('Command executed');
this.execute(function() {});
}
如果想要更深入的了解,可以关注本期: https://github.com/nightwatchjs/nightwatch/issues/1123
您的命令应将 callback
作为参数:
exports.command = function (callback) {
console.log('Command executed');
if (callback) {
callback();
}
}
并像这样执行:
browser.foo(function() {
console.log('Test function returning');
});
另一种解决方案是使用browser.perform
方法:
module.exports['my test'] = function(browser) {
browser.resizeWindow(400, 600);
browser.foo();
browser.perform(function()
console.log('Test function returning');
});
};
这是 Nightwatch 团队的糟糕设计。我只是花了几个小时试图调试这个问题,唯一对我有用的解决方案是使用 perform()。这是荒唐的。为什么 Nightwatch 开发人员会异步地自定义命令 运行。