NightwatchJS не передает переменную

#javascript #scope #nightwatch.js

Вопрос:

Я разделил переменные для целей определения области, я могу заполнить все переменные соответствующими элементами DOM из url1, но когда я пытаюсь передать их в поля url2, они устанавливаются undefined так, как если бы переменная никогда не была установлена. И все же консоль.журнал работает… Я передал также функцию .setValue('#address-serviceability-form', '', '', function(e){ // set the value here}) , но все равно не определился… Является ли эта проблема с областью видимости переменной?

 describe('Ecosia.org Demo', function() {
  var address ='';
  var streetNumber = '';
  var city = '';
  var stateAndZip = '';
  var state = ''
  var zip = '';

before(browser => browser.url('url1.com'));

test('Extract random address', function (browser) {

browser
  .getText('.rand_large li:first-child', function(result) {
    address = result.value.split("n");
    streetNumber = address[0];
    console.log('streetNumber', streetNumber) //this works and logs correctly
    city = address[1].split(",")[0];
    stateAndZip = address[1].split(",")[1];
    state = stateAndZip.split(" ")[1];
    zip = stateAndZip.split(" ")[2];

  })
  .url('url2.com')
  .waitForElementVisible('form')
  .setValue('#address-serviceability-form', streetNumber) // this is set to undefined
  .pause(5000)
 });

 after(browser => browser.end());
});
 

Ответ №1:

Мне кажется, что это проблема с вашим пониманием обратных вызовов NodeJS.

Вы должны быть в состоянии исправить это с помощью async/await. Ваш код не ожидает разрешения обратного вызова, и значение не назначается перед использованием в функции установить значение. вы могли бы попробовать что-то вроде приведенного ниже.

 test('Extract random address', async function(browser) {

  await browser
    .getText('.rand_large li:first-child', function(result) {
      address = result.value.split("n");
      streetNumber = address[0];
      console.log('streetNumber', streetNumber) //this works and logs correctly
      city = address[1].split(",")[0];
      stateAndZip = address[1].split(",")[1];
      state = stateAndZip.split(" ")[1];
      zip = stateAndZip.split(" ")[2];

    })
  browser.url('url2.com')
    .waitForElementVisible('form')
    .setValue('#address-serviceability-form', streetNumber) // this is set to undefined
    .pause(5000)
});