Nightwatch Как использовать локальную переменную из одной функции в другую - PullRequest
0 голосов
/ 17 февраля 2019

Я хочу использовать передачу локальной переменной в другую функцию или сравнение с любой переменной.Пример:

browser
    .waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, function () {
      browser
      .pause(500)
      .getText("//div[@class='col-xs-7 alignR uppercase']//strong", function(result){
        console.log('++++++++++++++',result.value);
        let numb1 = result.value;
        numb = numb1.match(/\d/g);
          numb = numb1.join("");
          console.log("value=", numb1);
          return numb1;
  })
    })

.element('xpath', "(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (present) {
  console.log(present);
  if (present.status == 0) {
    //arrange 
    browser
    .pause(500)
    .getText("(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (result) {
      console.log("string", result.value);
      let numb = result.value;
      numb = numb.match(/\d/g);
      numb = numb.join("");
      console.log("value=", numb);
      return numb;
      })


  }

})

Я хочу сравнить numb / numb1 или получить их обоих.

1 Ответ

0 голосов
/ 18 февраля 2019

Что ж, если вы хотите сохранить свою тестовую структуру как есть ( довольно подозрительно! ), то почему бы вам не объявить некоторые глобальные переменные тестового файла?

let numb, numb1;

browser
  .waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, function () {
    browser.pause(500)
      .getText("//div[@class='col-xs-7 alignR uppercase']//strong", function(result) {

        numb1 = result.value;
        // > do more stuff here if necessary <
      });
    })
  .element('xpath', "(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (present) {
    console.log(present);

    if (present.status == 0) {
      browser.pause(500)
        .getText("(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (result) {

        numb = result.value;
        console.log(`numb & numb1 values: ${numb} & ${numb1}`);
        // > do more stuff with num & numb1 if necessary <
      });
    }
  });

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

Учитывая текущую настройку, давайте рассмотримдобавив следующую пользовательскую команду для извлечения num1:

❒ getNumb1.js (должен находиться в test/custom_commands/):

exports.command = function(callback) {
  this.perform((done) => {
    this.api.waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, () => {
      this.api.pause(500);
      this.api.getText("//div[@class='col-xs-7 alignR uppercase']//strong", (result) => {
        let numb1 = result.value;
        // > do some other stuff here if necessary <
        callback(numb1);
      });
    });
  });
};

Аналогичным образом добавьте второй файл пользовательских команд ( getNumb.js ), который будет возвращать значение numb. Затем , используйте два в вашем тестовом файле и выполните манипулирование данными или проверку данных (утверждения) , как вам угодно:

let numb = browser.getNumb();
let numb1 = browser.getNumb1();

// > do something with numb & numb1 here <

! Примечание: Приведенные выше примеры являются чисто дидактическими! Я не советую создавать custom_commands, содержащую тестовую логику.Только универсальные и / или служебные методы (например: closeGDPR , addCookie , getHttpCode и т. Д.) должен находиться в папке custom_commands.

Таким образом, в текущей настройке было бы лучше, если бы вы добавили такие команды, как getNumb & getNumb1 в разделе команд вашего объекта страницы.

...