Squish对象识别不准,通常不是工具突然失效,而是对象名里混进了易变属性,或者界面刷新、时序和对象层级发生了变化。处理这类问题,最有效的路径不是反复重录脚本,而是先把对象识别规则改稳,再把属性选择口径固定下来,这样后面的脚本维护量会小很多。
一、Squish对象识别不准怎么办
对象识别不准时,先从对象名本身查,不要一上来怀疑应用有bug。Squish在运行时会先根据对象映射里的符号名找到真实名,再按真实名里的属性去匹配对象;如果属性过窄、对象没准备好,或者当前视图已经过期,就很容易报找不到对象。
1、先回到Object Map检查真实名是不是写得太死
如果真实名里带了版本号、文件名、动态标题、状态文本这类会变化的值,脚本就会随着界面变化而失效。先在Object Map里找到对应条目,确认是不是把易变文本直接写进了真实名。
2、对象文本会变化时优先改成通配匹配
Squish对大多数字符串属性支持精确匹配、通配匹配和正则匹配。像windowTitle这类会变化的属性,不要继续用完整文本去锁定,改成通配或正则后,通常就能避免版本号、文件名变化带来的识别失败。
3、对象明明存在但报找不到时先查时序
Squish不仅要找到对象,还会检查对象是否可见、可用。很多报错其实不是对象不存在,而是按钮还没显示完成,界面还在加载,或者动画没结束,这时先把等待时间放宽,再判断是不是识别规则问题。
4、Spy里的对象树要先刷新再下结论
Application Objects视图显示的是某个时刻已知的对象树,后续如果弹窗新开、窗口关闭或页面刷新,这个视图可能已经过期。排查前先点刷新,再看当前对象属性,否则你复制出来的对象名很可能已经不是现场真实状态。
5、优先用符号名驱动脚本,不要到处写真实名
Object Map的意义就是把脚本和界面变化隔开。只要对象还能通过同一个符号名找到,你改Object Map就行,不必去批量改脚本,所以日常脚本里应尽量用符号名而不是手写一长串真实名。
二、Squish对象属性选择怎么优化
属性选择的目标不是把属性写得越多越安全,而是用最少但稳定的一组属性唯一定位对象。属性过多会让对象名变脆,属性过少又会误匹配,所以优化的核心是保留稳定且有区分度的属性,删除易变但不关键的属性。
1、对象有明确名称时优先用type加name
如果应用对象本身有程序员赋予的对象名,Squish通常只用type和name两项就能稳定识别,这往往是最省维护成本的组合。先看对象是否已有明确名称,再决定是否继续叠加其它属性。
2、对象没有名称时改用稳定显示属性
没有name的对象可以改用text、visible这类属性组合识别,但前提是这些值本身稳定。若text会切换,就不要把它当核心识别字段,而应寻找更稳定的层级关系或容器关系。
3、谨慎处理container和window这类层级属性
层级属性能提高唯一性,但也会让对象名对界面结构变得敏感。窗口经常切换时,可以评估是否需要放宽window或container约束;但对于依赖容器上下文的对象,不能为了省事一刀切删除。
4、少用易变文本,多用角色和类型
标题、状态字样、计数值、标签后缀都很容易变化,而类型、角色、明确名称、稳定父对象通常更可靠。优化属性时,先保住类型与稳定身份,再考虑补充少量辅助属性,而不是把所有可见字段都塞进真实名。
5、改属性后先做一次回归而不是直接推广
Object Map里的修改不能直接撤销,所以每次调整属性都应先备份对象映射,再在一个小用例上验证通过后再推广到整套脚本,避免一次错误修改把一批对象识别都带偏。
三、Squish对象识别与属性维护
对象识别想长期稳定,不能只靠临时修一个名字,而要把维护动作固定成习惯。把对象映射、属性选择、排错步骤做成统一口径后,团队在版本升级和界面微调时才不会每次都从头重录。
1、录制后第一时间清理易变对象名
每次录完脚本,都要立刻检查新生成的对象名里有没有动态标题、版本号、文件路径、状态文本,这一步越早做,后面越不容易积累一堆脆弱对象。
2、用Application Objects加Properties联动选属性
排查时不要只看脚本报错,要在Spy里同时看对象树和属性视图,确认当前对象到底有哪些稳定属性,再决定是改真实名还是改等待逻辑。Squish本身就是通过属性识别对象,所以属性视图是最直接的判断依据。
3、把高频问题对象单独沉淀成规则
像主窗口、弹窗、表格项、动态按钮这类高频对象,建议形成团队自己的命名与选属性规则,谁录到都按同一口径改,这样后期维护才不会每个人各改一套。
4、把对象找不到分成识别问题和时序问题两类
如果对象属性明显不匹配,就是识别问题;如果对象最终会出现但报错发生得太早,就是时序问题。把这两类问题先分开,排查效率会高很多,也能避免明明是等待不够却一直去改对象名。
5、定期备份对象映射文件
脚本型对象映射和文本型对象映射都有固定存放位置,定期备份后,哪怕有人改坏了真实名,也能快速回退到稳定版本,不至于让整套测试资产一起受影响。
总结
Squish对象识别不准怎么办,重点是先回到Object Map检查真实名是否过窄,再区分是属性问题还是时序问题;Squish对象属性选择怎么优化,关键是优先保留稳定且有区分度的属性,少用动态文本,多用type、name和稳定层级。把这套检查与维护动作固定下来后,Squish脚本的稳定性和后续维护效率都会明显提升。