gpt4 book ai didi

javascript - 我如何使用 cypress 等待列表中的每个元素更新为特定文本

转载 作者:行者123 更新时间:2023-12-03 00:07:49 26 4
gpt4 key购买 nike

假设我有一个包含不同颜色的项目的列表。如果我添加参数,该列表可以更新为仅列出蓝色项目。我如何验证每一项是否正确?

cy.addParameter('blue'); //Will send graphQL query to fetch the correct items. 

cy.get('data li').each((item)=> {
cy.wrap(item).should('have.text', ' blue ');
});

这将失败,因为在我可以检查每个项目之前列表中的项目尚未更新。可以等待请求完成,但由于查询在第一次运行后保存,因此“检查”第二次将不起作用。

最佳答案

您必须编写一个递归 Promise 函数并自行检查颜色文本,尝试以下操作

function checkColor(selector, color, maxWait, alreadyWaited = 0) {
const waitTime = 500;
// cy.get returns a thenebale
return cy.get(selector).each((item)=> {
// it checks the text right now, without unnecessary waitings
if(!item.text() === color) {
return false;
}
return true;
}).then(result => {
if(result) {
// only when the condition passes it returns a resolving promise
return Promise.resolve(true);
}
// waits for a fixed milliseconds amount
cy.wait(waitTime);
alreadyWaited++;
// the promise will be resolved with false if the wait last too much
if(waitTime * alreadyWaited > maxWait) {
return Promise.reject(new Error('Awaiting timeout'))
}
// returns the same function recursively, the next `.then()` will be the checkColor function itself
return checkColor(selector, color, maxWait, alreadyWaited);
});
}

// then, in your test...
cy.addParameter('blue'); //Will send graphQL query to fetch the correct items.
checkColor('data li', 'blue', 10000).then(result => {
cy.get('data li').each((item)=> {
cy.wrap(item).should('have.text', ' blue ');
});
// or
expect(result).to.be(true);
});

我尝试尽可能多地评论代码,重构我为公认的 similar question 开发的代码。 .

如果您需要更多帮助,请告诉我😊

更新

我们( meTommaso )编写了一个插件来帮助您进行此类检查,其名称为 cypress-wait-until .

请感谢Open Source Saturday为此,我们在其中一个周六开发了它 😊

关于javascript - 我如何使用 cypress 等待列表中的每个元素更新为特定文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54883861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com