You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Testing Library中通过role获取dd、dt等定义列表标签?

解决Testing Library通过Role定位<dd>标签的问题

问题原因

从报错信息能看到,<dt>(对应term角色)和<dd>(对应definition角色)的可访问名称(accessible name)均为空值,所以你用{ name: 'ID' }作为筛选条件时,Testing Library找不到匹配的元素。默认情况下,屏幕阅读器不会自动将<dt>的文本关联为对应<dd>的可访问名称。

解决方案

方案1:通过无障碍属性关联(推荐,符合无障碍标准)

修改HTML,给<dt>添加唯一ID,让<dd>通过aria-labelledby关联该ID,这样<dd>的可访问名称会继承<dt>的文本内容:

<dl>
  <dt id="id-term">ID</dt>
  <dd aria-labelledby="id-term">123456</dd>
</dl>

之后就能用你原本的代码精准定位目标<dd>:

screen.getByRole('definition', { name: 'ID' })

方案2:不修改HTML的情况下定位

如果无法调整页面结构,可以先定位到对应的<dt>,再通过父容器范围查找<dd>:

// 先找到文本为"ID"的<dt>元素
const idTerm = screen.getByText('ID');
// 在<dt>的父元素(即<dl>)范围内查找definition角色的元素
const idDefinition = within(idTerm.parentElement).getByRole('definition');

如果页面中有多个<dd>,也可以通过getAllByRole获取所有definition元素,再根据文本内容筛选:

const allDefinitions = screen.getAllByRole('definition');
const targetDefinition = allDefinitions.find(el => el.textContent === '123456');

内容的提问来源于stack exchange,提问作者Konrad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:22:40