Squish中文网站 > 热门推荐 > Squish for Qt怎么识别控件 Squish for Qt对象名称变化后怎么适配
Squish for Qt怎么识别控件 Squish for Qt对象名称变化后怎么适配
发布时间:2026/06/01 15:05:11

  在Qt自动化测试里,Squish for Qt怎么识别控件,还有对象名称变化后怎么适配,是经常碰到的一类问题,脚本录的时候明明能点到按钮,一回放就提示找不到对象,这通常不是控件真的没了,而是当初用来认它的那些条件,已经跟着变了。Squish在录制控件时,会根据对象的属性去生成Object Map里的条目,每一条都包含一个符号名和一个真实名,等跑起来的时候,再去用真实名里存着的那组属性,去AUT里面把对象给找出来。

  一、Squish for Qt怎么识别控件

 

  Squish for Qt认控件,主要是靠着对象的属性,而不是屏幕上的坐标。在测试脚本里看到的那些冒号开头的名字,大多只是Object Map里头的符号名,真正在后面起作用的,是它底下拴着的那一套属性匹配规则。

 

  1、用Spy去查看控件身上的属性

 

  先把AUT给启动起来,然后在Squish IDE里把Spy给打开,去点一下目标的按钮、输入框、表格或者菜单项,去瞧一瞧它的class、name、text、visible、enabled、type这些属性,在Qt项目里头,要是开发那边给控件设好了稳定的objectName,那脚本维护起来就会省心很多;可要是控件身上就只有会变来变去的text,或者是光靠着它在层级里的位置来认,那回放的稳定性可就要差上一截了。

 

  2、去看一眼Object Map里头的真实名称

 

  把Object Map给打开,去找到当初录制时自动生成的那个符号名,再去瞅一瞅跟它对着的那个真实名。官方说明里讲过,Object Map这东西,它的用处就是在AUT里对象的层级,或者是对象的名字,发生了变化的时候,好帮着去维护那些测试的脚本,别只在脚本里头动手去改那个名字,真正要去调的,是在Object Map里面,那些被拿来给控件做定位的属性组合。

 

  3、要优先去用那种稳稳当当的属性

 

  在给控件做识别的时候,应该是头一个就去用class、objectName、type、window这一类不怎么爱变的信息,要少去依赖那些动不动就会变的text、index、坐标,还有那种临时给出来的编号,就比如讲,登录的那个按钮,它上头的文案,可能会从Login给改成Sign in,可要是它的objectName,打从一开始,就一直是loginButton没动弹过,那脚本它就没那么容易,被这点变化给弄失效了。

 

  二、对象名称变了以后要怎么去适配

 

  当对象的名字变了以后,可别一上来就直接去把整条用例都给重新录上一遍,一种更对路的法子,是先拿Spy去把新控件的那些属性给认准了,然后再去把Object Map给更新一下,让旧的脚本,还能接着去用原来那个符号名。

 

  1、拿Spy去重新把新对象给抓一遍

 

  去把AUT那个新版本的界面给打开,跑进那个报了错的页面里头,去用Spy把原来的那个控件给重新选中,去瞧一瞧它身上那些新的属性,然后再回过头来,去跟旧Object Map里头存着的那套真实名,给放在一块儿去比对比对,去看一看,这到底是objectName变了、是它上头那个父对象变了,还是text、index这一类,本来就是个帮手的属性,它给变了。

 

  2、去动手改一下Object Map里头的条目

 

  在Object Map里面,去找到那个已经不起作用了的对象,去把它对着的那个真实名,里头的属性值,给更新一下,官方的Object Map说明里头,是这么讲的,当对象的名字,或者是它父对象的名字,发生了变化以后,是可以去编辑Object Map的,好让那个符号名,能重新被拴到一套新的属性组合上去,这么一来,脚本里头那些waitForObject、clickButton、type,这一类的代码,就用不着去大动干戈地,再大面积地去改上一遍了。

  3、用检查的功能,去验证一下到底改好了没有

 

  在动手改完了以后,趁着AUT还在那跑着的功夫,去把Object Map里头的那个对象给选中,然后点右键,去用一下那个检查对象是不是还存在的功能,又或者是去用那个把对象给高亮出来的功能,去验证一下,它还能不能顺顺当当地,把那个目标控件,给找出来,官方的Object Map视图说明里也提过,可以用高亮对象的法子,在正跑着的GUI上头,去拿一个红框,把那个被找到的控件给圈出来,也可以去用那个在应用对象里显示的功能,去瞅一瞅,是哪一个对象被匹配上了。

 

  三、怎么让控件的识别变得更稳当

 

  Squish for Qt的对象适配,不能光靠着测试的人,到了后头再去想办法补救,开发那边的命名规矩,还有测试这边对对象的管理,这两样东西,也得要一块儿跟着去做才成,要不然的话,每一次界面上哪怕只是微微地调了那么一小下,脚本就会跟着,呼啦啦地,报出一大片错来。

 

  1、去推着开发那边,把objectName给设好

 

  那些顶顶关键的按钮、输入框、表格、Tab页、弹窗,还有菜单的条目,是要让开发的人,去给它们设上一个稳稳当当的objectName的,可别把上头显示的那个文案,给当成是唯一的、用来认它的条件,因为产品的语言、按钮上头的字,还有那些提示的文字,是经常会被拿去做调整的。

 

  2、要少去拿那些动态的属性,来当主要的匹配条件

 

  要是控件的属性里头,夹带着时间、序号、随机的ID,还有数据的条数,这一类的玩意儿,那就别把它给当成是那个唯一能去跟它配上的条件了,要是真碰上那种,非得去匹配动态内容的情况,那在Object Map的里面,是可以用上一些更宽松的匹配方式的,Qt的官方博客也提过,Object Map是能靠着通配符,或者是正则,去对付那些会发生变化的对象属性值的。

 

  3、把对象的变更,给纳进回归维护的流程里头去

 

  等着界面被改版了以后,先别急着去跑别的,头一件事,就是去把对象还在不在的检查,给跑上一遍,去把那些已经失效了的控件,给集中起来修好,然后再去跑那一整套完整的回归,对象名字被调整过,是要把原因给记下来的,就比如,是控件被重命名了、是它上头那个父窗口变了、是控件的类型被换掉了,还是上头写的文案被动手改过了,这些个信息留下来了,到了后面再去排查,就会快上很多。

  总结

 

  Squish for Qt怎么去认控件,还有对象的名字变了以后又要怎么去适配它,这里头最要紧的地方,就是得闹明白,那个符号名,它只不过是脚本里头,拿来称呼这个对象的一个名字罢了,而藏在真实名里头的那一套属性组合,才是真正被拿去,把那个控件给翻找出来的东西,在动手去认一个控件的时候,要先用Spy去把它身上的属性给瞧明白了,然后再跑到Object Map里头去,把那一套稳稳当当的规则,给它维护好了;等着对象的名字,发生了变化以后,要头一个想着,去把Object Map给更新掉,而不是一上来,就去把那一整套的脚本,都给重新录上一遍,开发那边,要是能配合着去把objectName给设稳当了,测试这一边呢,也尽量去少靠着那些个动态的属性,这么两边一块儿使劲,脚本回放时候的稳定性,就会眼看着,好上一大截。

135 2431 0251