javascript - 如何使用 Cypress 测试网页已禁用滚动?

标签 javascript reactjs scrollbar cypress react-modal

也许这很简单,但我的 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看起来 Cypress 能够滚动 window即使在手动滚动页面时这是不可能的。
知道可能是什么问题吗?
OP 的编辑:以编程方式滚动页面仍然有效( window.scrollTo() )。 overflow属性隐藏滚动条,但这并不意味着滚动功能实际上被阻止(除了简单的用户交互)
我被建议使用另一种方法来测试滚动卡住 pagedownpageup键导航。使用上述键将被阻止在实际页面上,用户将无法滚动。
  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);
  });
与前面的代码示例一样,此代码段也可以引发错误。 Timed out retrying after 4000ms: expected 46 to equal 0 .

最佳答案

您可以通过设置 overflow 来禁用网页上的滚动行为。属性(property)到hidden像这样window.document.body.style.overflow = 'hidden' .
假设 React模态组件集document.body.style.overflow = 'hidden'正如你之前提到的。
你可以断言 scrolling未通过 one-liner 启用像这样:

cy.window().then(($el) => expect($el.document.body.style.overflow).to.eq('hidden'));

关于javascript - 如何使用 Cypress 测试网页已禁用滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66440258/

相关文章:

javascript - 导出函数内部的对象

css - Greybox Overlay 改变窗口大小

html - 如何在窗口调整大小时固定宽度?

javascript - 在调整窗口大小时右对齐

javascript - 从 div 中删除一个类

reactjs - 如何将 React 应用程序部署到多个环境而无需多次构建?

javascript - 使用平滑滚动条点击移动到 Div

javascript - 如何验证 JavaScript 中的表达式?

javascript - tinyMCE 5 更改右键单击上下文菜单

c# - 将React+asp.net core部署到IIS