先给结论:不要继续争论“组件到底有没有问题”,而是把争议页面各截取一个最小可复现区域,做成两组对照验收样例——一组保留差异条件,一组抹平差异条件。哪一组能稳定复现异常,问题就锁定在那组多出来的条件里。下面按“差异来自数据还是来自环境”两种条件展开,并给出可直接执行的构造动作。
同一组件在不同页面表现不同,常见原因只有两类:数据条件不同(同一段结构里塞进了长度、类型、空值不一样的字段),或环境条件不同(页面加载的样式表、脚本版本、容器宽度、嵌套层级不一样)。这两类的验收样例构造方式完全不同。
判断依据不是“哪个页面看起来更旧”,而是打开浏览器开发者工具,对比该组件实际生效的样式来源和脚本执行顺序。只有生效来源不同,才算环境差异成立。
当差异由内容长度、字段缺失或类型引起时,验收样例应围绕边界值来构造,而不是随便填一段文字。假设某个卡片组件在列表页正常、在详情页错位,可以先做如下假设性验证:
这一步的实际动作是把详情页数据复制到列表页环境。如果列表页也开始错位,说明问题在数据条件,下一步应修改组件对边界值的处理逻辑,而不是改列表页模板。反过来,如果列表页仍然正常,说明数据不是主因,应转入条件B继续排查。
当差异由外层容器宽度、样式引入顺序或嵌套层级引起时,验收样例要固定数据、只变环境。可构造两个静态样例页,都放同一段组件结构:
若样例二复现、样例一正常,则差异条件就是那层容器或引入顺序。此时验收标准应写成“组件在指定容器宽度区间和样式加载顺序下表现一致”,而不是笼统写“组件显示正常”。
这里有一个容易踩的例外:如果两个样例都不复现,问题可能来自运行时才注入的脚本或异步加载的资源。此时不能判定组件无问题,只能说明静态样例不足以覆盖,需要补充一次带真实加载顺序的联调样例。
多个角色对同一事实理解不同,通常是因为验收描述太模糊。把样例落成可核对项目,至少写清三件事:
例如把“详情页卡片错位”改写成“在容器宽度小于某值且标题超过一定字数时,卡片高度与列表页不一致”,争议就从一个主观判断变成可复现、可关闭的具体项。若某次验证中请求量或抓取量归零,也不能单独证明处理正确,它还可能来自缓存、拦截或统计口径变化,需要结合样例复现结果一起看。
如果连续两组对照样例都无法复现差异,且真实页面仍偶发异常,继续增加样例的收益会下降。此时更合理的动作是记录发生时的完整环境快照(加载顺序、容器尺寸、数据内容),转为按发生频率跟踪,而不是无限扩大验收范围。验收样例的目标是锁定条件,不是穷举所有页面。