如果存在,如何处理(cy.get())动态元素

时间:2019-03-27 14:56:17

标签: cypress

我必须处理对话框元素,如果存在的元素做某事而不执行其他操作,但是cy.get('...')CypressError:重试超时,导致有时不存在该元素。如何处理

我尝试了cy.get('...')。find('...'),cy.get('...')。then()和cy.get('...') .should('to.exist')不起作用。

cy.get('div.ui-dialog-content.ui-widget-content > p-messages > div > ul > li:nth-child(2) > span')
        .should('to.exist').then(() => {
            // only do if found element 
            cy.get('div.ui-dialog-titlebar.ui-widget-header.ui-helper-clearfix > a > span')
                .click()
        })

// do another 

期望:如果出现对话框,则将其关闭并继续测试,如果对话框未显示,则只是正常测试

1 个答案:

答案 0 :(得分:1)

赛普拉斯文档中包含有关example of how to run your tests based off element existence的条件测试的指南。

我已经重写了您问题中的代码,以使用文档中的示例进行操作的方式。这应该起作用:

cy.get('body').then(($body) => {
  if ($body.find('div.ui-dialog-content.ui-widget-content > p-messages > div > ul > li:nth-child(2) > span').length) {
    // element found, do something here...
    cy.get('div.ui-dialog-titlebar.ui-widget-header.ui-helper-clearfix > a > span')
      .click()
  } else {
    // do something else...
  }
})