1. 无障碍测试的前置认知:它解决的是"被挡在门外的人"
先说个我自己遇到的事。去年给一款金融类App做无障碍适配,测试机上装了TalkBack,我第一次戴着耳机、闭着眼睛、顺着语音提示去走一遍"转账"的核心流程,结果15分钟都没走完——不是因为流程复杂,而是因为有一大半控件读不出来、焦点乱跳、双击没反应。当时我就意识到,无障碍测试不是"给视力障碍者做点慈善",而是一个真实存在、长期被忽视、直接影响产品可用性的工程质量问题。
无障碍测试,英文叫Accessibility Testing,简单说就是验证产品能否被包括视障、听障、行动受限、认知障碍人群在内的所有用户正常使用。它覆盖的范围比很多人想象的大得多:屏幕朗读器(如Android的TalkBack、iOS的VoiceOver)下的操作能否完成、键盘能否完整走通页面、文字放大后会不会遮挡功能、颜色对比度够不够、点击区域是不是太小……这些都属于这个范畴。
这篇文章我是写给测试工程师、前端开发、移动端开发和产品经理看的。无论你是刚接触这个词的新人,还是已经在做但总觉得"找不到抓手"的老手,下面这套从原理到工具、从自动化到人工走查、从问题定位到推动修复的完整链路,应该都能直接用上。我自己在真机上踩过的坑、总结的定位技巧、以及和开发沟通时最有效的表达方式,也都会放进来。
2. 无障碍测试的核心检查对象:不只看"有没有描述"
很多人一说到无障碍测试,第一反应是"检查图片有没有alt文本"。这只是其中最浅的一层。真正系统化的无障碍测试,至少要覆盖四个维度的检查,缺一个都会漏掉大量真实问题。
2.1 语义与可读性:盲人用户"听"到的界面
第一类是语义层。屏幕朗读器把界面变成语音时,它依赖的不是视觉图形,而是控件节点上的语义信息。Android里是contentDescription、text、className这些属性,iOS里是accessibilityLabel、accessibilityValue、traits这些属性。实测中我发现一个高频问题:开发经常给一个纯装饰性的ImageView写一大段说明文字,或者反过来把真正有信息的图标设成"不朗读",这两种情况都会让听感非常混乱。
检查语义层时,我会重点关注三件事:
- 容器控件是否被错误地设成了可聚焦,导致读屏焦点能进去但内容重复;
- 图片是否区分了"装饰性图片"(应设为忽略)和"信息性图片"(必须有描述);
- 动态变化的内容(比如"已加载3条新消息")是否通过AccessibilityEvent主动播报出来,而不是等用户自己扫到。
2.2 操作与键盘可达性:不用触摸能不能完成全流程
第二类是操作层。这里有个很反直觉的事实:无障碍操作并不只是读屏用户的事,它直接关系到PC端键盘用户、外接键盘的平板用户,以及因为手部不便只能依赖线性焦点的用户。检查方法是把手机连上蓝牙键盘,或者直接在Android开发者选项里开启"无障碍辅助功能菜单",然后试着只靠Tab键走完整条链路。
我在项目里定过一个底线标准:任何一条核心业务路径,都不能依赖"悬停手势""多点触控""长按"这种需要精细动作的交互。哪怕是常被诟病的轮播图,也至少要保证能通过焦点切换+明确按钮完成内容切换,而不是永远只能靠滑动。
2.3 视觉与感知:放大、对比度、色彩
第三类是视觉层。这里包含两件经常被混淆的事:一是内容对比度,二是动态字体适配。
对比度指的是前景文字和背景色之间的亮度差异,WCAG给出的AA级标准是普通文本4.5:1、大号文本3:1。我建议团队直接把这个标准写进设计规范,而不是等测试时再逐页人工判断。因为人工目测很容易高估对比度,我在测试中就遇到过一套自认为"很清晰"的浅灰底白字配色,用工具一算只有1.8:1,实际在阳光下完全看不清。
动态字体适配则更隐蔽。安卓系统允许用户把字体调到200%、400%,iOS也有Dynamic Type。如果布局用了固定高度、固定宽度,或者代码里写死pt/dp而不是用系统相对单位,字体一放大,文字就会被截断、按钮会重叠、弹窗会溢出屏幕。这类问题自动化工具很难抓,后面我会讲真机走查的具体方法。
2.4 组件与手势:读屏手势是不是"反人类"
最后是组件层。系统级控件(如Android的Switch、SeekBar,iOS的UISwitch、UISlider)本身就自带无障碍属性,开发只要不重写就应该没问题。但要小心自定义控件——凡是自绘的按钮、滑块、图表、宫格,几乎都需要手工补语义和手势。
读屏手势也是个高频翻车点。常见的不合理设计包括:需要双击才能激活的控件,开发却只响应了单击;需要左右滑动切换的列表,在读屏模式下却变成了焦点移动手势,导致用户一滑就跳走。这些问题通常在真机走查时才会暴露,模拟器上很容易被忽略。
3. 自动化能做什么、不能做什么——工具矩阵与判断标准
先泼一盆冷水:目前没有任何一款自动化工具能覆盖全部无障碍问题。工具擅长的是"确定性问题",比如有没有描述、对比度达不达标、触控区域够不够大;不擅长的是"体验性问题",比如读屏焦点顺序是否自然、语音播报是否冗余、一个操作流是否真正顺畅。所以正确做法是:自动化做第一道粗筛,人工做最终验收。
3.1 常用工具矩阵
我整理了自己在Android和iOS两端实际用过的工具组合,直接按场景列了张表:
| 平台 | 工具 | 能查什么 | 局限 |
|---|---|---|---|
| Android | Accessibility Scanner | 触控目标尺寸、对比度、标签缺失、可点击元素是否有关键信息 | 只能静态扫描单个页面,动态操作流查不到 |
| Android | lint(Layout Hierarchy) | 布局层面容易发现的语义问题 | 需要配合源码,纯黑盒测试用不上 |
| Android/iOS | Appium Inspector | 获取元素层级、xpath、id、accessibility id,辅助自动化脚本编写 | 只做"看"和"定位",不能直接给出结论 |
| iOS | Xcode Accessibility Inspector | 查看元素label、value、traits、frame,能模拟VoiceOver朗读顺序 | 仅限macOS环境,且需要工程可编译 |
| 跨平台 | axe DevTools(Web) | 网页端对比度、ARIA属性、焦点管理 | 仅Web,移动原生需另配工具 |
| 跨平台 | axe/selene(移动) | 结合Appium做断言式检查 | 需要自己写脚本,门槛略高 |
3.2 Appium Inspector的定位技巧:一条被很多人用偏的路径
这里重点说Appium Inspector,因为它是很多自动化测试同学最常用的工具,但绝大多数人只把它当成"找xpath的地方",完全没意识到它对无障碍测试的价值。
Appium Inspector可以连接Android/iOS的模拟器或真机,实时展示当前界面的元素树。每个节点上,你能看到content-desc、text、resource-id、class、bounds这些属性。对无障碍测试来说,这个信息树几乎等同于"读屏软件眼中的页面结构"——你可以直接看出来:哪个图片是没有描述信息的、哪个容器抢走了本该给子元素的焦点、哪个文本节点和语义不匹配。
一个我常用的方法是:在Inspector里按"accessibility id"排序,把有语义信息的节点和无语义节点分开,然后逐页对照产品功能清单,看关键功能节点是否可被读屏准确识别。曾经有一版Android端的首页轮播图,视觉上只有一张大图,Inspector里显示content-desc为空,className是composite,而实际可点击区域是两个不可见的翻页按钮。这类问题如果不打开元素树,单纯用眼睛看页面是完全发现不了的。
另外一条实用经验:为每个核心元素补充稳定且唯一的accessibility id,是让Apium脚本能从"脆弱xpath"中解脱出来的关键。我在项目里要求开发给所有核心控件都加上明确的accessibility id(Android对应content-desc,iOS对应accessibilityIdentifier),测试脚本统一优先用id定位。这样维护成本大幅下降,同时每一步定位到的节点在Inspector里也能和语义检查直接对应上,一箭双雕。
3.3 自动化的硬边界:为什么读屏体验必须真人验收
我强调过很多次,自动化做不了"体验验收"。原因很简单:读屏的体验取决于语速、焦点顺序、手势习惯、以及用户当时的心理状态,这些是任何断言脚本都模拟不了的。
说得具体点,自动化能查出"这个按钮没有content-desc",但它不会告诉你"这个按钮的content-desc是'好的,我同意以上条款并进入下一步',在朗读时会把后面整段文字的逻辑顺序打乱,导致用户误触"。自动化能查出"图片alt缺失",但它不会告诉你"同一个页面里20张图片的alt描述风格完全不统一,有的说'图片'有的说'产品图'有的说'商品:白色保温杯'",这种不一致本身就是对认知障碍用户的一种干扰。
所以我在每个迭代里都坚持保留一条"真人读屏走查"的时间预算。自动化帮我们筛掉了60%左右的低级问题,剩下的40%,尤其在交互路径和焦点顺序上,必须靠人戴上耳机、关掉屏幕去真实地走一遍。这不是低效,这是目前能做到的最高效分配。
4. 九步手把手完成一次无障碍自动化巡检
现在进入实操。下面这套流程我已经在多个项目里跑过,从环境准备到产出报告,完整跑下来一个人大约需要半天到一天。每一步我都写了操作细节和判断标准,你可以直接照着做。
4.1 环境准备与页面选取
首先需要准备好自动化环境。Android端推荐用Appium,因为它同时支持抓元素树和驱动操作。iOS端如果只有Mac,直接用Xcode自带的Accessibility Inspector最省心;如果做跨端自动化,依然走Appium同一套方法。
然后是页面选取,这一步比想象中重要。不要只拿"看起来复杂"的页面测试,我通常按用户路径来选,至少覆盖五类:
- 启动页与登录页;
- 首页/信息流(信息密度最高,最容易出问题);
- 核心表单页(注册、下单、填写资料);
- 结果/反馈页(成功、失败、错误提示);
- 设置页(开关、滑块、层级跳转)。
4.2 采集无障碍语义树
打开Appium Inspector,连接设备,进入目标页面,点击刷新,导出当前页面的元素树(Android是JSON格式的UIAutomator dump,iOS是AX树)。保存好这份数据作为基线。
之后我会对这颗树做一次结构化扫描,重点看以下字段:
content-desc:是否有值、是否准确、是否冗余;clickable:可点击元素是否同时具备focusable属性;bounds:触控区域是否小于48x48dp(Android推荐标准);- 节点层级:是否存在可点击元素嵌在不可点击容器里,导致读屏无法识别。
实际扫描时我一般写一个简单的脚本,把clickable=true的节点全部抽出来,再人工逐个确认它们的content-desc是否为空。这一步能快速找出最常见的"按钮没有标签"问题。
4.3 静态语义检查:对比度、字号、触控尺寸
静态检查我用的是这样一套组合:
- 截图当前页面,提取所有前景色和背景色对,用对比度计算工具验证是否满足WCAG AA(普通文本4.5:1,大号文本3:1);
- 检查所有文本是否使用了系统动态字体单位。Android里看布局文件里是否出现
dp固定高度、iOS里看是否使用了UIFontMetrics或支持Dynamic Type; - 用元素树里的
bounds计算触控区域尺寸,Android以dp计算,iOS以pt计算,对照48x48dp/44x44pt标准。
这里插入一个很多人会问的点:border-radius很大的圆形按钮,bounds看起来是够的,但实际可点击区域在视觉上可能只有中间一小块。所以我会顺手在Inspector里点一下元素边界,确认点击热区覆盖了完整视觉区域。
4.4 动态操作流走查:核心路径的"读屏模拟"
静态检查完后,重头戏是操作流。最有效的方法是在Appium脚本里,模拟TalkBack/VoiceOver的线性浏览方式(逐元素获取焦点),尝试从页面开头走到末尾,并记录每一步焦点变化。
具体实现上,我一般会写一串动作:读取当前聚焦元素 -> 执行Tab/Next(Android里是KEYCODE_TAB,iOS里是切换到下一个可访问元素) -> 再次读取聚焦元素 -> 对比预期。这个脚本的产出是一个"焦点跳转日志",可以非常简单地看出哪些区域被跳过了、哪些控件永远聚焦不到。
我自己遇到过最典型的例子是一个自定义下拉框:视觉上点一下会弹出选项列表,但读屏模式下焦点永远停在"请选择"上,后面的选项完全没有进入链接。检查焦点日志时,从"请选择"直接跳到了下一页按钮,中间整个选择列表都不见了——这个bug在视觉测试里永远发现不了,但读屏用户会直接被卡死在这一步。
4.5 系统级适配检查:字体放大、屏幕方向、色彩模式
最后一步系统级测试,我会在真机上做以下组合:
- 字体调到最大(Android开发者选项里的"字体大小"调到最大档,iOS的"辅助功能 -> 显示与文字大小 -> 更大字号"拖动到底);
- 开启"高对比度文字";
- 开启"反转颜色"或"色彩滤镜"检查是否有重要信息被颜色差异吞没;
- 切换横竖屏,确认读屏焦点不会因为布局变化而丢失。
这里每项操作后我都会重新采集一次元素树,对比基线看是否有元素越界、重叠、被截断。其实最稳的是直接在真机上肉眼检查每个主要页面,因为元素树有时候不会反映出视觉层级的遮挡。
4.6 汇总问题并形成修复优先级
巡检结束后,把所有问题按"阻塞/严重/一般"分级(分级标准见本文第五部分),形成一份清单。我习惯把"直接影响核心路径完成率"的问题列为阻塞,比如"支付表单无法读屏填写""首页焦点永远扫不到下拉菜单"。这样开发拿到手,也能清楚知道先改什么。
5. 手机设置里的"测试环境":真机无障碍走查
自动化巡检跑完,我会再留出半天做真机走查。这一步不依赖脚本,完全靠人的耳朵和手,但它能发现的工具问题往往最致命。
5.1 开启动态字体、最大字号、色彩反转的完整步骤
先把设备环境调好:
- Android端:设置 -> 无障碍 -> 字体大小,拉到最大;同页开启"高对比度文字";再进入"显示大小"拉到最大,模拟超大显示模式;
- iOS端:设置 -> 辅助功能 -> 显示与文字大小 -> 更大字号,开启并拖到最大;同页开启"增强对比度"和"色彩滤镜"(比如把屏幕调成灰度,看关键提示是否还能看清)。
我建议把这几项组合成一组"无障碍测试专用预置档位",存到团队的测试检查单里,每次测试前直接按图操作,不要临时找菜单。
5.2 TalkBack / VoiceOver 走查流程
这才是整个流程中最有价值的部分。我的走查方法很笨但很有效:
- 关掉屏幕甚至翻转手机(模拟盲操作状态);
- 打开TalkBack(Android)或VoiceOver(iOS);
- 佩戴耳机,仅听语音提示,从进入应用开始,尝试完成一条核心用户路径;
- 把每一步的"实际听到内容"和"预期听到内容"记录到表格里。
判断标准不是"能不能听到内容",而是"听到的内容是否让操作顺畅"。
我举个例子你就明白差别了。某次测试登录页,TalkBack读到的是"编辑框,请输入手机号"——这听起来没问题,但紧跟着下一句又读到"编辑框,请输入密码"。关键问题在于:两个编辑框都没有label,读屏是依靠placeholder报出来的。视觉正常的用户看placeholder没问题,但视障用户一旦开始输入,placeholder就被顶掉,语音马上变成"编辑框,请输入"——用户完全不知道这个框是干什么的。这种问题在视觉走查中永远发现不了,但真机走查十有八九能撞上。
还有手势问题。TalkBack默认是"单指移动焦点,单指双击激活"。如果你页面里有个需要"长按弹出菜单"的功能,视障用户可能根本不知道要长按,因为读屏模式下长按往往被系统截获用作其他功能。真机走查里这类冲突非常容易暴露。
5.3 冒烟级走查清单
为了让走查不变成纯"碰运气",我维护了一份清单,每次都按这个框架过:
- 每个可点击元素是否都能被焦点访问并激活;
- 每个输入框在输入内容后是否仍能通过标签识别用途;
- 页面滚动时焦点会不会被强制跳走;
- 弹窗打开后焦点是否自动进入弹窗,关闭后是否返回触发控件;
- 所有提示信息(红色错误文案、toast、校验失败)是否有非纯颜色的呈现方式;
- 多媒体内容是否有文字替代(字幕、转录文本)。
这份清单集合了我这几年踩过的各种坑,建议直接抄走。
6. 问题分级、缺陷报告与团队推动
说实话,无障碍测试在多数团队里并不像功能bug那样有天然的优先级。如果测试人员只是提交一堆"建议优化",开发大概率会排期排到明年。所以我摸索了一套推动修复的表达方式,核心就一条:把无障碍问题翻译成用户完成任务的障碍,而不是翻译成设计问题。
6.1 无障碍缺陷分级表
| 级别 | 定义 | 例子 | 建议处理时机 |
|---|---|---|---|
| S0 阻塞 | 核心路径完全不可用,读屏用户无法完成操作 | 支付页面按钮无任何标签且无法激活 | 当前迭代必须修复 |
| S1 严重 | 核心路径可完成但存在严重体验障碍 | 表单校验失败后错误信息只通过颜色体现,读屏无提示 | 当前迭代或下迭代优先 |
| S2 一般 | 非核心路径受影响,或体验瑕疵 | 某个装饰性图片的alt描述冗长干扰浏览 | 下迭代排期 |
| S3 轻微 | 不影响操作但不符合最佳实践 | 部分页面焦点顺序略乱但不阻塞 | 攒批处理 |
6.2 一份能推动开发的缺陷报告长什么样
我写无障碍缺陷报告,模板基本固定,核心是让看报告的人不需要任何背景知识,按图就能复现:
【标题】在"提交订单"页,TalkBack焦点无法进入支付方式选择列表,导致支付流程中断 【复现步骤】 1. 开启TalkBack(设置-无障碍-TalkBack-开启) 2. 打开App,进入"购物车",点击"去结算" 3. 使用单指右滑浏览焦点,直至"支付方式"区域 4. 单指双击尝试激活"选择支付方式"下拉框 【实际结果】焦点跳过整个下拉框,跳到"提交订单"按钮;无法展开支付方式列表 【预期结果】焦点到达"选择支付方式"时,读屏应播报"下拉框,选择支付方式",双击可展开选项列表 【补充信息】Android 14 / App版本2.3.1 / 使用Appium Inspector采集到的元素树见附件,content-desc为空报告里还要附上一个关键东西:用Appium Inspector或Xcode Accessibility Inspector截取的节点树截图。开发一看节点属性缺失,就明白这不是产品交互改版问题,而是代码层面对系统无障碍机制的适配不到位的bug,修复起来通常也就几行代码的事。
我在推动过程中还有一个体会:与其在测试报告里堆"建议",不如在迭代计划时直接演示一遍真机走查。去年我给团队做了一次15分钟的现场演示:让两个开发同事戴上耳机,用TalkBack走一遍他们自己做的支付流程,结果开发当场就沉默了,之后无障碍问题的修复速度明显上了一个档次。这种"让开发亲身体验"的效果,比任何缺陷报告都有力。
7. 跨平台差异与常见兼容性陷阱
无障碍测试最容易被忽略的是跨平台差异。同一套视觉设计,在Android和iOS上的无障碍实现可能完全不同,这个部分单独拿出来讲,是因为我确实在这上面踩过不少跟头。
7.1 三端的语义机制差异
| 平台 | 核心语义属性 | 读屏入口 | 焦点控制 |
|---|---|---|---|
| Android | contentDescription, text, hint | TalkBack | focusable + 键盘Tab |
| iOS | accessibilityLabel, accessibilityValue, accessibilityHint | VoiceOver | accessibilityElements |
| Web | aria-label, alt, role | NVDA/JAWS/VoiceOver | tabindex + focus管理 |
一个典型的例子是"勾选框"。Android里CheckBox自带Checked状态播报,iOS里的UISwitch或UIButton的状态可以通过accessibilityValue记录,但很多开发在自定义实现时只处理了视觉图标变化,完全忘了更新语义属性。结果就是读屏用户听到的永远是"按钮",而不是"已选中/未选中"。
跨端项目还有另一层麻烦:同一套React Native/Flutter代码,在不同平台上对同一控件的语义映射可能不一致。我测试过一个用Flutter写的筛选页,Android上读屏能正确播报"筛选按钮",但iOS上VoiceOver只读"Button",完全丢失了文字。这类问题只能在真机上一端一端验证,我之前早期觉得跨端框架"自动处理无障碍"的想法,实测下来是行不通的。
7.2 需要重点验证的兼容性场景
我在每次发版前都会单独跑一遍这几类场景,当作兼容性回归:
- 系统字体放大200%下,所有弹窗和底部栏是否还能完整操作;
- 系统开启"减少动态效果"后,过渡动画和信息提示是否仍可感知;
- 系统深色模式下,对比度是否依然达标(很多配色在浅色模式没问题,深色一反转就翻车);
- 单手操作+大屏设备(折叠屏、平板)下,焦点和触控热区是否合理。
这里有一个很容易漏的点:横竖屏切换。竖屏时能正常朗读的页面,横屏后因为布局重排、元素位置变化,焦点顺序会乱掉。如果产品没有声明不支持横屏,那横屏下的无障碍体验就也是要测的。
8. 从"测一次"到"守常态":无障碍测试如何嵌入研发流程
最后一件事,也是我认为最有价值的一件事:怎么让无障碍测试不变成"一年做一次的运动",而是真正融进日常迭代。我试过很多方式,走了不少弯路,这里分享现在稳定运行的做法。
8.1 在需求评审阶段就介入
最省成本的做法是在需求评审时就去问产品和设计三个问题:
- 这个功能有没有新的交互模式?(若有,需要提前约无障碍专项测试);
- 有没有纯图标交互、纯颜色提示、必须拖拽/长按才能完成的步骤?(若有,需要提前确认替代方案);
- 有没有新的自定义控件?(若有,需要开发提前规划语义属性)。
这三个问题基本能堵住80%的后期返工。我之前待过一个项目,需求阶段没人问,结果上线后一个"长按复制验证码"的功能让读屏用户完全没法操作,最后又紧急补了一个"复制按钮"才解决,白白多花了一个迭代。
8.2 在自动化CI里加入无障碍冒烟检查
给Appium套件加无障碍断言其实不复杂,我现在的做法是在核心冒烟用例的每个关键步骤后,加一次元素级检查:
- 用
driver.find_element_by_accessibility_id能稳定找到关键元素; - 检查元素是否有可读标签(
element.get_attribute("content-desc")或label非空); - 检查可点击元素的bounds尺寸是否小于标准阈值(阈值根据平台配置)。
如果CI里配置了对比度检查,我还会把Design Token里的颜色对直接提出来做单元级验证。这个不太起眼,但能防止"图标改了个灰色就没注意对比度"这类问题反复出现。
8.3 建立无障碍回归清单
真正的保障是我维护了一张"无障碍回归清单",每次发版前用真机跑一遍。清单不长,但都是多年沉淀下来的"最容易破的地方":
- 登录注册全流程(读屏模式下输入框标签、错误提示、密码可见性切换);
- 支付确认页(金额播报、订单信息完整度、按钮可操作性);
- 表单校验(错误信息是否非纯颜色呈现、焦点是否自动跳到错误项);
- 底部导航和Tab切换(当前Tab状态是否播音、切换后焦点是否合理跳转);
- 弹窗与权限请求(打开时焦点是否进入、关闭后是否回到入口);
- 消息列表的"加载更多"(触发后是否有新内容播报)。
这张清单我每季度会根据踩到的新问题更新一次。把它放进发布检查单里,比依赖某个人记不记得强得多。
9. 最后的实战经验与扩展思路
走查做多了,我发现一个规律:无障碍问题的修复成本和时间点强相关。需求评审时提一句"这个交互有没有键盘替代方案",几乎零成本;开发阶段补一个content-desc,半小时搞定;等上线后被用户投诉再改,涉及交互、文档、发版,一轮下来至少一周。所以如果你想在团队里推动无障碍测试,最重要的不是买工具、写脚本,而是把检查前移,越早介入,成本越低。
关于工具选型,我最后的建议是:不要追求"一套工具解决所有问题"。Android和iOS各用一个顺手的主工具,再配合一个跨端自动化框架和一份人工走查清单,就已经超过绝大多数团队的无障碍测试投入水平了。工具越复杂,坚持做下去的难度越大,最后大概率会弃用。
这个方向后续还有很多可以扩展的玩法。比如把无障碍测试和用户访谈结合起来,邀请真实的视障用户参与可用性测试,他们的反馈会比任何标准都更贴近实际;比如在埋点体系里增加"读屏模式用户使用时长"的统计,用数据判断无障碍改造的收益;再比如针对多媒体内容建立字幕和文字替代的审核机制,避免只看控件不看内容。
我个人的体会是,无障碍测试让我对"产品可用性"的理解发生了根本性变化。以前测功能,我关心的是"能不能跑通";现在测无障碍,我关心的是"一个看不见屏幕、只剩耳朵和手指的人,能不能靠直觉和系统提示把事办成"。这个视角一旦建立,你回头再看自己的产品,会看到很多以前完全想不起的问题。戴上耳机、关掉屏幕、亲手走一遍,你会真正理解"人人可用"这四个字的重量。