Boo*_*oon 5 javascript arrays each async-await cypress
我正在调用一个函数populateArray,该函数使用函数选取页面上的元素children()。我想将属性值存储到 usingeach()函数中。这就是我正在做的事情
static populateArray(){
let arr = []
cy.xpath(NODE_PREVIEW_PANEL).children(NODE_TYPE)
.each((element, index, list) => arr.push(cy.wrap(element).invoke('attr', 'data-testid')))
}
Run Code Online (Sandbox Code Playgroud)
问题是当我通过将其分配给变量来调用该函数时
actualArray = ArticlePage.populateArray()
它不等待底层的each()函数完全完成。它只是选择部分值并继续。我想只有在完全解决actualArray之后才有值。populateArray
小智 4
使用怎么样Cypress.Promise?来自文档
Cypress 具有 Promise 意识,因此如果您从 .then() 等命令内部返回 Promise,Cypress将不会继续,直到这些 Promise 解决
const populateArray = () => {
return new Cypress.Promise((resolve, reject) => {
let arr = []
cy.xpath('//ul')
.children('li')
.each(element => arr.push(element.attr('data-testid'))) // NOTE different push
.then(() => {
return resolve(arr)
})
})
}
Run Code Online (Sandbox Code Playgroud)
使用await 调用(测试必须是异步的),
it('gets the array', async () => {
const actualArray = await ArticlePage.populateArray();
expect(actualArray).to.deep.equal(['1', '2', '3']); // whatever is in 'data-testid'
})
Run Code Online (Sandbox Code Playgroud)