Search code examples
javascripttestingautomated-testscypress

Cypress does not always execute click on element


I am automating Google Calculator. And from time to time Cypress is not able to execute click on button. The tests click on buttons (0 to 9 ) and do some simple math operations. And in 30% chance it can not click on element and the test will fail.

I also recorded a video when issue appears.

Video here

My Project is located here: https://github.com/afiliptsov/test-project

To run the test run : "npm run test:e2e:functional"

I tried to use different locator. Initially i was using just ID ex(#cwbt15 ) but after i made more specific locator ( #cwbt15 > .cwbtpl > .cwbts) and still having same issue.

Does anyone knows why it happens and how to avoid such behavior?

The project structure is :

  • cypress/PageObject.js - place where all elements declared.
  • cypress/support/commands.js - place where function click created and verification of value getting updated.
  • cypress/integration/functional/delete.spec.js - test which was on the video

Solution

  • For those who are using cypress version "6.x.x" and above

    You could use { force: true } like:

    cy.get("YOUR_SELECTOR").click({ force: true });
    

    but this might not solve it ! The problem might be more complex, that's why check below

    My solution:

    cy.get("YOUR_SELECTOR").trigger("click");
    

    Explanation:

    In my case, I needed to watch a bit deeper what's going on. I started by pin the click action like this:

    enter image description here

    Then watch the console, and you should see something like: enter image description here

    Now click on line Mouse Events, it should display a table: enter image description here

    So basically, when Cypress executes the click function, it triggers all those events but somehow my component behave the way that it is detached the moment where click event is triggered.

    So I just simplified the click by doing:

    cy.get("YOUR_SELECTOR").trigger("click");
    

    And it worked 🎉

    Hope this will fix your issue or at least help you debug and understand what's wrong.