Два цикла for в одной функции не сохранят массив после выхода из цикла

0

У меня есть два массива, которые мне нужно сравнить в тесте. Я тестирую фильтр, он читает в массиве чисел и сохраняет в spareArray. Затем я нажимаю кнопку фильтра, которая также является элементом, в котором указан список int, style. Я снова прочитал в списке и сохранил его во втором массиве spareIntArray. После readin я отправляю массивы по двум методам: один раз анализирует строку для float, а второй получает "-", которые находятся в моих списках, которые я не хочу сравнивать. Однако после запуска второго для чтения цикла в spareIntArray массив устанавливается как неопределенное. Я тестировал, что массив заполнен элементами, делая журнал, и это похоже. Я совершенно смущен тем, что здесь происходит.

/**
 * Created by nphillips on 8/11/2015.
 */

var helper = require('./../pages/helper-page.js');
var capacityPage = module.exports = {

  variables: {
    //the theaterStyle element list
    theaterStyle: element.all(by.css("[data-style='theater']")),
  },

  readsInTheater: function() {
    capacityPage.readsIn(capacityPage.variables.theaterStyle);
  },

  removesDashes: function(style, array) {
    while (array.indexOf('-') !== -1) {
      array.splice(array.indexOf('-'), 1);
    };
    console.log(array + "count ");
    return array;
  },

  readsIn: function(style) {
    var spareArray = [];
    var spareIntArray = [];
    style.count().then(function(count) {
      console.log(count);
      j = 0;
      for (var i = 0; i < count; i++) {
        //scrolls down the list element by element
        browser.executeScript("arguments[0].scrollIntoView();", style.get(i).getWebElement());
        style.get(i).getText().then(function(text) {
          spareArray[j] = text;
          console.log(text, spareArray[j], j);
          expect(text).toEqual(spareArray[j++]);
        });
      }
    }).then(function() {
      // style.click()
      browser.executeScript("arguments[0].scrollIntoView();", style.get(0).getWebElement());
      style.count().then(function(count) {
        console.log(count);
        for (var i = 0; i < count; i++) {
          //scrolls down the list element by element
          browser.executeScript("arguments[0].scrollIntoView();", style.get(i).getWebElement());
          style.get(i).getText().then(function(text) {
            spareIntArray[j] = text;
            console.log(text, spareIntArray[j], j + "frawer");
            expect(text).toEqual(spareIntArray[j++]);
          });
        };

      });
      spareArray = capacityPage.stringToFloatArray(spareArray);
      spareIntArray = capacityPage.stringToFloatArray(spareIntArray);
      capacityPage.removesDashes(style, spareArray);
      capacityPage.removesDashes(style, spareIntArray);
      expect(spareArray).toEqual(spareIntArray);
    });
  },

  stringToFloatArray: function(array) {
    function int_arr(a, b) {
      return parseFloat(a) - parseFloat(b);
    }

    array = array.sort(int_arr);
    console.log(array + "float");
    return array;
  },


};
Теги:
for-loop
selenium-webdriver
protractor

1 ответ

1

Исправлено ли значение параметра reserveIntArray?. Это может быть вызвано тем, что вы вызываете stringToFloatArray на запасном массиве перед его заполнением. Я думаю, что ваш чек должен быть внутри ответного обещания. Однако я немного обеспокоен тем, почему вы используете асинхронный поиск данных в документе. Есть ли способ сделать это синхронно? Что-то вроде

style.count().then(function(count) {
  console.log(count);

  for (var i = 0; i < count; i++) {
    //scrolls down the list element by element
    browser.executeScript("arguments[0].scrollIntoView();", style.get(i).getWebElement());

    var text = style.get(i).getText();
    spareArray.push(text);
    console.log(text, spareArray[i], i);
    expect(text).toEqual(spareArray[i]);
    });
  }
}).then(function() {
  // style.click()
  browser.executeScript("arguments[0].scrollIntoView();", style.get(0).getWebElement());
  style.count().then(function(count) {
    console.log(count);
    for (var i = 0; i < count; i++) {
      //scrolls down the list element by element
      browser.executeScript("arguments[0].scrollIntoView();", style.get(i).getWebElement());

      var text = style.get(i);
      spareIntArray.push(text);
      console.log(text, spareIntArray[i], i + "frawer");
      expect(text).toEqual(spareIntArray[i]);
    };

  spareArray = capacityPage.stringToFloatArray(spareArray);
  spareIntArray = capacityPage.stringToFloatArray(spareIntArray);
  capacityPage.removesDashes(style, spareArray);
  capacityPage.removesDashes(style, spareIntArray);
  expect(spareArray).toEqual(spareIntArray);
  });
});

},

  • 0
    Я только что попробовал код, который вы предоставили, и получил какой-то сумасшедший результат, и процесс стал нехваткой памяти. Это тестирование автоматизации на неугловой странице, я не уверен, что это ответит на ваш вопрос. Массив spareIntArray отображается как неопределенный после выхода из цикла for. Я не очень хорош в обещаниях, я все еще пытаюсь поймать суть этого. Из того, что я вижу, обещание разрешается в цикле for, а не через массив.
  • 0
    Извините, я не тестировал код, имейте в виду, что это просто код psuedo, так как я изменил style.get (i) .getText (), чтобы он был сикронным. Сначала попробуйте просто сдвинуть свои чеки внутри обещания. Просто имейте в виду, что обещание разрешается в неопределенное время, поэтому, если ваш код начинает анализировать результат обещания до его разрешения, вы можете получить неожиданное поведение.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню