If the cy.each callback uses Cypress commands and we want to stop the iteration based on the output of those commands, we need to use cy.then + a local closure variable to stop queueing up Cypress commands. The final solution from https://github.com/bahmutov/better-cy... is this:
cy.visit('index.html')
let shouldStop = false
cy.get('tbody button').each(function ($button, k) {
cy.then(function () {
if (shouldStop) {
return
}
console.log('button', k)
cy.wrap($button)
.click()
.parent()
.parent()
.contains('td', /\d/)
.invoke('text')
.then(Number)
.then(function (n) {
if (n === 7) {
shouldStop = true
}
})
})
})
Tip: to visualize the Cypress command chain this video uses https://github.com/bahmutov/cypress-c... plugin and read the blog post https://glebbahmutov.com/blog/better-...