Цепочка команд Nightwatch JS не работает в асинхронных функциях

#javascript #nightwatch.js #nightwatch

#javascript #nightwatch.js #ночной дозор

Вопрос:

Я пытаюсь вызвать команду объекта асинхронной страницы в моем тесте Nightwatch, но тест не выполняется. Как вы можете видеть из примера кода, я пытаюсь объединить несколько команд .pause вместе, но механизм цепочки не работает. Если я удалю ключевые слова ‘async’ и закомментирую код ‘await’, тогда команды цепочки будут работать. Таким образом, кажется, что использование ‘async’ нарушает цепочку команд. Есть ли решение для этого?

Тест Nightwatch …

 module.exports = {
    'Test Commmand Queue': async function (browser) {
        browser.page.clients.sandbox.simpleTestPageObject().testCommandQueue() // async function
    }
}
 

объектный файл страницы …

 module.exports = {
    elements: {},
    commands: [{
        testCommandQueue: async function () {
            this
                .pause(1)
                .pause(1)

            console.log("0001")
            await this.pause(3000, function () {
                console.log("0002")
            })
            console.log("0003")
        }
    }]
}
 

вывод …

 Running:  Test Commmand Queue
_________________________________________________

TEST FAILURE: 1 error during execution; 0 tests failed, 0 passed (4.939s)

  TypeError: this.pause(...).pause is not a function
 

Nightwatch v 1.5.0

Ответ №1:

Как бы ни было привлекательно использовать команды цепочки, я предлагаю использовать this.api или browser .

Это звучит как рутинная работа, но в долгосрочной перспективе вы столкнетесь с меньшим количеством проблем с методами и пользовательскими командами.

Например, я не могу использовать команды цепочки, если мне нужно использовать expect by Mocha , поэтому я просто использую browser