Quiero seleccionar un valor aleatorio de un menú desplegable, con la restricción de que no se debe seleccionar un valor específico.
const initialOrderReason = cy.xpath("//tbody/tr[1]/td[4]"); tkm .dropdownOptions() .should("be.visible") .then((options) => { cy.get(Cypress._.sample(options)) .not.contain(initialOrderReason) });¿como es posible?
Hay mucho código relevante que no ha mostrado, incluido el HTML, pero aquí está mi solución basada en lo que ha proporcionado
Se debe acceder a cy.xpath("//tbody/tr[1]/td[4]") a través .then() en lugar del valor devuelto.
Y para todos los elementos extraer el texto de los elementos.
cy.xpath('//tbody/tr[1]/td[4]') .invoke('text') // extract text .then(initial => { tkm.dropdownOptions().should("be.visible") .then((options) => { const texts = [...options].map(option => option.innerText) // extract texts const notInitial = texts.filter(text => text !== initial) // filter out initial const random = Cypress._.sample(notInitial) // random other value // Assuming "//tbody/tr[1]/td[4]" gives a <select> element cy.xpath('//tbody/tr[1]/td[4]').select(random) }); cy.xpath('//tbody/tr[1]/td[4]') // requery the dropdown .should("not.have.text", initial); // to allow DOM to change })