断言元素无法响应鼠标悬停

时间:2018-09-19 19:42:58

标签: exception-handling mouseevent cypress

我试图断言,当我mouseover包含元素时,顶部的元素被激活,而不是隐藏的元素。

但是,当在隐藏对象上使用.trigger('mouseover')时,由于我无法mouseover该对象而发生错误,并且测试停止。

有没有办法尝试mouseover并断言发生了故障?

1 个答案:

答案 0 :(得分:0)

您目前最好的选择是使用this .shouldNotBeClickable() command,因为如果无法单击该元素,那么也不能将其悬停。请谨慎使用此命令,因为由于Cypress中的错误,它会在使用时跳过it()块中所有剩余的命令


到目前为止(Cypress 3.1.0),这是不可能的。应该按照this answer进行操作,但是cy.once()有一些代码破解错误,我在尝试修改该答案中的命令时遇到了这些错误。

从Cypress 3.1.0开始,以下自定义命令不起作用应该有效,但会导致Cypress挂起。

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;
    });
});

赛普拉斯测试:

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

相关的Github问题在下面链接。没有报告这个特定问题,但是两个问题都非常相似,以至于我怀疑根本原因是相同的。

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