Пока цикл в nightwatch.js - PullRequest
       22

Пока цикл в nightwatch.js

0 голосов
/ 24 января 2019

Я пытаюсь запустить следующий код ( количество шагов ) несколько раз (например, 10 раз), чтобы:

  1. пользователь переходит на подробный URL
  2. нажата случайная кнопка в соответствии с заданными значениями var
  3. это повторяется 10 раз
  4. тест завершен

Я работаю со следующим NightwatchJS код:

var randomEmail = faker.internet.email()
var competitionReference = ['drawing_21715','drawing_21704']
var randomCompetitionReference = competitionReference[Math.floor(Math.random()*competitionReference.length)]

module.exports = { 
  'navigate to homepage': function (browser) {        
    browser
      .url('http://clickswin-stage.bellamagazine.co.uk/') 
  },

  'select a competition': function (browser) {
    browser
      .useXpath()
        .click('//*[@id="' + randomCompetitionReference + '"]/div/div[1]')
  },
};

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

Например, если бы я использовал:

var i = 0
while ( i < 10) {

и т. Д., Где мне нужно поместить этот код цикла в мой код выше?

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 26 января 2019

Одним из решений может быть использование рекурсивной функции.Вот пример того, как это может выглядеть:

var randomEmail = faker.internet.email()
var competitionReference = ['drawing_21715', 'drawing_21704']
// var randomCompetitionReference = competitionReference[Math.floor(Math.random() * competitionReference.length)]
var randomCompetitionReference = function() {return competitionReference[Math.floor(Math.random() * competitionReference.length)]}

module.exports = { 
  'navigate to homepage': function (browser) {        
    browser
      .url('http://clickswin-stage.bellamagazine.co.uk/') 
  },

  'select a competition': function (browser, recursions) { 
    // Put the main code into a separat recursive function.
    const doClick = function(times) {
      if (times > 0) { // This is the equivalent to "while ( i < 10) {"
        return browser
          .useXpath()
          .click('//*[@id="' + randomCompetitionReference() + '"]/div/div[1]')
          .useCss()  
          .perform(()=>{ // perform() makes sure, that one function call is only executed after the other has fineshed (not concorrent)
            return doClick(times -1)
          })
      } else {
        return browser
      }
    }
    doClick(recursions)
  }
}

В вашем случае вы бы вызвали функцию «выбрать соревнование» с 10 в качестве параметра «рекурсии».

Обратите внимание, чтоЯ изменил "randomCompetitionReference" на функцию, поэтому при каждом вызове она генерирует другое значение.В противном случае он получит одно случайное значение при его определении и будет использовать это одно и то же значение для каждого щелчка ().

...