簡體   English   中英

Nightwatch中未執行Javascript代碼

[英]Javascript code not being executed in Nightwatch

我在Nightwatch中使用.execute有問題。

當我在DOM中運行此代碼時,它可以完美運行。 但是,當我將其包裝在Nightwatch中的execute命令中時,它甚至沒有達到第一次單擊的效果。 因此,可能永遠不會執行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;
    },

您已經將變量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
}());

對於遇到相同問題的人; 我用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?')
        });
    },

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM