【发布时间】:2021-06-01 01:08:44
【问题描述】:
也许这很简单,但我的 Cypress 测试无法测试锁定的滚动功能。
所以我有这个React 模态组件,它在安装时设置document.body.style.overflow = 'hidden'(仅限客户端)
我有以下Cypress 的测试套件:
it('page cant scroll when modal is open', () => {
cy.get('[data-testid="button"]')
.first()
.click();
cy.window().scrollTo('bottom');
// scroll should be disabled
cy.window()
.its('scrollY')
.should('equal', 0);
// cy.get('[data-testid="modal"]')
// .scrollTo('bottom')
// .its('scrollY')
// .should('not.equal', 0);
});
Error message: Timed out retrying after 4000ms: expected 802 to equal 0
看起来赛普拉斯能够滚动window,尽管手动滚动页面时这是不可能的。
知道可能是什么问题吗?
OP 的编辑:以编程方式滚动页面仍然有效 (window.scrollTo())。 overflow 属性隐藏了滚动条,但这并不意味着滚动功能实际上被阻止(除了简单的用户交互)
我被建议使用另一种方法通过pagedown 和pageup 键导航来测试滚动冻结。在实际页面上使用上述键将被阻止,用户将无法滚动。
it('page cant scroll when modal is open', () => {
cy.get('[data-testid="button"]')
.first()
.click();
cy.get('body').type('{pagedown}');
cy.window()
.its('scrollY')
.should('equal', 0);
cy.get('[data-testid="overlay"]').click();
cy.get('body').type('{pagedown}');
cy.window()
.its('scrollY')
.should('not.equal', 0);
});
与前面的代码示例一样,这个 sn-p 也可以抛出错误。 Timed out retrying after 4000ms: expected 46 to equal 0.
【问题讨论】:
-
因此,当模式打开时,用户会看到被阻止的滚动行为。那你为什么要测试滚动行为呢?在编写 cypress 测试时,您需要测试用户看到的内容。
-
@hurricane,因为你测试你实现的逻辑是否正常工作,不是吗?
标签: javascript reactjs scrollbar cypress react-modal