Как обработать (cy.get()) динамический элемент, если он существует, сделать A, если не сделать B

#cypress

#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:

В документах Cypress есть руководство по условному тестированию с примером того, как запускать тесты на основе существования элемента.

Я переписал код в вашем вопросе, чтобы использовать способ, которым это делается в примере из документов. Это должно сработать:

 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...
  }
})