Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

300
Vistas
Cypress: cómo guardar una variable y usarla más tarde para comparar

Tengo un div que tiene un valor de 15,000 que puede ser recuperado por

 cy.get('.population').invoke('text').then((numbers) =>{ let people = parseInt(numbers.replaceAll(',','')) cy.wrap(people).as('population') })

Sin embargo, ahora necesito obtener otros dos valores en otro div y luego compararlos para asegurarme de que sean iguales. Esto funciona, sin embargo, justo después de que una afirmación exitosa arroje este error cy.then() failed because you are mixing up async and sync code. In your callback function you invoked 1 or more cy commands but then returned a synchronous value. The value you synchronously returned was: {__flags: Object{5}}

Aquí está todo el código junto.

 cy.elem('population').invoke('text').then((num) =>{ let totalResidents = parseInt(num.replaceAll(',','')) cy.wrap(totalResidents).as('population') }) cy.get('@population').then((population) => { cy.get(`div[col- id=${columns.totalResidents}]`).find('span').find('div').then(($divs) => { const nums = [...$divs].map(div => div.innerText) const zcta1Pop = parseInt(nums[1].replaceAll(',','')) const zcta2Pop = parseInt(nums[2].replaceAll(',','')) const totalPop = zcta1Pop + zcta2Pop return cy.expect(population).to.eq(totalPop) //successful assertion 15000 = 15000 but then fails right after })

El segundo par de divs se puede representar por

 <span> <div style="margin-left: 10px;"> <div>7,000</div> </div> </span> <span> <div style="margin-left: 10px;"> <div>8,000</div> </div> </span>

Lo extraño es que la afirmación al final es correcta assert expected 15000 to equal 15000 pero luego arroja el error. ¿Alguien sabe qué está pasando aquí?

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

A menos que tenga un comando personalizado, cy.expect()... es una sintaxis incorrecta. Solo debe expect()... - pero no puede devolverlo.

No necesita devolver nada de su último .then() porque ya ha realizado la afirmación.

Un alias no es necesario si usa el valor inmediatamente después.

 cy.elem('population').invoke('text') .then((num) =>{ let totalResidents = parseInt(num.replaceAll(',','')) return cy.wrap(totalResidents) }) .then(totalResidents1 => { cy.get(`div[col-id="${columns.totalResidents}"]`) .find('span').find('div') .then(($divs) => { const nums = [...$divs].map(div => div.innerText) const zcta1Pop = parseInt(nums[1].replaceAll(',','')) const zcta2Pop = parseInt(nums[2].replaceAll(',','')) const totalResidents2 = zcta1Pop + zcta2Pop expect(totalResidents1).to.eq(totalResidents2) }) })

O con alias

 cy.elem('population').invoke('text') .then(num => parseInt(num.replaceAll(',',''))) .as('totalResidents1') cy.get(`div[col-id="${columns.totalResidents}"]`) .find('span').find('div') .then($divs => { const nums = [...$divs].map(div => div.innerText) const zcta1Pop = parseInt(nums[1].replaceAll(',','')) const zcta2Pop = parseInt(nums[2].replaceAll(',','')) const totalResidents2 = zcta1Pop + zcta2Pop return cy.wrap(totalResidents2) }) .as('totalResidents2') cy.get('@totalResidents1')then(totalResidents1 => { cy.get('@totalResidents2').then(totalResidents2 => { expect(totalResidents1).to.eq(totalResidents2) }) })
about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda