检查页面上是否存在记录

时间:2019-03-03 09:01:21

标签: cypress

我有一个带有几个结果面板的页面,每个面板都有自己的删除按钮,一旦用户单击删除按钮,就会弹出确认模式,询问他是否要删除该记录。

我编写了一个赛普拉斯测试来测试删除过程,测试按预期工作,弹出模式,如果用户确认删除,面板将被删除。

在测试中,我通过检查页面上是否不再存在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
  }
};

1 个答案:

答案 0 :(得分:1)

您可以将if移到cy.get之前,因此您的逻辑不再嵌套在.each

const els = cy.get(...)
if (something) {
  cy.then(() => els.should('not.contain', contactID))
} else {
  els.each(...)
}