Estoy tratando de encontrar un texto de elemento usando Cypress. $ Todo funciona bien con el objeto cy pero Cypress. $ produce undefined
//Esto funciona
cy.get('abc').eq(0).find('xyz').then(($elm)=>{ cy.log("$elm="+$elm.text()) })//Esto produce "indefinido"
var elmText = Cypress.$('abc').eq(0).find('xyz').text() cy.log(elmText)¿Puede alguien ayudarme por qué Cypress.$ no funciona aquí?
Solo puedo suponer que tiene algunos comandos de Cypress que deben completarse antes de consultar el selector. Como los comandos de Cypress son asincrónicos, el estado de la interfaz de usuario no está listo cuando se ejecuta jquery. Por lo tanto, puede hacer que se ejecute sincrónicamente con los comandos de cypress de la siguiente manera:
cy.then(() => { var elmText = Cypress.$('abc').eq(0).find('xyz').text() cy.log(elmText) })@MikhailBolotov es un código sincrónico correcto como Cypress.$ en el mismo bloque que los comandos se ejecutan primero.
Pruebe esta sencilla verificación de visita y rumbo.
it('asynchronous commands', () => { cy.visit('http://example.com') .then(() => console.log('After visit')) var elmText = Cypress.$('h1').text() cy.log(elmText) console.log('At end of test') })El orden de console.logs es
Además de la sugerencia de @MikhailBolotov, puede usar ganchos como beforeEach para romper el bloque y lograr lo que desea.
beforeEach(() => { cy.visit('http://example.com') .then(() => console.log('After visit')) }) it('asynchronous commands', () => { var elmText = Cypress.$('h1').text() cy.log(elmText) console.log('At end of test') })El orden de console.logs ahora es correcto