在用Squish做GUI自动化时,“录制不到点击步骤”通常不是脚本语言问题,而是录制时的挂接范围、控件识别方式或录制偏好把点击行为绕过去了;而“录制模式切换”如果没分清是录整条用例还是只插一段片段,也很容易把原脚本覆盖掉。把录制入口、AUT启动方式、控件识别与录制偏好四件事理顺,大多数录制问题都能在几轮内定位并修好。
一、squish录制不到点击步骤怎么办
遇到点了按钮却不出mouseClick这类语句时,先别急着重装或换脚本语言,先确认录制链路是否真的“在录”。排查建议按从录制状态到控件识别、再到进程范围的顺序走,能更快把问题缩小到一两处配置。
1、先确认录制确实已开始且写入的是你正在编辑的脚本
打开要写入的用例脚本编辑器,把光标放到你希望插入的位置,然后用【Run】→【Record Snippet】开始录制,录制结束用控制条里的【Stop Recording】停止;如果你用的是【Record Test Case】录制整条用例,确认当前用例是空脚本,否则会被整段替换,造成你以为“没录到”。
2、核对AUT是否由Squish启动或是否在正确的上下文中录制
优先让Squish在录制时自动拉起AUT,这样脚本里会出现startApplication相关调用,说明录制上下文完整;若你是先手动启动应用再录制,容易出现录制器没有正确附加到目标进程,表现为只能录到少量窗口操作或完全不记点击。录制时以控制条出现并处于录制状态作为最直观的确认信号。
3、检查Squish工具包与squishserver选择是否匹配你的应用技术栈
同一台机上可能装了多个Squish工具包,若工具包选错,会出现对象树抓不到、点击不落脚本或只能走图像方式的情况;进入【Edit】→【Preferences】里找到Squish相关设置,确认当前使用的工具目录与目标应用一致,再重新启动录制流程。
4、点击发生在原生控件或嵌入控件上时,补齐控件识别或白名单
如果你的界面里混有ActiveX、COM控件或某些原生Windows控件,Squish在无法明确识别时可能不会把点击按预期录成对象级操作;做法是为AUT准备对应的ini配置,把需要识别的控件类名加入Whitelist,必要时开启COM Object Detection,然后通过squishserver注册或在套件设置里用环境变量指向该ini,让录制器按你的声明去识别这些控件。
5、排查点击目标是否落在子进程窗口或被脚本启动器拉起的二级进程里
不少桌面程序会用启动器再拉起真正的可交互进程,或在操作时弹出独立子进程窗口;这种情况下需要把真正的可执行文件加入Mapped AUT,或把路径加入AUT Path列表,确保Squish会挂接到这些子进程,否则你点得到但录制不到。
6、确认不是录制偏好把事件压缩到“看起来像没录到”
进入【Edit】→【Preferences】→【Squish】→【Recording】,检查Script Synchronization与Compress Events等选项;某些场景下事件压缩会让录制脚本变短,导致你以为点击被吞,但实际被合并成更抽象的操作语句。遇到争议时先临时关闭事件压缩再录一段对比最直观。
二、squish录制模式怎么切换
Squish里常被叫作“录制模式”的东西,实际至少包含三层:录制整条用例还是录制片段、录制时的插入方式、以及录制时同步点与事件压缩的生成方式。把这三层分开切换,才能既不覆盖脚本,也能得到更适合维护的录制结果。
1、在录制整条用例与只插入片段之间切换
需要重建整条脚本时,用【Run】→【Record Test Case】或在测试套件视图对目标用例点【Record】;只想补一段步骤时,用【Run】→【Record Snippet】把片段插进当前光标处,结束时在控制条点【Stop Recording】或【Cancel】分别对应保留与放弃本次片段。
2、在录制过程中切换插入类操作的方式
录制时如果遇到对象抓不到但又必须点击,你可以在控制条用【Insert】菜单切换为基于图像或OCR的插入方式,例如插入mouseClick基于图像定位的语句;完成插入后再回到常规录制,避免整条用例都退化为图像驱动。
3、切换录制时同步点的生成口径
在【Edit】→【Preferences】→【Squish】→【Recording】里切换Script Synchronization相关选项,常见是按对象存在性生成等待,或按时间生成延时;当你的应用加载抖动大时,倾向用对象存在性更稳,而当对象难以被识别时,短时间延时能先让用例跑通再回头补同步点。
4、切换是否压缩事件以平衡可读性与可追溯性
同样在【Squish】→【Recording】里处理Compress Events;想快速定位问题时可以先关闭压缩保留更多原始事件,等对象识别与同步稳定后再开启压缩,让脚本更短更容易维护。
5、需要控制是否录坐标时,按技术栈选择配置入口
以Qt为例,Squish默认可能会把点击记录为带相对坐标的mouseClick;如果你想减少坐标依赖,可以在SQUISHDIRetc下的qtwrapper.ini里用RecordWithoutCoordinates配置需要“去坐标”的类型列表,让后续录制更偏对象级表达。
三、squish录制脚本可回放性怎么检查
录制能落脚本只是第一步,真正省时的是“回放稳定且改动可控”。把对象命名集中管理、在录制阶段插入少量校验点、再用对象存在性检查把风险提前暴露,后续维护成本会明显下降。
1、用【Spy】确认点击对象能被识别到对象树而不是只能抓屏
录制前或录制中切到【Spy】视角,用对象拾取器点一次目标控件,确认能看到稳定的属性集合;如果Spy里类型为Unknown或属性漂移很大,就别急着录长流程,先把可识别性解决再录制。
2、把常用控件纳入Object Map以降低后续改名成本
让录制先自动填充Object Map,再在Object Map里把关键控件的符号名整理成团队统一口径;对象名变化时只改Object Map一处即可,不用在多条脚本里全局替换,这是Squish用Object Map降低维护成本的核心路径。
3、用对象存在性检查提前发现“录到了但跑不动”的隐患
在Object Map视图选中关键符号名,执行检查对象存在性的操作,能快速发现某些对象在不同窗口状态下是否可见可用;这一步做完再去跑长回归,比回放到一半才崩更省时间。
4、录制过程中插入少量校验点把结果闭环
在控制条点击【Verify】→【Properties】插入属性校验,或插入截图类校验,把关键步骤的结果固定住;这样当回放失败时你能区分是点击没执行到,还是执行到了但界面状态没到位。
5、回放时打开控制条日志窗口核对失败点与对象解析信息
回放阶段用控制条右下角的展开按钮打开日志窗口,结合失败时刻的对象解析与等待超时信息定位问题属于对象识别、同步等待还是进程挂接范围;同一类失败集中修一次,比在脚本里到处加延时更可控。
总结
squish录制不到点击步骤怎么办,squish录制模式怎么切换这两件事,核心都是先把录制链路打通,再把录制产物变成可维护的对象级脚本:用正确的录制入口区分整条录制与片段插入,用Preferences里的录制偏好控制同步与事件压缩,用AUT配置与白名单解决原生控件与子进程挂接,最后用Spy与Object Map把回放稳定性检查前置。按这条顺序处理,录制缺步与模式切换带来的返工会明显减少。