本文要点

  • 先测国家切换是否正确改变标签、必填项和格式
  • 再分别测试原始输入、归一化值和服务端结果
  • autocomplete 令牌与可见标签都要按语义配置
  • 失败后必须保留用户输入并将焦点引向问题字段
作者
Random Address Generator 编辑团队
审核
表单与 QA 审核组
最近实质更新
增加国家切换、动态字段、autocomplete 令牌和分层测试矩阵。

第一层:国家切换的状态测试

选择国家后,界面可能更改 City 的标签、将 State 改为 Province、Prefecture 或隐藏该字段,同时切换邮编提示和必填性。测试要检查这些变化是否来自同一国家配置,避免界面和 API 规则不一致。

切换国家时不应静默删除已输入内容。可以显示确认提示,或保留各国草稿;无论选择哪种产品策略,都要写成明确的回归用例。

国家动态标签关键变化
美国State / ZIP Code两位州代码和五位 ZIP
加拿大Province / Postal CodeA1A 1A1 并保留空格
英国Post Town / PostcodeCounty 通常可选
日本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 服务用户和辅助技术,两者都需要。

地址校验失败时能否清空表单?

不应清空。保留输入、标记具体问题字段,并让用户就地修正。

来源与进一步阅读

  1. MDN:HTML autocomplete 属性
  2. WHATWG:地址自动填充字段