本文要点
- 先测国家切换是否正确改变标签、必填项和格式
- 再分别测试原始输入、归一化值和服务端结果
- autocomplete 令牌与可见标签都要按语义配置
- 失败后必须保留用户输入并将焦点引向问题字段
作者与审核
查看编辑与审核原则- 作者
- Random Address Generator 编辑团队
- 审核
- 表单与 QA 审核组
- 最近实质更新
- 增加国家切换、动态字段、autocomplete 令牌和分层测试矩阵。
第一层:国家切换的状态测试
选择国家后,界面可能更改 City 的标签、将 State 改为 Province、Prefecture 或隐藏该字段,同时切换邮编提示和必填性。测试要检查这些变化是否来自同一国家配置,避免界面和 API 规则不一致。
切换国家时不应静默删除已输入内容。可以显示确认提示,或保留各国草稿;无论选择哪种产品策略,都要写成明确的回归用例。
| 国家 | 动态标签 | 关键变化 |
|---|---|---|
| 美国 | State / ZIP Code | 两位州代码和五位 ZIP |
| 加拿大 | Province / Postal Code | A1A 1A1 并保留空格 |
| 英国 | Post Town / Postcode | County 通常可选 |
| 日本 | Prefecture / Postal code | 七位邮编与多级地址 |
| 澳大利亚 | Suburb / State / Postcode | 四位 postcode |
第二层:语义 HTML 与自动填充
字段的 name、label 和 autocomplete 需要各司其职。可见 label 让用户理解当地含义,name 符合 API 契约,autocomplete 使用 country、address-line1、address-level1、address-level2 和 postal-code 等标准令牌。
不要同时给一组字段使用 street-address 和 address-line1/address-line2;MDN 指出这是两种替代表达。
<input name="addressLine1" autocomplete="shipping address-line1" />
<input name="locality" autocomplete="shipping address-level2" />
<input name="region" autocomplete="shipping address-level1" />
<input name="postalCode" autocomplete="shipping postal-code" />第三层:将校验、归一化和验证分开
校验回答“字符形式是否可接受”,归一化负责大小写、空格和常见分隔符,地址验证才尝试核对真实参考数据。三者应有不同状态和错误文案。
不要在用户输入过程中每个按键都重写文本。归一化可在 blur 或提交时发生,并向用户显示结果。
- 空值、过长值和非法字符分开报错
- 归一化前保留 rawValue
- 网络验证超时不清空表单
- 正则通过不显示“可投递”
第四层:错误恢复与可访问性
提交失败后,焦点应移到错误摘要或第一个错误字段,错误文本通过 aria-describedby 与字段关联。颜色不能是唯一提示,并且已输入的其他字段必须保留。
键盘测试需要覆盖国家下拉框、地址建议列表、错误链接和提交后焦点。自动化测试不应只用 placeholder 定位字段,因为 placeholder 会随国家改变。
第五层:以实际 API 请求为最终断言
最后不要只检查页面上的文本。捕获提交请求,断言 countryCode、regionCode、postalCode、rawAddress 和 normalizedAddress 是否符合契约,再从后端读回记录确认没有编码或空值转换问题。
一个常见缺口是前端测试使用显示文字断言成功,却没有发现 Province 下拉框把“Ontario”而不是“ON”发到后端。另一个缺口是 Address Line 2 清空后 API 没有删除旧值。因此需要在新建、编辑、重新打开和导出四个状态上使用同一记录做往返。
对第三方地址服务还要模拟慢响应、429、500、无建议和多建议。网络错误不应被表述为“你的地址错误”;界面需要明确区分服务暂时不可用与输入格式不可接受。
- 捕获并快照最终请求 JSON
- 断言清空可选字段会删除旧值
- 模拟限流、超时、服务错误和无结果
- 将系统错误文案与用户输入错误文案分开
常见问题
国际表单是否应该统一显示 State?
不应该。应根据国家改成 Province、Prefecture、Region,或在不需要时隐藏。
autocomplete 可以代替 label 吗?
不可以。autocomplete 服务浏览器,label 服务用户和辅助技术,两者都需要。
地址校验失败时能否清空表单?
不应清空。保留输入、标记具体问题字段,并让用户就地修正。
