同一组件在不同页面表现不同,通常不是组件本身坏了,而是页面级样式、容器宽度、数据形态和加载顺序在起作用。构造验收样例时,先判断差异属于“可复现的页面环境差异”还是“偶发的时序差异”:前者应把页面变量写进样例,后者应把等待条件和失败重试写进样例。两种做法不能混用,否则验收会变成碰运气。
如果同一组件在列表页正常、在详情页错位,刷新后仍然稳定,这属于页面环境差异。此时样例要固定页面变量,而不是反复刷新碰运气。可区分的原因包括:父容器宽度不同、页面级 CSS 覆盖了组件默认值、传入的数据条数或字段长度不同、组件被放在不同的栅格列中。
如果组件时好时坏,同一页面刷新几次结果不同,这属于时序差异。常见原因包括异步数据返回顺序、字体或图片加载完成时机、懒加载触发点、动画过渡尚未结束就被断言。此时样例要加入等待条件和重试上限,而不是把页面变量写死。
判断依据可以这样用:连续刷新同一页面十次,若失败位置和外观完全一致,按环境差异处理;若失败位置漂移,按时序差异处理。这个判断动作直接决定下一步是改样例的页面参数,还是改样例的等待策略。
当差异稳定复现时,验收样例不应只写“打开某页面看组件”,而应写成一组带页面参数的检查项。每个检查项至少记录四项:页面路径、该页面的容器宽度、传入组件的数据形态、期望的组件边界。这样做的代价是样例数量会随页面类型增加,但换来的是失败可定位。
具体动作可以这样执行:先选出三个差异最大的页面,例如首页、列表页、详情页,分别测量组件外层容器的实际宽度,并记录组件在该宽度下的换行位置和最小高度。然后把这三个数值写成样例的断言阈值。结果是,当组件再次在某页错位时,你能立刻看出是容器宽度超出了阈值,还是数据长度超出了预期,而不是重新猜测原因。
例外情况是:如果差异只出现在某个已废弃的旧模板页,且该页即将下线,就不必为它单独建样例,只需在验收记录中标注“不纳入本次范围”,避免样例集被无效页面拖大。
当差异表现为偶发时,样例里写固定延时通常不可靠:延时太短会误报,延时太长会拖慢验收。更合适的做法是等待一个可观察的信号,例如组件内某个元素出现、某个属性变为预期值、或数据列表长度达到传入条数。等待信号比固定秒数更能反映真实完成状态。
同时要给重试设上限。假设某组件在数据返回前会短暂显示占位,验收样例等待“占位消失且真实内容出现”,若超过三次重试仍未出现,就判为失败并记录当时的网络请求状态。这个动作的结果是:失败样例会附带可复查的中间状态,而不是只留下一句“页面不对”。
需要说明的是,偶发差异有时来自测试环境本身,例如后端响应慢或静态资源被缓存。此时不能仅凭一次失败就断定组件有缺陷,应先用同一份样例在稳定网络下复跑,复跑仍失败才进入修复流程。
假设某酒泉网站制作项目中,一个卡片组件在列表页每行三张、在详情页侧栏每行一张。验收样例可以这样写:列表页断言卡片宽度落在容器宽度的三分之一附近,详情页断言卡片宽度等于侧栏宽度;若列表页卡片换行位置与详情页一致,则说明组件忽略了父容器宽度,属于环境差异,应回到样式覆盖检查。这个例子中的数值只是说明比较方法,不代表任何真实项目结论。
不要一开始就为所有页面建样例。先固定最小集合:一个稳定复现差异的页面、一个偶发差异的页面、一个正常页面作为对照。运行这组样例后,若稳定差异页失败而对照页通过,说明样例已经能区分环境问题;若偶发页在多次运行中结果摇摆,说明等待策略还需调整。这个动作的结果会告诉你下一步是扩大样例覆盖,还是先修组件本身。
最后提醒一点:请求量、抓取量或某项统计归零,并不能单独证明组件处理正确,它还可能来自缓存命中、页面未被访问或统计口径变化。验收结论应建立在可复现的页面表现和明确的断言条件上。