先把“表现不同”拆成可观察的差异,再为每个差异设计一个最小验收样例:固定输入、固定环境、固定观察点,记录结果与预期是否一致。缺少完整数据或后台权限时,仍可用浏览器开发者工具、页面快照和手工对照完成这一步,但只能得出“在该条件下不一致”的结论,不能推断全局原因或修复效果。
同一个组件在列表页正常、在详情页错位,常见原因分三类:容器给的宽度或层叠上下文不同、页面加载的数据形态不同、组件初始化时机不同。这三类对应的验收样例完全不一样,先分类能避免写出无法复现的步骤。
display、overflow或z-index不同。证据是同一段组件代码在两页的盒模型数值不一致。分类动作本身就会改变下一步:样式类只需在验收样例里写清容器条件;数据类必须把输入数据一并固定;时机类则要写明等待条件和重试次数。
假设你手上只有一个出问题的详情页地址和一张列表页的正常截图,没有测试环境也没有数据库权限。可以按下面的顺序把它变成一份别人能照着做的样例。
margin和父节点宽度。这一步产出的是两组数值,不是结论。这份样例的价值在于可交接:同事不必拥有你的账号,只要能在同类页面上复现相同条件,就能判断问题是否与数据形态有关。
没有后台和日志权限时,可以执行的最小动作是:在浏览器里修改 DOM 和样式做即时对照、用无痕窗口排除缓存与登录态影响、用设备模拟切换视口宽度、把页面保存为本地快照后离线对比。
这些动作能支撑的结论只有一条:在某个视口和某份输入数据下,组件表现与另一页面不一致。不能由此推出组件代码有缺陷、不能推出线上所有用户都会遇到、也不能推出改动某个样式就会修复。缓存未命中、接口返回变慢、字体未加载完成,都可能产生相似的表面现象,把它们直接当成原因会误导后续排期。
假设列表页每条记录都有标题,详情页允许标题为空。若空标题时组件高度塌陷,而补一个占位字符后高度恢复正常,那么差异更可能来自数据形态而非容器样式。此时验收样例应写成“标题为空时组件是否保持最小高度”,而不是“组件是否错位”。
这个判断的前提是两页使用同一版本组件、同一视口宽度。若组件版本不同,上述对照不成立,需要先确认版本再重做样例。动作与结果的关系在这里很直接:补占位字符后表现恢复,说明后续应优先检查数据兜底逻辑;若补了仍不恢复,则应回到容器样式继续排查。
一份能被反复使用的验收样例,至少包含视口宽度、输入数据特征、组件版本或页面地址、观察点和预期值。观察点要选可量化的,例如高度、是否溢出、点击后是否出现预期元素,而不是“看起来正常”。
把假设写在样例旁边也很重要。例如“假设两页引用同一份组件样式”,一旦这个假设不成立,样例结论就需要重新验证。这样做不会让验收变慢,反而减少因为条件含糊导致的反复返工。对怀化网站制作这类交付场景而言,样例写得越具体,跨人交接时的争议就越少。