Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to stop a 'for' loop in Cypress?

This is the code I’m using:

it('Test to stop a FOR loop', function () {
        cy.visit('https://docs.cypress.io/guides/overview/why-cypress');
        for (let i = 0; i < 5; i++) {
            cy.wait(1000);
            cy.url().then((url) => {
                cy.log(`**${url}**`);
                if (url.includes('api')) {
                    break;  // This fails
                }
                if (url.includes('overview')) {
                    cy.log('**The URL includes OVERVIEW**');
                    cy.get('[href="/api/table-of-contents"]').click();
                };
                if (url.includes('plugins')) {
                    cy.log('**The URL includes PLUGINS**');
                    cy.get('.navbar__inner > :nth-child(1) > :nth-child(3)').click();
                };
            });
        };
    });

I want to iterate through several pages and stop when the script meets an specific URL. I have tried using return instead of break but that doesn’t work. Any thoughts on how to do that?

I have tried:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

if (url.includes('api')) {
    return;
};

But looks like that doesn’t stop the flow

>Solution :

I think the return statement in cypress won’t exit the loop or function as it behaves differently than in synchronous JavaScript.

I add code below.

it("Test to stop a FOR loop", function () {
  cy.visit("https://docs.cypress.io/guides/overview/why-cypress");

  function iterate(i) {
    if (i < 5) {
      cy.wait(1000);
      cy.url().then((url) => {
        cy.log(`**${url}**`);
        if (url.includes("api")) {
          // Stop the recursion
          return;
        }
        if (url.includes("overview")) {
          cy.log("**The URL includes OVERVIEW**");
          cy.get('[href="/api/table-of-contents"]')
            .click()
            .then(() => {
              iterate(i + 1); // Continue with the next iteration
            });
        } else if (url.includes("plugins")) {
          cy.log("**The URL includes PLUGINS**");
          cy.get(".navbar__inner > :nth-child(1) > :nth-child(3)")
            .click()
            .then(() => {
              iterate(i + 1); // Continue with the next iteration
            });
        } else {
          iterate(i + 1); // Continue with the next iteration
        }
      });
    }
  }

  iterate(0); // Start the recursion with the initial index
});


In this code, the iterate function is called recursively for each iteration.

This ensures that each iteration waits for the asynchronous Cypress commands to finish before moving on to the next iteration.

The recursion will stop when the desired condition (url.includes('api')) is met.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading