先把“组件验收”和“页面验收”拆开:组件验收只证明它在受控输入下行为一致,页面验收才证明它在真实内容、真实布局和真实交互链路里可用。同一组件在不同页面表现不同,通常不是组件本身变了,而是它被放进了不同容器、不同数据形态和不同交互上下文。构造验收样例的目标,是让这些差异显式出现,而不是用一份通用清单掩盖它们。
同一组件在不同页面表现不同,常见原因可以归为三类,验收样例也应分别覆盖。
如果验收样例只在一个“标准页面”里跑通,就不能证明它在其他页面成立。更稳妥的做法是:先把组件从页面中抽出来做最小输入测试,再回到差异最大的两个页面做对照测试。只有两边都通过,才把结论写成“该组件在已覆盖的页面类型中可用”,而不是“该组件全局可用”。
假设某网站建设方案中有一个“折叠面板”组件,用于展示常见问题和参数说明。它在帮助中心页面表现正常,但在商品详情页出现两个问题:展开后内容把下方按钮顶出视口,收起后页面滚动位置跳回顶部。这个情境是假设的,用于说明验收样例怎样构造,不代表任何真实项目结果。
第一步,记录两个页面的差异条件:帮助中心页面的折叠面板位于单列主内容区,父容器宽度固定,页面没有粘性底栏;商品详情页的折叠面板位于两列布局的右栏,父容器高度受限,页面存在粘性购买栏。第二步,把差异写成可复现的验收样例,而不是写成“检查折叠面板是否正常”。样例可以写成:
第三步,执行并记录结果。如果窄栏样例通过、粘性底栏样例失败,下一步不是直接改组件,而是先判断问题属于容器约束还是组件内部实现。若失败只在粘性底栏出现,优先检查页面层是否给内容区预留了底部空间;若窄栏和底栏都失败,才回到组件内部检查高度计算和滚动锚点。
个别样本成立但规模化后出现例外,往往是因为样例只覆盖了最顺利的那一种页面。写验收样例时,至少标出三条边界,避免把局部结论直接推广到全站。
一个实际动作是:在验收记录里为每个样例标注“适用页面类型”和“未覆盖条件”。这样做的结果是,后续新增页面时,团队能快速判断是复用已有结论,还是必须补一组样例。若把未覆盖条件写成“待观察”,而不是“已通过”,就能避免规模化后才发现例外。
验收样例的价值不在于一次性跑完,而在于它能把失败定位到可决策的层面。可以根据结果分三种处理:
这样做的结果是,验收样例不再是一份静态清单,而是一组能反复使用的判断依据。同一组件在不同页面表现不同时,先问“差异属于输入、容器还是链路”,再决定改页面还是改组件,最后把未覆盖条件写清楚。只有把适用边界和下一步动作一起留下,验收样例才真正支持后续页面复用,而不是制造一种已经全站通过的错觉。