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í?
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) }) })