我试图断言,当我mouseover
包含元素时,顶部的元素被激活,而不是隐藏的元素。
但是,当在隐藏对象上使用.trigger('mouseover')
时,由于我无法mouseover
该对象而发生错误,并且测试停止。
有没有办法尝试mouseover
并断言发生了故障?
答案 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