Tengo una lista de elementos con los siguientes números; en realidad, es un selector de fechas:
[26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,........27,28,29,30,31 ,1,2,3,4] //días del mes
Necesito seleccionar dos fechas como 6 y 27 como rango de fechas. El problema es que hay números duplicados en la lista y cuando comienza la iteración, los primeros 27 seleccionados, no el segundo. Arruina mi prueba porque la primera fecha 27 es del mes anterior. El mes actual comienza a las 1, por lo que debo seleccionar la fecha posterior al 1.
//Comportamiento actual: Mi prueba hace clic en 6 y en la nueva iteración, hace clic en los primeros 27.
Necesito hacer la iteración para verificar los números y omitir la primera aparición y hacer clic en la segunda.
¿Cómo puedo resolver este problema con cada uno? Lo intenté así, pero eq() no funciona.
let dayVar = 27 .find('.datepicker-row > a').children('span').each(($el, index, list) => { if($el.text() > 25 && index < 10) { cy.wrap($el).should('contain.text', dayVar).eq(1).click() } else { cy.wrap($el).should('contain.text', dayVar).eq(0).click() } })¡Muchas gracias!
Como hay dos "27" en el selector, elige el segundo con 'eq(1)`
let dayVar = '27' // use test here not number cy.get('.datepicker-row > a span') .filter((index, $el) => $el.text() === dayVar) .eq(1) .click();O más generalmente si puede ser uno O dos de la fecha objetivo
let dayVar = '27' cy.get('.datepicker-row > a span') .filter((index, $el) => $el.text() === dayVar) .last() // works for one or two "27" .click()Pero tenga cuidado con las fechas de bajo número y el próximo mes
let dayVar = '27' if (dayVar > 15) { cy.get('.datepicker-row > a span') .filter((index, $el) => $el.text() === dayVar) .last() .click() } else { cy.get('.datepicker-row > a span') .filter((index, $el) => $el.text() === dayVar) .first() .click() }Puede eliminar los duplicados de la matriz usando esto:
let dates = let dates = [ 26, 27, 28, 29, 30, 31, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10....27, 28, 29, 30, 31, 1, 2, 3, 4 ] let uniqueDates = [...new Set(dates)] //uniqueDates are the array for unique datesPuedes hacer algo como esto. Primero, inserte todas las fechas dentro de una matriz como números. Luego elimina los duplicados. Y luego iterar sobre la matriz y realizar acciones.
let dates = [] cy.get('selector') .find('.datepicker-row > a') .children('span') .each(($el) => { dates.push(+$ele.text().trim()) }) let uniqueDates = [...new Set(dates)] cy.wrap(uniqueDates).each((num, index) => { if (num > 25 && index < 10) { cy.contains('.datepicker-row > a', num.toString()).eq(1).click() } else { cy.contains('.datepicker-row > a', num.toString()).eq(0).click() } })