cypress - 将元素文本存储在数组中并稍后访问它
问题描述
我正在尝试在 for 循环中获取多个元素的元素文本,并希望将其存储在数组中以便以后使用。下面是我正在使用的代码。我需要访问该数组以供以后使用,以便将此数组与另一个数组进行比较。请让我知道如何在柏树中实现这一点。
it('My test', () => {
let arrayOfElementText = [];
cy.get('#divEl').each(($el) => {
cy.wrap($el).click();
cy.get('#input').invoke('val')
.then(val => {
arrayOfElementText.push(val);
console.log(arrayOfElementText);//Able to access
});
console.log(arrayOfElementText); **//Not able to access**
})
let anotherArray = [];
cy.get('#divEl1').each(($el) => {
cy.get('#input1').invoke('val')
.then(val => {
anotherArray.push(val);
console.log(anotherArray);//Able to access
});
console.log(anotherArray);**//Not able to access**
})
// code to compare two arrays
//both arrays are not accessible here
});
解决方案
您需要使用.then()
来访问这些值,因为它们是从异步命令派生的。
let arrayOfElementText = [];
cy.get('#divEl').each(($el) => {
cy.wrap($el).click();
cy.get('#input').invoke('val')
.then(val => {
arrayOfElementText.push(val);
})
.then(() => {
console.log(arrayOfElementText); // array is available at every step of .each()
})
}).then(() => {
console.log(arrayOfElementText); // full array is available here
cy.wrap(arrayOfElementText).as('myArray1') // alias it for later
})
/*
Next array, same as above
*/
cy.get('@myArray1').then(myArray1 => {
cy.get('@myArray2').then(myArray2 => {
// compare
})
})
注意 cy.get('#input')
总是会得到相同的输入
推荐阅读
- java - Maven中的项目依赖
- c# - 在 AZURE 服务器上托管的站点的文件下载失败
- javascript - 在 TypeScript 中导出多个变量以赋予 CommonJS 等效项
- javascript - 如何将动态值传递给jquery验证函数
- java - 将用户发送到应用程序。如果 App 不存在发送到 playstore
- json - Oracle 12c PL/JSON 在 5000 个字符处截断字符串
- unit-testing - 带有 test-utils 的 vue.js 测试单元未通过
- ruby-on-rails - 在 Rails 中默认使用 postgres
- r - r中的行随机抽样
- java - 使用扫描仪进行嵌套方法测试