Search code examples
cypresscypress-conditional-testing

Is it possible to keep executing test if element wasn't found with Cypress


I have a case when I need to wait for element (advertising), if it's visible then needs to click it, but if element wasn't found after timeout then needs to keep executing a test.

How to handle the situation with Cypress ?


Solution

  • I tried the above solution, but seems that in some cases parameter $body could not contain necessary element, cause it was not loaded when we invoked cy.get('body'). So, I found another solution, using jQuery via Cypress, here is it:

    let counter = 0;
    const timeOut: number = Cypress.config('defaultCommandTimeout');
      
      const sleep = (milliseconds) => {
        const date = Date.now();
        let currentDate = null;
        do {
          currentDate = Date.now();
        } while (currentDate - date < milliseconds);
      };
    
      while (true) {
        if (Cypress.$(element).length > 0 && Cypress.$(element).is(':visible')) {
          Cypress.$(element).click();
          break;
        } else {
          sleep(500);
          counter = counter + 500;
            if (counter >= timeOut) {
              cy.log(elementName+ ' was not found after timeout');
              break;
            }
        }
      }