先给结论:如果同一组件在列表页、详情页或表单页出现差异,验收样例不能只截一张“正常页面”的图,而要把组件放回它所在的页面上下文,分别构造最小可复现样例,再判断差异来自组件本身还是页面给它的条件。只有当差异能在同一上下文稳定复现时,才应把它记为组件缺陷;如果换一个页面就消失,更可能是页面级样式、数据长度或容器约束造成的,应回到页面层修正。
同一个按钮、卡片、表格或导航,在A页面正常、在B页面错位,通常落在两类原因里。第一类是组件自身在特定状态下失效,例如禁用态、加载态、空数据态、超长文本态。第二类是页面给了不同条件,例如容器宽度不同、父级样式覆盖、同屏元素数量不同、数据来源字段长度不同。两类原因对应不同验收样例:前者要穷举组件状态,后者要穷举页面上下文。
判断方法很直接:把出问题的组件原样复制到一个空白测试页面,只保留组件必需的结构和样式,看差异是否还在。若差异消失,说明问题在页面条件;若差异仍在,说明组件本身在某个状态下没有覆盖到。这个动作会直接决定下一步是改组件还是改页面,避免在错误的层级反复调整。
验收样例的价值在于可重复。建议按下面的顺序固定变量,每放开一项就记录一次表现:
这样做的结果不是得到一张“通过/不通过”的表,而是得到一条边界:组件在什么条件下开始变化。边界一旦明确,验收项就能写成可判定的条件,而不是“看起来正常”。
假设某业务站点的商品卡片在列表页显示正常,在详情页的推荐区却被压扁。按上面的方法,先把卡片单独放进空白页,表现正常,说明组件本身没有坏。再检查详情页推荐区的容器:它比列表页窄,且父级设置了固定高度。此时差异的来源是容器约束,不是卡片组件。修正动作应放在推荐区容器上,而不是改卡片内部间距。改完后回到列表页复查,确认没有因为共用样式而被连带影响。这个例子的数字和页面类型都是假设,只用于说明比较方法:先隔离组件,再定位条件。
上面的判断有一个前提:差异能在受控环境下稳定复现。如果同一组件在相同页面、相同数据、相同视口下时好时坏,那么“组件缺陷还是页面条件”这个二分就不成立,问题更可能来自异步加载时序、字体加载完成前后的重排,或第三方脚本插入的样式。此时继续按页面条件去改,可能只是掩盖了偶发现象。正确做法是先记录复现频率和触发时机,把时序因素单独作为一类验收样例,而不是急着归因到组件或页面。
完成隔离和边界记录后,下一步是把结论转成可执行的验收项。若判定为组件问题,验收项写成“组件在禁用态、超长文本态、空数据态下均不溢出”;若判定为页面条件问题,验收项写成“在最小容器宽度和最大同屏数量下,组件不换行、不遮挡相邻元素”。每条验收项都应附带触发条件,而不是只写预期结果。这样在后续改版或新增页面时,同一组件被放进新上下文,也能用已有样例快速判断是否需要重新验收。