Tengo un elemento de intervalo cuyo valor es 2. Me gustaría verificar si el valor es mayor que 0, pero después de verificarlo en línea e implementar todos los métodos, no funcionó...
Aquí está la consola cuando registro $span
Entiendo que Cypress funciona de forma asíncrona, así que uso .then() para obtener el texto del elemento. ¿Cómo puedo obtener el valor de 2 y hacer el siguiente if-else?
HTML
<div> <span class="badge ml-1 badge-primary">2</span> </div> cy.get(".badge.ml-1.badge-primary").then(($span)=> { if($span.text().includes(0)) { doFunction1() } else { cy.get(xxxxx) } )}Hágalo encadenando métodos de conversión para pasar de element -> text -> number
cy.get(".badge.ml-1.badge-primary") .invoke('text') // to text .then(text => +text) // to number .then(value => { if(value > 0) { doFunction1() } else { cy.get(xxxxx) } }) Esperando el valor 2
cy.get(".badge.ml-1.badge-primary") .invoke('text') // to text .then(text => +text) // to number .should('eq', 2) // wait for value 2 .then(() => { doFunction1() // now doFunction })Lo que solicitó es verificar si el contenido de un lapso es MAYOR QUE 0. Por lo tanto, requerirá un enfoque adicional al uso de includes . Por ejemplo, puede leer un valor como una variable y verificar si es mayor que 0:
cy.get(".badge.ml-1.badge-primary").then(($span)=> { const value = $span.text(); // now you know what the value is if(value > 0) { // actual check if > 0. Beware, implicit coersion here! read more below. doFunction1() } else { cy.get(xxxxx) } )} La variable de value , sin embargo, es una cadena. Mi código funciona ya que JS convertiría una cadena en un número automáticamente. Dependiendo de su caso de uso, es posible que desee asegurarse de que sea un número válido y no otra cadena, que no se puede convertir en un número (como "2s"). Por ejemplo, si el valor es "2s", la comprobación de value > 0 sería falsa, lo que podría provocar un error en el código.
cy.get(".badge.ml-1.badge-primary").then(($span)=> { const value = Number.parseInt($span.text()); // now you know what the value is if(!Number.isNaN(value) && value > 0) { // value is now of type number, but it may be NaN! (yes, NaN is also a number) doFunction1() } else { cy.get(xxxxx) } )}Primero, asegúrese de que el selector que está utilizando sea único, de modo que no obtenga un valor no deseado. En segundo lugar, puede esperar con un tiempo de espera personalizado en caso de que su página web tarde algún tiempo en completar el valor y luego aplicar su condición if-esle. Ahora, en lugar de 4 segundos (tiempo de espera predeterminado de Cypress), el comando debería volver a intentarlo durante 7 segundos para verificar que el elemento tiene el valor de texto interno de 2.
cy.get(".badge.ml-1.badge-primary", { timeout: 7000 }).should("have.text", "2") cy.get(".badge.ml-1.badge-primary") .invoke(text) .then((num) => { if (+num > 0) { doFunction1() } else { cy.get(xxxxx) } })