Squish中文网站 > 热门推荐 > Squish怎么设置对象识别规则 Squish对象映射失效如何排查
教程中心分类
Squish怎么设置对象识别规则 Squish对象映射失效如何排查
发布时间:2026/08/28 16:47:40

  Squish在录制测试时,会为界面对象建立符号名称和实际识别规则,执行测试时再根据对象属性去定位AUT中的控件。处理“Squish怎么设置对象识别规则,Squish对象映射失效如何排查”时,重点不是让规则包含越多属性越好,而是选择稳定、能够唯一识别对象的属性。窗口标题、动态文本、序号等容易变化的属性一旦被写入Object Map,界面稍有调整就可能导致原有脚本无法找到对象。Squish 9.2仍以Symbolic Name和Real Name的映射作为对象识别的重要机制。

  一、Squish怎么设置对象识别规则

 

  对象识别规则主要保存在【Object Map】中。每个条目包含一个便于脚本调用的Symbolic Name,以及由多个属性组成的Real Name。调整时应优先保留稳定属性,再根据唯一性增加必要条件。

 

  1、先查看对象当前使用了哪些属性

 

  ①启动AUT,并进入需要识别控件所在的界面。

 

  ②在Squish IDE中打开【Object Map】。

 

  ③找到目标Symbolic Name,查看对应Real Name。

 

  ④同时使用【Spy】或【Object Picker】选中真实对象。

 

  ⑤在【Properties】中对比【type】【name】【text】【container】等属性当前值。

 

  对于多数GUI工具包,【type】通常是Real Name中的基础属性;Qt对象还可以使用【name】、【container】、【buddyText】等属性辅助区分。

 

  2、优先保留稳定且具有区分度的属性

 

  ①如果控件具有长期不变的objectName,优先保留【name】。

 

  ②同类型对象较多时,再增加【container】或关联标签等属性。

 

  ③删除版本号、当前文件名、随机编号等容易变化的属性。

 

  ④修改后点击【Check Existence】,确认对象仍能被找到。

 

  ⑤再使用【Highlight Object】,确认实际匹配的就是目标控件。

 

  Squish官方指出,Real Name属性太多会让对象容易因界面变化而失效,属性太少又可能同时匹配多个对象,因此规则应在【稳定性】和【唯一性】之间取得平衡。

 

  3、动态文本改用通配符匹配

 

  窗口标题、按钮文本或标签内容会动态变化时,不适合继续使用完全匹配。

 

  ①在【Object Map】中找到变化的字符串属性。

 

  ②双击属性和值之间的匹配运算符。

 

  ③简单变化优先调整为【Wildcard】。

 

  ④只有通配符不足以表达条件时,再使用【Regular Expression】。

 

  ⑤修改后分别在几种界面状态下执行【Check Existence】。

 

  例如窗口标题固定以产品名开头、后面跟当前文件名时,可以只匹配固定部分。Squish允许多数字符串属性使用精确、Wildcard或正则表达式匹配,但【type】等特殊属性仍要求精确匹配;官方也建议能够使用Wildcard时优先使用,维护成本通常低于正则表达式。

 

  二、Squish对象映射失效如何排查

 

  对象映射失效时,常见表现是waitForObject()超时、测试步骤突然找不到控件,或者脚本找到了错误对象。排查时应先验证Object Map本身还能不能定位对象,再进一步判断是属性变化、层级变化还是对象出现时机发生变化。

 

  1、先用Object Map确认对象是否还能匹配

 

  ①启动AUT并进入报错步骤对应界面。

 

  ②打开【Object Map】,找到失败的Symbolic Name。

 

  ③执行【Check Existence】。

 

  ④如果显示无法找到,再执行【Show in Application Objects】或使用Spy重新拾取当前对象。

 

  ⑤把当前Real Name与原映射逐项比较。

 

  如果【Check Existence】已经失败,说明重点应检查对象规则;如果这里能够正确找到对象,而脚本运行仍超时,则还需要检查对象出现时机或测试流程。

  2、检查是否有属性值发生变化

 

  ①先比较【name】【text】【windowTitle】等直接属性。

 

  ②再检查【container】【window】等父级关联是否发生变化。

 

  ③发现动态文本后,将其删除或改成Wildcard。

 

  ④发现控件objectName被开发修改时,更新对应Real Name。

 

  ⑤保存Object Map后重新执行原失败步骤。

 

  Squish在运行时会把Real Name中的属性作为查找条件,其中任何一个要求精确匹配的值变化,都可能导致整个符号对象名失效。

 

  3、重点检查container和occurrence

 

  界面改版后,即使按钮文字没有变化,父容器或同类控件数量变化也可能让旧映射失效。

 

  ①查看Real Name中是否包含【container】。

 

  ②确认目标控件是否被移动到新的面板、窗口或标签页。

 

  ③检查是否存在【occurrence】属性。

 

  ④如果新增了相同控件,确认原序号是否已经变化。

 

  ⑤尽量用稳定的【name】、标签关系或容器关系替代过度依赖【occurrence】。

 

  【occurrence】用于区分属性完全相同的多个对象,因此界面新增同类控件后,它的序号可能变化,更适合在没有稳定属性时作为补充,而不宜成为主要识别依据。

 

  4、对象能找到但脚本仍失败时检查等待逻辑

 

  ①在失败位置前使用【object.exists()】确认对象当前是否存在。

 

  ②对象需要等待显示时继续使用【waitForObject()】。

 

  ③对象已经存在但暂时不可见时,检查是否错误依赖可见状态。

 

  ④确认测试步骤是否在窗口或页面真正加载完成后才执行。

 

  ⑤不要简单通过持续增加固定延时掩盖对象状态问题。

 

  Squish的waitForObject()会等待对象可见并可用,默认找不到时会产生LookupError;object.exists()则适合快速判断对象当前是否存在。

 

  三、对象规则修复后怎么提高后续稳定性

 

  对象映射修好以后,还应检查这次失效是不是由一类共同问题造成。否则界面下一次升级后,同样的动态属性还会在其他对象上继续触发失败。

 

  1、统一清理容易变化的识别属性

 

  ①筛选同一页面中的主要Symbolic Name。

 

  ②检查是否大量使用版本号、业务数据、窗口动态标题等属性。

 

  ③能使用【name】或稳定容器关系时优先替换。

 

  ④动态字符串统一改成合理的【Wildcard】规则。

 

  ⑤逐个使用【Highlight Object】确认修改后没有匹配到其他控件。

 

  2、修改界面后优先维护Object Map

 

  ①AUT升级后先运行一组核心冒烟测试。

 

  ②发现对象识别失败时,优先修改对应Object Map条目。

 

  ③不要直接在大量测试脚本中替换Real Name。

 

  ④修复一个Symbolic Name后重新运行所有引用该对象的用例。

 

  Symbolic Name的价值就在于把脚本调用与真正的属性规则分开。Squish官方也建议尽量使用Symbolic Name,这样对象层级或属性变化后,可以集中修改Object Map,而不必逐个修改测试脚本。

  总结

 

  Squish对象识别是否稳定,核心取决于Real Name中使用的属性是否既稳定又足够唯一。对象映射失效后,先通过Object Map确认是否还能找到对象,再比较属性、父级容器和occurrence变化,可以较快判断问题发生在哪一层;如果映射本身正常,则继续检查对象出现时机和等待逻辑。把动态文本从精确匹配调整为更稳定的规则,并长期通过Symbolic Name集中维护对象映射,可以明显减少界面调整带来的脚本失效。如需进一步了解Squish对象识别规则设置、Object Map维护及对象映射失效排查方法,欢迎联系咨询。

135 2431 0251