Я нажимаю элемент 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')
}
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')
}
})
Лучшим подходом может быть подсчет .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')
}
})
спасибо, парень с забавным именем, ваше второе решение сработало для меня после небольшой настройки.
привет, Михаил, спасибо, ваш ответ решил мою проблему, но у меня есть другая проблема в этом коде, когда циклы переходят во вторую итерацию, кипарис выдает мне ошибку, потому что элементы div отсоединяются от DOM.