QTP技术支持之QTP对象无法识别,转自582357212的个人空间,链接:http://www.51testing.com/html/64/305564-847787.html

QTP自动化测试从业者,或者很多练习使用QTP开发自动化测试代码的人员遇到最多的问题恐怕就是对象无法识别了,对象无法识别原因有很多种,根据经常对QTP自动化测试脚本开发人员的技术Support,我总结了一下对象无法识别问题,并给出了对应的原因分析简要说明,主要分为以下几种:

一,最简单的,但可能不太常遇到的,QTP对被测对像控件识别混乱,甚至无法识别,例如对.net控件识别为Window控件。

常见原因:

1.检查QTP Add-in中的插件选择是否正确,不同被测对象可能需要不同的Add-in插件。

2.一些Application被测程序 插件正确但是仍会无法识别,这时候在自动化运行和设置那个窗口 选择第一个选项,加入被测程序的.exe路径,和其.exe文件所在的文件夹路径,点击运行,通过QTP自己来启动被测程序,这时候你再用对象查看器查看对象已经可以识别了,此设置一般设置一次则可。

3.先打开了被测程序,后打开QTP,在一些特殊情况下 也会导致QTP无法正确的识别出对象,这时候关掉被测程序,使用QTP启动被测程序,即可识别。

二,最常见的,是运行过程中弹出了对象无法识别的错误。

常见原因:

1.最常见的就是被测控件对象在对象库中的属性值和运行时被测程序中的控件对象属性值不匹配,这时候可以选择暂停QTP运行,如果是使用描述性编程,就需要将描述语句中涉及该对象的属性加到Debug View中,然后通过object SPY查看正在运行的被测控件对象属性,两者对比查找出哪个属性不同,为什么不同,最终解决这个问题。如果是使用对象库的,则查看对象库属性窗口中的对象属性object和object SPY查看正在运行的被测控件对象属性进行对比查看哪个属性不同,如果有不同,改正即可。

2.被测对象在被测程序上找到不止一个,那么这时候通过查看代码中对象属性描述或者对象库中对象属性窗口中的属性和object SPY查看正在运行的被测控件对象属性进行对比,会发现两者一致,因此这时候需要加Index属性或者Location属性值来唯一定位对象,或者能找到其它能够唯一识别出对象的属性加进去也可,至于index值为多少或者Location值为多少,则要根据具体对象所在位置进行分析了。

3.被测对象的父亲找不到,无论描述性编程还是对象库,对象的存在都是有层级结构的,它可能会有儿子对象或者父亲对象,如果它是单独存在,即只有一层的对象 那也不会出现这个错误的。但对于大多数有多层级的对象则有可能出现这个错误了,这时候我们需要找到它的父亲对象,对其属性和通过SPY查看正在运行的被测控件对象属性进行对比,最终找到哪个父亲对象是无法识别的,按照1所述解决它。

4.引用了外部对象库,这时候你可能发现什么都正确,但对象仍是无法识别,这个问题是要检查本地对象库和被引用的对象库,是否是本地对象库扔保留着,但其部分对象属性已经改变,在引用外部对象库后,是否添加过对象到对象库中,QTP在你添加对象到对象库中时,会默认添加到本地对象库中,而不会将其放到引用的外部对象库中。最后确认下对象库引用到哪个Action,是否真的正确引用进来,通过这些检查,你自然就发现问题了,解决方案也就多种多样可以随便选了

三,就是第三方控件无法识别问题了,这个问题很容易发现,但不容易解决,很多常见解决方案是通过坐标来定位对象,但是这个方法平台移植性差,协同开发脚本稳定性差,因此一般会采用其它方案,具体使用什么方案,那就得根据团队手头资源,测试计划,自动化编码人员水平等综合考虑制定了。实在不行可以跟开发协调使用其它对象,或者直接考虑该部分不实现自动化,如果功能块独立 涉及的测试用例也不多可以考虑直接将这块功能点舍弃,不实现自动化,仍由手工执行。

当然对象识别也还有一些特殊情况,需要自己Debug分析,例如一些QTP开发环境问题,QTP版本问题,公共对象使用管理不当问题,等等,这都需要根据具体情况具体分析。