cypress.io如何删除';n';时间,不可预测,同时重新呈现列表本身

cypress.io如何删除';n';时间,不可预测,同时重新呈现列表本身,cypress,Cypress,我有一个不可预测的行列表要删除 我只想单击每个.fa时间图标 问题在于,每次单击后,vue.js应用程序都会重新渲染其余的行 我还尝试使用.each,但在这个cas中,我得到了一个错误,因为元素(我认为是父元素)已从DOM中分离;io建议使用一个防护来防止这个错误,但我不知道这意味着什么 如何 -获取图标列表 -首先点击 -在应用程序重新加载时生存 -点击下一步 -在应用程序重新加载时生存 ... 蚀刻 ?在展示一种可能的解决方案之前,我想先提出一个建议,即测试应该是可预测的。每次都应该创建一定

我有一个不可预测的行列表要删除

我只想单击每个.fa时间图标

问题在于,每次单击后,vue.js应用程序都会重新渲染其余的行

我还尝试使用.each,但在这个cas中,我得到了一个错误,因为元素(我认为是父元素)已从DOM中分离;io建议使用一个防护来防止这个错误,但我不知道这意味着什么

如何 -获取图标列表 -首先点击 -在应用程序重新加载时生存 -点击下一步 -在应用程序重新加载时生存 ... 蚀刻


在展示一种可能的解决方案之前,我想先提出一个建议,即测试应该是可预测的。每次都应该创建一定数量的项,这样就不必像这样进行黑客攻击

您还可以在此处阅读更多关于条件测试的内容:

这就是说,也许您有一个有效的用例(也许有一些模糊测试?),那么让我们开始吧

在下面的示例中,我所做的是
(1)
设置一个渲染/删除行为,该行为与您在应用程序中描述的情况相同。实际的解决方案是:通过查询DOM并检查
长度
,找出需要删除多少项,然后将每次查询DOM的相同数量的cypress命令排队,以便获得对元素的新引用

警告:每次删除后,我都会等待元素(确切地说是它的
remove
按钮)不存在于DOM中,然后再继续。如果你的应用程序分别重新呈现其余的项目,那么在目标项目从DOM中删除后,你需要断言其他的东西,比如从DOM中删除(分离)另一个项目(不是要删除的项目)

description('test',()=>{
它('test',()=>{
// -------------------------------------------------------------------------
//(1)模拟呈现/移除逻辑,仅用于此目的
//示范。
// -------------------------------------------------------------------------
cy.window().then(win=>{
让项目=[‘一’、‘二’、‘三’];
win.remove=项目=>{
items=items.filter(\u item=>\u item!==item);
设置超时(()=>{
render();
}, 100 )
};
函数渲染(){
win.document.body.innerHTML=items.map(item=>{
返回`
${item}
去除
`;
}).加入(“”);
}
render();
});
// -------------------------------------------------------------------------
//(2)实际解决方案
// -------------------------------------------------------------------------
cy.get('.item')。然后($elems=>{
//使用Lodash调用回调N次
Cypress.uu.times($elems.length,()=>{
cy.get('.item:first')。查找('.remove')。单击()
//确保我们等待元素从DOM中实际删除
//继续之前
.should('not.exist');
});
});
});
});