Haz todo lo posible por interpretar el código correctamente previamente a usarlo a tu trabajo y si tquieres aportar algo puedes comentarlo.
Solución:
Solo agregaré que si decides hacer si la condición marca la casilla .length
propiedad de cy.find
comando, debe respetar la naturaleza asincrónica de cypress.
Ejemplo:
La siguiente condición se evalúa como false a pesar de que existe el botón appDrawerOpener
if (cy.find("button[data-cy=appDrawerOpener]").length > 0) //evaluates as false
Pero este se evalúa como true porque $body
la variable ya está resuelta ya que estás en .then()
parte de la promesa:
cy.get("body").then($body =>
if ($body.find("button[data-cy=appDrawerOpener]").length > 0) //evaluates as true
cy.get("button[data-cy=appDrawerOpener]")
.click();
);
Lea más en la documentación de Cypress sobre pruebas condicionales
ha sido cuestionado antes: declaración condicional en ciprés
Por lo tanto, básicamente puedes probar esto:
cy.get('header').then(($a) =>
if ($a.text().includes('Account'))
cy.contains('Account')
.click(force:true)
else if ($a.text().includes('Sign'))
cy.contains('Sign In')
.click(force:true)
else
cy.get('.navUser-item--account .navUser-action').click(force:true)
)
cypress, todos los pasos son asíncronos, por lo que debe hacer una función común en el archivo de comandos o en el archivo de objeto de la página,…
export function checkIfEleExists(ele)
return new Promise((resolve,reject)=>
/// here if ele exists or not
cy.get('body').find( ele ).its('length').then(res=>
if(res > 0)
//// do task that you want to perform
cy.get(ele).select('100').wait(2000);
resolve();
else
reject();
);
)
// here check if select[aria-label="rows per page"] exists
cy.checkIfEleExists('select[aria-label="rows per page"]')
.then(e=>
//// now do what if that element is in ,,..
)
.catch(e=>
////// if not exists...
)