Я пытаюсь провести дымовое тестирование, щелкнув ссылки в списке. После первого посещения тест останавливается со следующей ошибкой.
CypressError: cy.click() failed because this element is detached from the DOM.
<a href = "/link2">...</a>
Cypress requires elements be attached in the DOM to interact with them.
The previous command that ran was:
> cy.wrap()
Что мне делать, чтобы удерживать элемент в цикле?
it('Click each link in the list', () => {
cy.get('li a').each(($el, index, $list) => {
cy.wrap($el).click();
cy.go(-1);
})
})
Цель теста — проверить, все ли страницы в списке появляются без ошибок 404. Следуя html-коду
<ul>
<li><a href = "/link1">Link 1</a></li>
<li><a href = "/link2">Link 2</a></li>
<li><a href = "/link3">Link 3</a></li>
</ul>





Когда вы вызываете cy.get(), вы сохраняете ссылки, а затем уходите, щелкнув ссылку, поэтому ссылки на эти элементы больше недействительны. Вы можете составить список идентификаторов для этих элементов:
const listOfIds = ['#first_id', '#second_id']
listOfIds.forEach(id => cy.get(id).click())
или если вы хотите создать свой список динамически, вы также можете сделать это:
function getIds(){
let ids = []
return new Cypress.Promise(resolve => {
cy.get('.your-selector')
.each($el =>
cy.wrap($el)
.invoke('attr', 'id')
.then(id => ids.push(id))
)
.then(() => resolve(ids))
})
}
После этого вызов getIds().then(ids => ids.forEach(...)) в основном такой же, как и выше.
Спасибо. Как раз то, что я искал.