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

React Native使用axe做可访问性测试:解决内容需包含在landmark(region)区域报错

问题解答

1. jest-axe 是否可以和JSX组件配合使用?

完全可以。jest-axe的检测逻辑是基于组件渲染生成的真实DOM节点,和源码使用JSX还是原生HTML编写无关,只要你能通过测试框架拿到组件渲染后的DOM实例,就可以正常执行可访问性检测。

2. "All page content should be contained by landmarks (region)"报错解决方案

这个报错是axe的基础可访问性规则要求:所有页面可见内容必须被包裹在语义化地标区域内(如<main>、<header>、<footer>、带role属性的区域等),你当前的<View>组件渲染后对应无语义属性的普通容器(如<div>),内容未被地标包裹就会触发报错。
你可以根据组件的使用场景选择以下任意一种解决方案:

方案一:修改组件添加语义属性(适用于页面级组件)

如果你的组件是独立的页面级组件,直接给外层容器添加对应的语义标识即可:

<View role="main">
    <Text>Hello</Text>
</View>

也可以直接替换为原生语义标签,比如用<main>代替无属性的<View>。

方案二:测试时外层包裹地标容器(适用于公共业务组件)

如果你的组件是被嵌套在页面其他地标区域内使用的公共组件,不需要自身携带地标属性,只需要在测试代码中给外层套一个符合规则的地标容器即可,同时注意你原测试代码中使用了await,需要给测试回调添加async标识否则会报错:

describe("Sample Component", () => {
    it("Should check for accessibility issues", async () => {
        const wrapper = mount(
            <div role="main">
                <SampleComponent></SampleComponent>
            </div>
          );
          const results = await axe(wrapper.getDOMNode());
      
          expect(results).toHaveNoViolations();
    });
});

方案三:临时禁用该规则(仅特殊场景推荐使用)

如果明确不需要检测该规则,可以在调用axe时传入配置禁用region规则:

const results = await axe(wrapper.getDOMNode(), {
  rules: {
    region: { enabled: false }
  }
});

内容的提问来源于stack exchange,提问作者Miguel Rodríguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:15:06