我有一个带有几个结果面板的页面,每个面板都有自己的删除按钮,一旦用户单击删除按钮,就会弹出确认模式,询问他是否要删除该记录。
我编写了一个赛普拉斯测试来测试删除过程,测试按预期工作,弹出模式,如果用户确认删除,面板将被删除。
在测试中,我通过检查页面上是否不再存在id
来确保删除了正确的面板。
const deleteResult = action => {
cy.get('div[data-test="Results"]').should('be.visible');
let contactID;
cy.get('div[data-test="Results"]')
.first()
.within(() => {
cy.get('p[data-test="Contact ID"]').then($match => {
contactID= $match.html();
cy.get('button[data-test="Delete Contact"]')
.click()
.get('div[data-test="Delete Record Modal"]')
.should('be.visible')
.get(`button[data-test="${action}"]`)
.click();
});
});
cy.get('p[data-test="Contact ID"]').each($match => {
cy.wait(2000);
if (action === 'Confirm Deletion') {
cy.wrap($match)
.invoke('text')
.should('not.eq', contactID);
} else {
cy.wrap($match)
.invoke('text')
.should('eq', contactID);
});
};
现在,我正在尝试编写另一个选项的测试-取消删除的用户,我需要检查给定的contactID
是否在页面上存在,如何我能做到吗?
上面的代码不正确,它期望 all 面板具有给定的contactID
。
编辑:
const deleteResult = action => {
cy.get('div[data-test="Results"]').should('be.visible');
let contactID;
cy.get('div[data-test="Results"]')
.first()
.within(() => {
cy.get('p[data-test="Contact ID"]').then($match => {
contactID= $match.text();
cy.get('button[data-test="Delete Contact"]')
.click()
.get('div[data-test="Delete Record Modal"]')
.should('be.visible')
.get(`button[data-test="${action}"]`)
.click();
});
});
cy.wait(2000);
const els = cy.get('p[data-test="Contact ID"]');
if (action === 'Confirm Deletion') {
els.each($match => {
cy.wrap($match)
.invoke('text')
.should('not.eq', contactID); //contactID is the actual ids
});
} else {
els.should('contain', contactID); //contactID is undefined
}
};
答案 0 :(得分:1)
您可以将if
移到cy.get
之前,因此您的逻辑不再嵌套在.each
内
const els = cy.get(...)
if (something) {
cy.then(() => els.should('not.contain', contactID))
} else {
els.each(...)
}