Как получить все элементы, пока в кипарисе не останется ни одного элемента - PullRequest
0 голосов
/ 06 августа 2020

A есть команда в моем проекте Cypress, в которой предполагается удалить все реестры определенного объекта (файлов) из учетной записи пользователя, и она запускается перед каждым тестом.

Это основной шаг выполняется следующим образом :

  • Ожидает завершения страницы sh загрузка
  • Щелкните каждую кнопку удаления.
  • Появится модальное окно с текстом.
  • Скопируйте в него удаляемый текст.
  • Вставьте в поле ввода.
  • Нажмите кнопку удаления.
  • Запросите в DOM текст, который появляется только тогда, когда все записи удалены.
  // Await loading
  cy.contains('Carregando...').should('not.be.visible')

  // Find all delete buttons by its svg path
  cy.get(
    `[d='M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z']`,
  )
    .parent()
    .parent()
    .parent()
    .each((delete_button, index, list) => {
      cy.wrap(delete_button).click({ force: true })
      // Fills in modal using the correct deletion phrase.
      cy.contains(/^Escreva "(.*)" para confirmar/).then(el => {
        const reg = RegExp(/^Escreva "(.*)" para confirmar/)
        const confirmation = reg.exec(el[0].innerText)[1]

        cy.get(`[placeholder='${confirmation}']`).type(`${confirmation}{enter}`)
      })
      cy.contains('Carregando...', { timeout: 60000 }).should('not.be.visible')
    })

  // Asserts that table section is all clear
  cy.get('span').should(
    'contains.text',
    'Ao inserir uma tabela no sistema você poderá criar fluxos e treinar seus modelos a partir da sua base de dados.',
  )

В первом тесте, поскольку в проекте есть некоторые записи, эти команды проходят нормально, но в следующем тесте он завершится ошибкой, потому что команда get не находит никаких svg в качестве ссылки чтобы найти кнопку на экране.

Как я могу изменить эту команду, чтобы она могла работать в обоих случаях, когда :

  • Удаляются все существующие записи на экран.
  • Все записи уже удалены, должно пройти s тоже.

1 Ответ

0 голосов
/ 07 августа 2020

Похоже, вам нужно проверить наличие элемента сначала?

cy.get('body').then(($body) => {
  if ($body.find('[d=...]').length) {
    // svg was found, find the buttons
    cy.get('[d=...]')
    ...the rest of your code...
  }

}

...