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 开发人员会异步地自定义命令 运行。