Javascript:数组不保留值

时间:2019-02-04 19:59:23

标签: javascript cypress

在以下代码段中,

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循环中。下面是输出

Output

有人能指出我出了错吗?我正在使用cypress编写前端测试。

2 个答案:

答案 0 :(得分:1)

可能是因为您在声明let arr_rows,意味着一个块作用域。您正在尝试将其填充到匿名函数中,该函数具有自己的作用域,因此也具有自己的arr_rows

arr_rows声明var arr_rows = [],它应该可以工作。

有关更多详细信息,请参见here

答案 1 :(得分:1)

我通过使用(Return from a promise then())中的建议解决了这个问题:

创建并返回一个Promise。这样,我也可以在另一个函数中使用解析值(this.result)。

Right-to-Left

在其他函数中使用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)
    });
  });
}