Javascript: массив не сохраняет значения - PullRequest
0 голосов
/ 04 февраля 2019

В приведенном ниже фрагменте кода,

function retreive_data_from_UI() {
    let arr_rows = [];
    cy.get(constants.cssCustomerWoListViewTable).children().each(($rows, ind) => {
        arr_rows.push($rows.text());
        cy.log(ind);
        cy.log(arr_rows[ind]);
    });
    cy.wait(1000);
    for(var i = 0; i < 5; i++){
        // I tried both separately pop() and accessing by index
        cy.log(arr_rows.pop());
        // or
        cy.log(arr_rows[i]); 
    }
    return arr_rows;
}

значение для arr_rows [ind] напечатано в cy.get (). Children (). Each (() =>{}) блок, но не в цикле for, который следует за ним.Ниже вывод

Вывод

Кто-нибудь может указать, где я ошибся?Я использую кипарис для написания тестов внешнего интерфейса.

Ответы [ 2 ]

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

Я решил эту проблему, используя предложения в ( Возвращение из обещания затем () ):

Создано и возвращено обещание.Таким образом, я смог использовать разрешенное значение (this.result) и в другой функции.

function retreive_data_from_UI(){
  var result = [];
  return new Promise(function(resolve){
    cy.get(constants.cssCustomerWoListViewTable).children().each(($rows, ind) => {
      result.push($rows.text());
    }).then(function(){
      this.result = result;
      for(var i = 0; i < 5; i++){
        cy.log(this.result[i]) // content printed here
      }
      resolve(this.result)
    });
  });
} 

Использование значения this.result в другой функции

it('Test WO Sorting Ascending', () => {
    cy.get(constants.btnLmsWOSortAsc)
    .click()
    .then(function() {
      retreive_data_from_UI()
      .then(function(result){
        for(var i = 0; i < 5; i++){
          cy.log(result[i]); // content printed properly here too
        }
      });
    });
}); 
0 голосов
/ 04 февраля 2019

Это может быть потому, что вы объявляете let arr_rows, что означает область видимости блока.Вы пытаетесь заполнить его анонимной функцией, которая имеет собственную область действия и, следовательно, собственную arr_rows.

Объявите arr_rows с помощью var arr_rows = [], и она должна работать.

См. здесь для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...