Squish脚本能否稳定回放,很大程度上取决于对象映射。界面改版后,按钮文字、控件类型或父级窗口发生变化,旧映射便可能找不到对象。处理“Squish对象映射怎么维护Squish对象映射更新后脚本失效怎么办”,重点是更新对象的识别属性,尽量保留脚本正在引用的符号名称。
一、Squish对象映射怎么维护
对象映射把脚本中的符号名称,与控件真实属性对应起来。脚本重复使用同一个按钮时,只需维护一条映射,不必逐个修改测试步骤。Squish目前默认使用脚本式对象映射,内容通常保存在测试套件的shared/scripts/names文件中;旧套件也可能使用根目录下的objects.map。
1、从对象映射窗口检查条目
①在【Test Suites】视图中打开目标测试套件。
②点击【Object Map】,展开符号名称层级。
③选择需要维护的对象。
④在右侧查看类型、文字、名称和父级对象等属性。
⑤启动AUT后点击【Check Existence】检查对象是否存在。
⑥需要确认位置时,点击【Highlight Object】。
出现绿色标记,说明当前属性可以找到对象;显示红色叉号,则要继续检查属性变化。高亮出来的控件如果不是目标对象,说明映射条件过宽,已经匹配到了别的控件。
2、优先修改真实属性
界面上的“确定”改成“保存”,脚本引用的符号名称没必要跟着变。只要修正它对应的真实属性,原脚本通常还能继续使用。
①选中失效的符号名称。
②对照新版AUT找到目标控件。
③检查type、name、text、window等属性。
④删除已经失效的属性。
⑤补充新版控件中稳定且有区分度的属性。
⑥保存对象映射后重新回放。
符号名称更像测试脚本使用的固定代号,真实名称才负责寻找控件。只修改真实属性,可以把改动控制在对象映射中,不用让大量脚本一起变。
3、减少容易变化的识别条件
录制时自动生成的对象名称,有时会带上动态文字、位置序号或层级较深的父对象。短期能用,界面稍微调整就容易失效。
①使用【Application Objects】选中目标控件。
②在【Properties】中查看全部可识别属性。
③优先保留固定ID、对象名称和控件类型。
④谨慎使用会随数据变化的文本属性。
⑤两个对象属性接近时,再加入父容器或窗口属性。
⑥确认组合条件只能匹配一个对象。
属性不是越多越稳。把窗口标题、动态编号和多层父级全写进去,看着很严谨,实际任何一处变化都可能导致查找失败。通常保留两到三个稳定属性会更好。
二、Squish对象映射更新后脚本失效怎么办
更新映射后脚本突然报错,先看失败的是“名称引用”还是“对象查找”。前者多半改动了符号名称,后者则与真实属性、界面加载时间或对象层级有关。
1、检查符号名称是否被改动
①打开报错脚本,找到waitForObject或相关操作使用的名称。
②在【Object Map】中搜索同名条目。
③确认条目没有被删除、改名或移动到另一份映射。
④恢复原符号名称,或同步修改脚本引用。
⑤重新运行单个测试用例。
脚本式对象映射中的符号名称本质上是names文件里的变量。直接改变量名,而脚本仍引用旧名称,就会立即失效。维护时能不动符号名称,就尽量不动。
2、使用对象未找到窗口重新匹配
回放时waitForObject超时,Squish会打开【Object Not Found】窗口。这里可以直接选择新版控件,对比新旧属性。
①点击【Pick New Object】。
②在AUT中点选实际目标控件。
③比较旧映射与新对象的属性差异。
④保留稳定属性,删除失效条件。
⑤点击【Retry】重新查找。
⑥确认成功后保存映射。
这种方式适合按钮换文字、控件换类型或层级调整后的修复。新对象会继续写回原符号名称,因此脚本不需要跟着大改。
3、排查对象匹配过宽或过窄
映射过窄时会报“对象找不到”;条件过宽时,脚本可能点到同类控件中的另一个,看起来更让人摸不着头脑。
①使用【Check Existence】确认能否找到对象。
②点击【Show in Application Objects】查看实际匹配结果。
③发现多个相似对象时,补充name、父容器或窗口属性。
④若属性值包含动态编号,改用通配符或正则匹配。
⑤再次执行存在性检查和高亮测试。
使用通配符时,只放宽真正会变化的部分。比如标题末尾带订单号,可以忽略订单号;控件类型和所属窗口仍应保持明确。Squish的真实名称支持普通值、通配符和正则表达式。
4、确认问题是否来自加载时机
对象属性没有变化,但页面弹窗、列表或异步内容加载变慢,也会触发对象查找失败。
①确认AUT已经进入目标页面。
②检查对象是否需要滚动、切换页签或展开菜单后才出现。
③可见控件优先使用waitForObject等待。
④隐藏对象需要访问时,再考虑findObject。
⑤适当调整等待时间后重新运行。
findObject找不到对象时会直接抛出查找错误;可见控件更适合通过waitForObject等待出现。别为了赶进度到处加固定休眠,页面快一点或慢一点,脚本又会不稳定。
三、怎样让对象映射长期保持稳定
对象映射修好一次不难,难的是后续版本更新时少返工。名称规划、文件备份和团队修改方式,都需要提前约定。
1、按业务含义命名符号对象
①名称中写明页面、区域和控件用途。
②避免使用Button1、Object2等临时名称。
③同类对象采用统一命名顺序。
④公共窗口和导航控件单独整理。
⑤删除确认不再使用的重复条目。
符号名称应描述“它在测试里做什么”,而不是照抄当前按钮文字。界面文案以后可能调整,业务含义往往更稳定。
2、修改前备份并审查差异
①将对象映射文件纳入Git或其他版本管理。
②修改前提交当前可用版本。
③一次只处理一组失效对象。
④对比names文件或objects.map的修改内容。
⑤回放相关用例后再合并。
【Object Map】视图中的修改不能直接撤销。删除或编辑前保存副本,确实能少掉不少意外返工。
3、让开发端提供稳定对象属性
①整理经常失效的控件清单。
②请开发为关键控件设置固定对象名称或测试ID。
③避免用随机编号生成控件标识。
④弹窗和重复列表项保留稳定父级关系。
⑤版本发布前运行一轮对象识别检查。
对于Qt应用,关键控件设置稳定的objectName后,Squish更容易生成可靠对象名称。自动化测试和开发在这里配合一下,后续脚本维护会轻松很多。
总结
“Squish对象映射怎么维护Squish对象映射更新后脚本失效怎么办”的核心,是让脚本引用保持稳定,同时及时修正控件的真实识别属性。对象名称清楚、匹配范围合适,界面升级后就不用成片修改脚本。希望本文能为大家维护Squish自动化用例带来一些参考,如需进一步了解相关内容,欢迎联系咨询。