结论先说:当同一组件在A页面正常、在B页面异常时,验收样例要按“组件+宿主页面条件”成对构造,而不是只给组件本身写一条通用用例。只有当两个页面的差异能被定位到可复现的条件(数据量、容器宽度、加载顺序、权限状态等)时,才适合把该条件写进验收项;如果差异无法稳定复现,先不要急着定验收标准,否则会把偶发现象固化成错误要求。
同一组件表现不同,常见原因分两类。第一类是宿主条件不同:父容器宽度、栅格列数、页面是否带侧栏、同屏是否还有别的脚本、数据条数多少。第二类是组件自身状态不同:默认态、空数据态、加载态、错误态、超长文本态。验收样例要能区分这两类,否则测试结论会互相矛盾。
一个可操作的判断动作:把B页面里出问题的组件,原样复制到一个只有该组件的最小页面里。如果最小页面正常,说明问题来自宿主条件,验收样例就应记录“在什么容器和相邻元素下必须正常”;如果最小页面仍异常,说明问题在组件内部,验收样例应改为覆盖组件状态组合。
不要为每个页面各写一套互不相干的检查项。更有效的做法是:先选一个表现正常的页面作为基线样例,再为异常页面写一条只改变一个变量的对照样例。这样出现失败时,能直接指向是哪个条件触发了问题。
假设一个例子:某列表组件在栏目页显示正常,在详情页相关推荐区出现文字截断。基线样例记录栏目页为通栏、数据约十条;对照样例只把容器改为详情页的窄栏、数据仍为十条。若此时复现截断,就能把验收条件写成“在窄栏容器下,标题超过两行时不得遮挡操作按钮”。这个结论只对窄栏条件成立,不能反过来要求所有页面都按窄栏标准改。
如果两个页面的差异来自业务上本就允许的差异,例如详情页侧栏本来就窄、列表页本来就宽,那么验收标准应按页面类型分别设定,而不是强行统一。此时放宽的是尺寸和排布要求,收紧的是交互一致性:同一组件在两种容器下,点击、跳转、状态反馈应当一致。
反过来,如果差异来自本不该存在的条件,例如同一组件在相同容器、相同数据量下仍表现不同,就应收紧验收:把“相同输入必须得到相同可观察结果”写成硬性条件,并保留复现步骤。这样做的结果是,后续修复若只改了其中一个页面,验收仍会失败,能防止用局部补丁掩盖共性问题。
如果差异只在特定网络速度、特定账号权限或特定浏览器版本下出现,而你的验收环境无法稳定复现这些条件,那么“成对样例”方法会失效:你构造的对照样例可能全部通过,但线上仍出问题。此时合理的下一步不是继续加样例,而是先确认能否在验收环境里稳定制造该条件;如果不能,就应把该差异记为待观察项,并说明缺少的复现条件,而不是把它写成通过或失败。
另一个反例是:两个页面的组件看似相同,实际来自不同版本或不同配置。这种情况下差异不是宿主条件造成的,成对样例会把原因引向错误方向。先核对两处组件是否同源,再决定是否继续构造对照样例。
先做一次最小页面复制,判定问题归属;再为异常页面写一条只改一个变量的对照样例;最后在验收记录里注明该结论适用的容器、数据和权限条件。若条件无法稳定复现,就保留复现步骤和缺失条件,等环境具备后再补样例,不要用一次通过的结果代替结论。