Tengo algunos lugares en los que necesito hacer clic en varios elementos, pero no quiero que se repita. Siento que la respuesta está justo frente a mí, pero no puedo encontrar la solución correcta.
Aquí hay un ejemplo de código que en este momento está atascado en un bucle infinito:
for(let n = 1; n <= 19; n++){ cy.get('li.active > .nav > :nth-child(n) > a').click({multiple: true}) cy.wait(400) }Tengo 19 elementos, todos iguales, solo numerados del 1 al 19 y solo quiero que la prueba haga clic en ellos, espere a que muestre la página y luego haga clic en el siguiente.
Responder
cy.get('#side-menu > :nth-child(2) > a').click() cy.wait(400) cy.get('li.active > .nav').each(($ele) => { cy.wrap($ele).find('a').click({multiple:true}) }) También me ocupé de mi otro bucle for que duró para siempre y nunca se detuvo a menos que se detuviera manualmente como este problema original reemplazándolo con each() también.
cy.get('#side-menu > li > a').each(($ele) => { cy.wrap($ele).click({multiple:true}) }) ```Puede usar el bucle each() para iterar a través de sus elementos y hacer clic en los botones uno por uno:
cy.get('li.active > .nav').each(($ele) = > { cy.wrap($ele).find('a').click() })Si su página se actualiza con cada clic, no puede usar Cypress .each() porque obtendrá el error "separado del DOM".
Pruebe una función recursiva
it('tests the nav buttons', () => { function clickNav(buttonNum) { if (buttonNum === 20) return // finished cy.get('li.active > .nav > :nth-child(n) > a').click() cy.wait(400) clickNav(++buttonNum) // next } clickNav(1) })Pero algo más está sucediendo, técnicamente su ciclo también debería funcionar.
gracias por las soluciones - Alpan funcionó como tal:
cy.get('#side-menu > :nth-child(2) > a').click() cy.wait(400) cy.get('li.active > .nav').each(($ele) => { cy.wrap($ele).find('a').click({multiple:true}) }) Olvidé que tenía que abrir el menú desplegable a través del clic del enésimo niño y luego agregué {multiple:true} dentro del clic en each()