先把问题从“组件坏了”改成“组件在什么页面条件下表现不同”。构造验收样例的最小动作,是为这个组件建一个两列对照:左列写它所在页面的差异条件,右列写同一操作后你观察到的结果;然后只保留能稳定复现的那一组条件,用它作为验收样例。这个动作能帮你把争论变成可重复的检查,但不能证明某框架或某CMS会自动改善表现,也不能推出某个页面结构一定导致某种结果。
假设你在做一个承德本地企业的信息展示站,站内有一个“联系表单”组件,出现在首页、产品列表页和详情页。同一个组件在首页提交后提示成功,在详情页提交后没有提示;你没有后台日志权限,也拿不到完整提交记录。此时不能直接判断是组件代码有错,因为三个页面的差异条件至少包括:组件被放置的容器宽度不同、页面是否加载了同一份脚本、表单附近是否有其他同名元素、页面是否在滚动区域内部。你要做的是把这些差异条件写下来,而不是先改代码。
这一步的实际动作是:打开三个页面,对同一个组件执行同一个操作,记录“页面路径、操作、可见结果、是否可重复”。如果详情页连续三次都没有提示,而首页连续三次都有提示,那么详情页这一组条件就值得进入验收样例。如果三个页面表现时有时无,说明还有未记录的条件,比如网络状态、浏览器窗口宽度或页面加载顺序,此时不能把任何一组当作稳定样例。
验收样例不是一句“组件正常”,而是一组可重复的条件和预期结果。针对上面的假设情境,可以这样构造:
这三个样例的作用是帮你区分原因。样例A成立、样例B不成立,只能说明“在当前操作下两个页面的结果不同”,不能直接说明是容器宽度造成的。样例C才是用来验证容器宽度这个假设的对照。如果样例C的结果与详情页一致,你可以把容器宽度写进验收样例;如果不一致,就要继续找其他条件,比如脚本加载顺序或同名元素冲突。
没有后台日志和完整提交记录时,仍然可以做三件事。第一,用浏览器开发者工具查看当前页面加载了哪些脚本,以及提交时控制台是否报错;这不需要后台权限,但只能看到当前浏览器会话的情况。第二,把组件单独放到一个空白页面里,只保留必要结构,再执行同一操作;如果空白页正常,说明问题与页面环境有关,而不是组件本身完全不可用。第三,把三个页面的可见差异写成清单,包括容器宽度、周围元素、脚本引用和滚动位置,然后逐项对照。
这些动作的结果会直接影响下一步:如果空白页正常,下一步应优先检查页面环境差异;如果空白页也不正常,下一步应检查组件自身的脚本或结构。注意,控制台没有报错不能证明组件没有问题,因为有些失败不会在控制台显示;提交后没有提示也不能单独证明数据没有发出,因为提示可能被隐藏或延迟。
可用的验收样例至少包含四个信息:页面位置、操作步骤、观察到的结果、重复次数。例如“在详情页,窗口宽度设为360像素,点击提交按钮,连续三次没有出现提示”就是一个可用的样例。它不依赖后台数据,也不依赖对框架的判断。相反,“详情页表单有问题”不是可用的验收样例,因为它没有说明操作条件和观察结果。
如果你要把样例交给同事复现,还需要注明假设。比如“假设提示元素在窄容器内被挤出可视区,因此样例B预期无提示;如果实际提示存在但不可见,则这个假设不成立。”这样写能避免把一次观察当成结论。验收样例的用途是让不同人执行同一操作后能得到可比较的结果,而不是直接给出修复方案。
当你能稳定复现一组条件后,下一步不是立刻改组件,而是先判断这组条件是否属于页面环境。如果属于页面环境,优先调整页面容器或加载方式,再用同一组样例复测;如果调整后结果改变,说明这组条件是有效的区分依据,可以保留在验收样例里。如果调整后结果不变,说明之前的假设不成立,需要回到差异清单继续排查。
整个过程不需要完整数据或后台权限,但能得出的结论有限:你只能说明“在当前记录条件下,这个组件在这组页面里表现不同”,不能说明所有用户都会遇到,也不能说明某种技术方案一定更好。把这一点写进验收样例的备注里,后续再拿到更多数据时,才有机会把样例升级为更可靠的判断依据。这样处理,同一组件在不同页面的异常就不会停留在口头描述,而会变成可执行、可复测、可交接的验收材料。