2

I am trying to assert that, when I mouseover a covered element, the element on top is activated and not the hidden one.

However, when using .trigger('mouseover') on the hidden object, an error occurs because I cannot mouseover that object, and the test stops.

Is there a way to try to mouseover and assert that a failure occurs?

Joshua Wade
  • 4,755
  • 2
  • 24
  • 44
jim smith
  • 21
  • 1

1 Answers1

0

Your best bet for now is probably to use this .shouldNotBeClickable() command, because if the element cannot be clicked then it also cannot be hovered. Use this command with caution, as it skips all remaining commands in your it() block when used due to a bug in Cypress.


As of right now (Cypress 3.1.0), this is not possible. It should be as per this answer, but cy.once() has some code-breaking bugs that I've run into trying to adapt the command in that answer.

The following custom command does not work as of Cypress 3.1.0. It should work, but it causes Cypress to hang.

index.js:

Cypress.Commands.add("shouldNotBeHoverable", {
    prevSubject: true
}, function(subject) {
    let errorMessage = "shouldNotBeHoverable: element hover succeeded, but it souldn't have";

    let done = false;
    cy.wrap(subject[0]).trigger('mouseover', { force: true });
    cy.once('fail', (err) => {
        if (err == errorMessage)
            throw errorMessage;

        expect(err.message).to.include('cy.trigger() failed because this element');
        expect(err.message).to.include('is being covered by another element');
        done = true;
    });

    cy.wrap(subject[0]).trigger('mouseover', {timeout: 1000});

    cy.get('html').then(() => {
        if (!done)
            throw errorMessage;
    });
});

Cypress test:

cy.get("#selector").shouldNotBeHoverable();

The related Github issues are linked below. This specific issue isn't reported, but both issues are similar enough that I suspect the underlying cause is the same.

Mixing cy.on()/cy.once() with a one-argument it() function causes test to hang

Queued commands silently skipped when using cy.once() in a custom command

Joshua Wade
  • 4,755
  • 2
  • 24
  • 44