我们有以下情况
iterate over name elements in the page
if(name.text() == expName)
{
name.click()
exit from if loop
}
else
{
createName()
}
我如何在赛普拉斯中实现这一点,因为返回false不会从if循环中退出。 这是我尝试过的代码
export function addProtocol(protocolName, protocolStatus) {
let flag = "false";
subject.view({ name: "ProtocolsExplorerList" }).as('currentView');
cy.get('@currentView').find('td textarea').each($el => {
cy.wrap($el).invoke('val').then($value => {
console.log("valueee:" + $value);
if ($value == protocolName) {
cy.get($el).click();
flag = "true";
return false;
}
})
})
if (flag == "false") {
subject.button({ class: "New" }).click();
subject.field("Name").type(protocolName);
subject.field("Status").setCaption(protocolStatus);
save();
cy.contains(protocolName).click();
}
}
有什么建议吗? 谢谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
问题是您不会从each
的{{1}}回调中返回。您使用false
从then
回调返回。 false
回调通常异步运行,这意味着回调在then
完成迭代后执行。
我对cypress不熟悉,但是假设他们在其收藏夹上实现了iterator protocol,则可以使用:
each
您必须将包装功能设为const textareas = cy.get('@currentView').find('td textarea');
for (const $el of textareas) {
const $value = await cy.wrap($el).invoke('val');
console.log("valueee:" + $value);
if ($value == protocolName) {
cy.get($el).click();
flag = "true";
break;
}
}
,才能使用async function
。