Home > Software design >  Cypress clock function makes html body invisible
Cypress clock function makes html body invisible

Time:04-23

in my cypress tests, I am looking to set the clock to a specific time to have a consistent time frame for every test.

When I call:

cy.visit('/path/to/page');
cy.get('#elementId').click();

All is fine.

However, when I do:

cy.clock(Date.now());
cy.visit('/path/to/page');
cy.get('#elementId').click();

I get the following error:

This element `<button with Id i want to click>` is not visible 
because its parent `<body>` has CSS property: `display: none`

This also happens when I pass no arguments to cy.clock(). Why is cy.clock() setting the body of this page to invisible? And how do I avoid this?

CodePudding user response:

How about you provide a custom out for the element to be visible first and then click().

cy.get('#elementId', {timeout: 6000}).should('be.visible').click()

Or, You can also use {force: true} in case you want to click a hidden element.

cy.get('#elementId', {timeout: 6000}).should('be.visible').click({force: true})

CodePudding user response:

The cy.clock() command overwrites and freezes the javascript functions relating to timers - setTimeout, setInterval as well as the Date objects.

It looks like your app makes use of setTimeout during loading and some initial javascript is not completed.

Try adding a cy.tick() to the command sequence

cy.clock(Date.now());
cy.visit('/path/to/page');
cy.tick(1000);                 // try longer and shorter timings
cy.get('#elementId').click()
  • Related