Tengo una página que tiene un elemento donde, si te desplazas hacia abajo, carga nuevos datos.
Esto toma alrededor de 10 segundos.
He escrito la siguiente prueba:
it('Should display at least one facility in booking panel', (done) => { function recursivelyScroll() { cy.get(element) .scrollTo('bottom'); cy.get(element) .then($el => { // If the element contains a loading class, we wait one second and scroll down again if ($el.find(Loading).length > 0) { setTimeout(recursivelyScroll, 1000); } else { // We are done waiting, no more loading is needed // write test here done(); } }); } recursivelyScroll(); });CypressError
Se agotó el tiempo después de
4000ms. ¡La devolución de llamadadone()nunca se invocó!
El método done() no se llama lo suficientemente rápido según Cypress, pero no tienen documentación sobre cómo extender el done de tiempo. Además, podría haber una mejor manera que desconozco para crear este comportamiento de desplazamiento en Cypress. ¿Hay una solución fácil?
¿Has intentado usar el complemento de recursividad en Cypress?
Se vería algo como esto:
cy.get(element).scrollTo('bottom'); recurse( () => cy.contains('element', 'Loading').should(() => {}), ($quote) => $quote.length > 0 , { limit: 300, log: false, post(){ setTimeout(recursivelyScroll, 1000); } }, )La idea fue tomada aquí: https://www.youtube.com/watch?v=KHn7647xOz8 Aquí ejemplo de cómo usar e instalar https://github.com/bahmutov/cypress-recurse
Intente cambiar a la afirmación When y declarar esa función fuera de la ejecución:
When('Should display at least one facility in booking panel', (done) => { recursivelyScroll(done) } function recursivelyScroll(done){ //see implementation below }No estoy seguro de qué es "Cargando", ¿tal vez tenga que poner comillas dobles?
Además, tenga en cuenta que cypress es asíncrono, luego las secciones scrollTo y luego del código se ejecutan al mismo tiempo en su código, solo use luego después del desplazamiento.
Y cambiaré setTimeout a la función cy wait antes de ejecutar la recursividad, intente con el siguiente código:
function recursivelyScroll(done) { cy.get(element) .scrollTo('bottom') .then($el => { // If the element contains a loading class, we wait one second and scroll down again if ($el.find(".Loading").length > 0) { cy.wait(1000).then(()=>{ recursivelyScroll(done); }) } else { // We are done waiting, no more loading is needed // write test here done(); } }); }