JD.
decir que tengo el HTML:
<select name="subject" data-testid="contact-us-subject-field">
<option value="What is this regarding?">What is this regarding?</option>
<option value="Partnerships">Partnerships</option>
<option value="Careers">Careers</option>
<option value="Press">Press</option>
<option value="Other">Other</option>
</select>
Seleccionar una opción con un valor conocido, como ‘Carreras’ es tan fácil como:
cy.get('[data-testid="contact-us-subject-field"]').select('Careers');
¿Cómo selecciono la enésima opción en este campo? a pesar de todo de su valor?
Arnaud P.
Actualizar
Como señaló @dpstree en los comentarios, esto no responde a la pregunta original. Consulte las respuestas más recientes para obtener una solución completa.
Original
Mediante el uso equivalente
cy.get('tbody>tr').eq(0) // Yield first 'tr' in 'tbody'
cy.get('ul>li').eq(4) // Yield fifth 'li' in 'ul'
-
Es
eq
¿una abreviación? ¿Qué significa?– nitzel
26 de junio de 2019 a las 15:10
-
Como se menciona en la página de documentación que vinculé, el término proviene de jQuery. Así que te puede interesar este post
– Arnaud P.
27 de junio de 2019 a las 13:13
-
Esto no selecciona nada. Demuestra la sintaxis .eq() que se necesita como parte de la solución, pero pierde el contexto importante de la necesidad de manipular la selección. Vea la solución de Robert o Miguel a continuación.
– dpstres
26 de agosto de 2020 a las 15:15
-
Mi palabra, tienes razón, debo haber leído la pregunta demasiado rápido. Editaré para señalar esto.
– Arnaud P.
27 de agosto de 2020 a las 8:13
-
Solo recuerda que si guardas esta selección en una variable, no funcionará. const miSelección = cy.get(‘tbody>tr’) ; miSeleccion.eq(0); mySelection.eq(1) –> no habrá un segundo elemento. Debe volver a llamar a una función de selección.
– Rantiev
6 mayo 2021 a las 21:35
En el contexto particular de seleccionando el enésimo option
esto puede ser apropiado:
cy.get('select[name=subject] > option')
.eq(3)
.then(element => cy.get('select[name=subject]').select(element.val()))
-
un gran aprobado por esta solución inteligente
– paso nulo
13 mayo 2020 a las 18:28
-
Exactamente lo que estaba buscando, tenga en cuenta que pronto podría haber una solución más fácil github.com/cypress-io/cypress/issues/757. Pequeña sugerencia para que @Robert use cy.wrap() +parents() para no duplicar el selector:
.eq(2).then(($el) => cy.wrap($el).parent('select').select($el.val()))
.– TimNodo
2 de junio de 2020 a las 13:08
Basado en la solución de Miguel Rueda, pero usando prevSubject
opción:
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)
Explicación:
- Usando
children('option')
y.eq(pos)
atravesar hijos de seleccionar a un elemento específico. - Llamada
select
método con el valor del elemento seleccionado.
t_dom93
Actualización 2021
Ahora puede seleccionar una opción index
dentro de .select(index)
dominio:
cy.get('select').select(0) // selects by index (yields first option) ie "What is this regarding?"
cy.get('select').select([0, 1]) // select an array of indexes
Esto debería ser fácil ahora con el lanzamiento de Cypress v8.5.0. Ver documentación para más.
Tuve el mismo problema y lo resolví creando un comando de ciprés personalizado. No es tan bonito como me gustaría, pero hizo el trabajo.
Cypress.Commands.add("selectNth", (select, pos) => {
cy.get(`${select} option +option`)
.eq(pos)
.then( e => {
cy.get(select)
.select(e.val())
})
})
luego usé en la prueba como tal
cy.viewport(375, 667)
.selectNth("customSelector", 3)
Él option +option
parte fue la única forma que pude encontrar para obtener la lista completa de opciones dentro de una selección y actualmente es el fragmento de código con el que estoy tratando de trabajar, aunque funciona bien.
joelle boulet
dado que las respuestas de trabajo están usando entonces de todos modos, eq o algo más elegante es redundante con la indexación de matrices …
// to click on the 1st button
cy.get('button').then($elements => {cy.wrap($elements[0]).click();});
// to click on the 4th tr
cy.get('tr').then($elements => {cy.wrap($elements[3]).click();});
// to click on the last div:
cy.get('div').then($elements => {cy.wrap($elements[$elements.length - 1]).click();});
Ajay Rawat
Supongamos que desea seleccionar la segunda opción, puede hacerlo simplemente así
cy.get("select option").eq(2)
solo ten en cuenta que cy.get()
funciona como jquery $()
.