无法测试样式显示的元素:无

Posted

技术标签:

【中文标题】无法测试样式显示的元素:无【英文标题】:Can't test element which is styled to display: none 【发布时间】:2020-09-04 16:45:39 【问题描述】:

我正在尝试getByRole,我有一个<li />,它是样式化组件的子组件。

样式化组件默认为display: none,然后在min-width 媒体查询下设置为display: flex

运行getByRole('listitem') 可以在没有display: none 的情况下运行,但不能使用它,这表明styled-components 正在告诉DOM,因为它被设置为display: none,所以它不存在。

尽管调试 html 输出实际上显示了正在呈现的 <li />

TestingLibraryElementError: Unable to find an accessible element with the role "listitem"

    Here are the accessible roles:

      document:

      Name "":
      <body />

      --------------------------------------------------

    <body>
      <div>
        <div>
          <ul
              class="sc-gzVnrw sc-VigVT kjwzNy"
            >
              <li><!-- bunch of stuff --></li>
          </ul>
        </div>
      </div>
    </body>

我尝试使用jest-matchmedia-mock 模拟媒体查询匹配,但没有成功。

我根本不关心测试媒体查询或样式,那么有没有办法告诉样式化组件在测试期间不应用样式?

【问题讨论】:

【参考方案1】:

我找到了一种解决方案,它是 dom-testing-library 的一个特性:

getByRole('listitem',  hidden: true )

这包括隐藏的项目。

这里有一个详细说明此更改的提交:https://github.com/testing-library/dom-testing-library/pull/352/files/7cdfcfa466774ca78940330fe95d00c9e744b673

【讨论】:

以上是关于无法测试样式显示的元素:无的主要内容,如果未能解决你的问题,请参考以下文章

word文档打不开,显示“一个XML元素位于无效位置,因此无法打开文件”?

css边框属性详细总结

html页面存在一个元素,可就是无法显示,求助

调试 iPhone 时 Safari Web Inspector 不显示元素和样式面板

JQuery中的DOM动画

怎样能使父元素随子元素的高度变化而变化(css样式