在以下代码段中,
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循环中。下面是输出
有人能指出我出了错吗?我正在使用cypress编写前端测试。
答案 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)
});
});
}