Итерация массива в Cypress

Я нажимаю элемент Div в массиве, а затем повторяю каждый по одному, но когда я выхожу из первого каждого раздела, длина массива становится равной 0, и я не могу войти в цикл for.

в цикле for я хочу щелкнуть раздел в каждом div, выполнить утверждение и вернуться к предыдущему разделу.

let Array =[]
cy.get('.tag-wrapper-item').each(($pills) => {
    cy.log($pills)
    // cy.log('Success')
    Array.push($pills)
    cy.log(Array.length)

 })
cy.log(Array.length)
   for (const element of Array) {
    cy.wrap(element).click()
    cy.wrap(element).find('.--tag.tag-link.--active.tag-selector-button-link').click()
    var OneOffModel = element.text()
    cy.get('.heading-markdown').contains(OneOffModel)
    cy.go('back')
  } 
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
98
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Чтобы исправить это, вы можете обернуть свой код обратным вызовом then:

let Array =[]
cy.get('.tag-wrapper-item').each(($pills) => {
    cy.log($pills)
    // cy.log('Success')
    Array.push($pills)
    cy.log(Array.length)

 })
cy.then(() => {
   cy.log(Array.length)
   for (const element of Array) {
    cy.wrap(element).click()
    cy.wrap(element).find('.--tag.tag-link.--active.tag-selector-button-link').click()
    var OneOffModel = element.text()
    cy.get('.heading-markdown').contains(OneOffModel)
    cy.go('back')
  } 
})

привет, Михаил, спасибо, ваш ответ решил мою проблему, но у меня есть другая проблема в этом коде, когда циклы переходят во вторую итерацию, кипарис выдает мне ошибку, потому что элементы div отсоединяются от DOM.

Subtain Shah 17.11.2022 10:18
Ответ принят как подходящий

Лучшим подходом может быть подсчет .tag-wrapper-item и цикл на этом

cy.get('.tag-wrapper-item')
  .its('length')
  .then(count => {
    for (let index = 0; index < count; index++) {
      cy.get('.tag-wrapper-item').eq(index)
        .click()
      cy.get('.tag-wrapper-item').eq(index)
        .find('.--tag.tag-link.--active.tag-selector-button-link')
        .click()
      cy.get('.tag-wrapper-item').eq(index)
        .invoke('text')
        .then(OneOffModel => {
          cy.get('.heading-markdown').contains(OneOffModel)
        })
      cy.go('back')
    }
  })

Если вы присвоите псевдоним каждому элементу в цикле, Cypress попытается преодолеть ошибку отсоединения от DOM при чтении псевдонима.

cy.get('.tag-wrapper-item')
  .its('length')
  .then(count => {
    for (let index = 0; index < count; index++) {

      cy.get('.tag-wrapper-item').eq(index)
        .as('current')
        .click()

      cy.get('@current')
        .find('.--tag.tag-link.--active.tag-selector-button-link')
        .click()

      cy.get('@current')
        .invoke('text')
        .then(OneOffModel => {
          cy.get('.heading-markdown').contains(OneOffModel)
        })

      cy.go('back')
    }
  })

спасибо, парень с забавным именем, ваше второе решение сработало для меня после небольшой настройки.

Subtain Shah 17.11.2022 12:51

Другие вопросы по теме