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

如何利用原查询通过aria-labelledby关联文本定位role="region"元素?

问题解析与解决方案

你遇到的问题根源在于:被aria-labelledby关联的<div id="Year 1">是普通容器,不具备语义化的标题角色,Testing Library在通过getByRole查询region时,无法将普通div识别为区域名称的有效来源,导致匹配失败。

以下是两种能让你最初的查询语句生效的修复方案:

方案1:给内部标题添加语义化标题角色

给标题div补充role="heading"属性(可搭配aria-level指定标题层级,比如aria-level="2"),让它符合无障碍规范中名称来源的角色要求:

<div role="region" aria-labelledby="Year 1">
  <div id="Year 1" role="heading" aria-level="2">Year 1</div>
</div>

此时执行screen.getByRole('region', { name: 'Year 1' })即可正常定位目标元素。

方案2:使用原生标题标签替换普通div

直接用<h2>(或对应层级的<h1>-<h6>标签)替代普通div,原生标题自带语义化角色,无需额外配置:

<div role="region" aria-labelledby="Year 1">
  <h2 id="Year 1">Year 1</h2>
</div>

该方案更贴合HTML语义化标准,同样能让你的查询语句生效。

原代码失效的核心原因

Testing Library的查询逻辑严格遵循无障碍规范,aria-labelledby关联的元素必须具备可作为名称来源的语义角色。普通div无默认语义角色,无法被识别为区域的名称提供者,因此即便id与文本内容一致,查询也无法匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:15:38