Necesito ayuda con el siguiente bucle:
localStorage.removeItem('DDFound'); cy.get(sel).each(($el, index, $list) => { if(localStorage.getItem('DDFound')!='1') { cy.log(localStorage.getItem('DDFound')); cy.wrap($el).click().then(()=> { cy.get(table).then(elx => { if(elx.find(tableitem).length > 0) { cy.get(tableitem).click(); cy.get(lable).should('contain.text',"Item") localStorage.setItem('DDFound','1'); } }) }); } }); Me gustaría romper justo después de encontrar el elemento correcto (tableitem) y para eso, estoy configurando un almacenamiento local (no encontré ninguna otra manera) pero parece que Cypress ejecuta todos los elementos en cada ciclo en paralelo y no llega a el if(localStorage.getItem('DDFound')!='1') después de cada elemento.
Si tiene un código complejo dentro de .each() , debe envolverlo en una promesa
let found = false; cy.get(sel).each(($el, index, $list) => { if (found) return false; // early exit return new Cypress.Promise(resolve => { cy.wrap($el).click().then(() => { cy.get(table).then(elx => { if (elx.find(tableitem).length > 0) { cy.get(tableitem).click(); cy.get(label).should('contain.text',"Item") found = true; } resolve() // wait for above to complete }) }) }) })Se esperan promesas
Si su función de devolución de llamada devuelve una Promesa, se esperará antes de iterar sobre el siguiente elemento de la colección.
Puede detener el bucle .each() antes devolviendo falso en la función de devolución de llamada. En su caso, podemos devolver el valor si DDItem no es igual a uno.
localStorage.removeItem('DDFound'); cy.get(sel).each(($el, index, $list) => { if(localStorage.getItem('DDFound')!='1') { cy.log(localStorage.getItem('DDFound')); cy.wrap($el).click().then(()=> { cy.get(table).then(elx => { if(elx.find(tableitem).length > 0) { cy.get(tableitem).click(); cy.get(lable).should('contain.text',"Item") localStorage.setItem('DDFound','1'); } }) }); } return localStorage.getItem('DDFound') !== 1 });