Код Javascript не выполняется в Nightwatch - PullRequest
0 голосов
/ 18 сентября 2018

У меня проблема с использованием .execute в Nightwatch.

Когда я запускаю этот код в DOM, он работает отлично.Однако, когда я обертываю его в команду выполнения в Nightwatch, он даже не попадает в первый щелчок.Так что, вероятно, команда execute никогда не выполняется.

Что я делаю не так?

Заранее спасибо

LoopThroughQuestions: function() {
        this.waitForElementVisible('.next-button', constants.timeout.medium);                         
         this.api.execute(function() {
            var checkQuestion = function() {
                var nextButton = document.querySelector('.next-button');
                var answers = document.querySelectorAll('.flex-row.key');
                answers[0].click();
                nextButton.click();
                setTimeout(function () {
                    if (document.querySelector('.next-button')) {
                         checkQuestion();
                    } else {
                        console.log("Exit");
                    }
                }, 2000, "Running")
            }
        }, [])   ;

        return this;
    },

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

для людей, которые испытывают ту же проблему;Я исправил это с помощью executeAsync, скрипт выполнялся, но ожидание элемента было недостаточным

 TestLoop: function() {
        this.waitForElementVisible('.next-button', constants.timeout.medium);
        this.api.executeAsync(function() {
            let checkQuestion = function() {
                let nextButton = document.querySelectorAll('.next-button');
                let answers = document.getElementsByClassName('flex-row');
                let blueButton = document.querySelectorAll('.blue-inverse-button').length;
                answers[0].click();
                nextButton[0].click();
                setTimeout(() => {
                    if (document.querySelectorAll('.next-button')) {
                        console.log('Answering another question!');
                        checkQuestion();
                    }
                    if (blueButton === 1){
                        blueButton[0].click()
                        checkQuestion()
                    }
                    else {
                        console.log("Exiting?");
                    }
                }, 2000);
            };

            // Initiating the check question function
            return checkQuestion();

        },[], function(){
            console.log('Done?')
        });
    },
0 голосов
/ 19 сентября 2018

Вы определили переменную checkQuestion как функцию, но никогда не вызываете эту функцию.

Попробуйте что-то вроде этого:

LoopThroughQuestions: function() {
        this.waitForElementVisible('.next-button', constants.timeout.medium);                         
         this.api.execute(function() {
            var checkQuestion = function() {
                var nextButton = document.querySelector('.next-button');
                var answers = document.querySelectorAll('.flex-row.key');
                answers[0].click();
                nextButton.click();
                setTimeout(function () {
                    if (document.querySelector('.next-button')) {
                         checkQuestion();
                    } else {
                        console.log("Exit");
                    }
                }, 2000, "Running")
                checkQuestion();
            }
        }, [])   ;

        return this;
    },

Напомним, что вы также можете использовать самозапускающуюся анонимную функцию.

(function () {
  // body of the function
}());
...