para automatizar la funcionalidad CRUD, necesito seleccionar el segundo elemento de un menú desplegable estático y el html es como
<select name="segment[segment_contact_id]" id="segment_segment_contact_id"> <option value="73082">Rita Basu</option> <option value="73349">researcher user</option> </select>Entonces, al usar ciprés, estoy usando el valor codificado y mi código es como
const segmentUser2 = 'researcher user' const userValue2 = 73349 cy.get('select#segment_segment_contact_id') .select(segmentUser2) .should('have.value', userValue2)Necesito una sugerencia porque no me gusta usar el valor codificado en lugar de eso, me gustaría usar siempre el segundo elemento del menú desplegable dinámicamente.
Podrías hacer algo como esto
Cypress.Commands.add( 'selectNth', { prevSubject: 'element' }, (subject, pos) => { cy.wrap(subject) .children('option') .eq(pos) .then(e => { cy.wrap(subject).select(e.val()) }) } )Uso
cy.get('[name=assignedTo]').selectNth(2)Aquí está el camino de @ItsNotAndy sin el comando personalizado.
cy.get('select#segment_segment_contact_id') .children('option').eq(1) .then($option => { cy.wrap($option).parent().select($option.val()) })Como una función
function selectNth(selector, pos) { cy.get(selector) .children('option').eq(pos) .then($option => { cy.wrap($option).parent().select($option.val()) }) } selectNth('select#segment_segment_contact_id', 1)Verificando a partir del texto mostrado
cy.get('select#segment_segment_contact_id') .find(':selected') .contains('researcher user')Verificando por el índice seleccionado
cy.get('select#segment_segment_contact_id') .its('0.selectedIndex') .should('eq', 1)Puedes usar esto también. Aquí primero obtenemos el valor del segundo elemento de la lista usando el comando eq() . Luego, una vez que tenemos el valor, simplemente lo estamos pasando a select() .
cy.get('select#segment_segment_contact_id option').eq(1).invoke('val') .then((val) => { cy.get('select#segment_segment_contact_id').select(val) })Y si solo desea validar el valor o el texto, puede hacerlo:
cy.get('select#segment_segment_contact_id option') .eq(1).should('have.value', 73349) cy.get('select#segment_segment_contact_id option') .eq(1).should('have.text', 'researcher user')