hola amigos, como soy nuevo en este mundo de automatización/ciprés, necesito su ayuda para manejar esta declaración del problema
tengo un cuadro de comentarios algo similar a esto puedo poner texto dentro de este texto con
cy.get('#comments').type('TEST')pero hay un elemento similar a este que muestra el conteo de caracteres como
*4/4000 Characters Useden lugar de uno resaltado
Lo que quería ? quería validar el texto con el tiempo de ejecución
lo que he hecho hasta ahora
he creado un custom command que devuelve el texto fuera del elemento pasando su localizador
Cypress.Commands.add('getElementText', (locator) => { cy.get(locator).invoke('text').then((text)=>{ return text.length }) })lo que necesitaba
cy.get('#commentSize').invoke('text').should('eq','*'+cy.getElementText('#comments').then((text)=>{return text})+'/4000 Characters Used')para que la validación final debería aparecer así
cy.get('#commentSize').invoke('text').should('eq','*'+ '4' +'/4000 Characters Used') pero obtengo un error de aserción expected 4 to equal * [object Object]NaN
Tienes que envolver y luego devolver tu texto así:
Cypress.Commands.add('getElementText', (locator) => { cy.get(locator) .invoke('text') .then((text) => { return cy.wrap(text.length) }) })Entonces en tu prueba tienes que hacer esto:
cy.getElementText('#comments').then((len) => { cy.get('#commentSize') .invoke('text') .should('eq', '*' + len + '/4000 Characters Used') }) También puede afirmar directamente usando should('have.text') así:
cy.getElementText('#comments').then((len) => { cy.get('#commentSize').should( 'have.text', '*' + len + '/4000 Characters Used' ) })Aquí hay otra variación de su prueba, usando el elemento transmitido después de .type() .
cy.get('#comments').type('TEST') .then($comments => { cy.get('#comments-size') .should('have.text', `*${$comments.text().length}/4000 Characters Used`) }) Como está utilizando .type() , me sorprende ver que .text() funciona.
Normalmente usa .type() en un <input> que requiere .val() para obtener el texto escrito.