QTP运行过程中弹出无法识别对象和对象不唯一的解决方法

上一篇 / 下一篇  2010-09-21 16:28:02 / 个人分类:自动化测试技巧

问题一:Cannot Identify Object

QTP运行时报错说无法识别对象,如果你的对象在对象库里面本身存在但还报出这个错误,这就表示仓库中对象的描述与程序中对象的描述一定存在着差异。 解决对象描述问题的第一步是找到差异,最简单的方法是将仓库(Object Repository)中对象的属性值与程序中对象的属性值(用Object Spy查看)进行比较。比较的结果:

一.如果仓库和程序中对象属性有差别,则分两种情况

1. 如果同类对象都存在此问题,则可在Object Identification对话框中改变该类的识别属性的设置,或定义该类的Smart Identification设置并启用Smart Identification机制,这样QTP就可以唯一识别对象了。

2.  如果是单个对象存在此问题,则可以按照以下方法解决

a.如果被测程序中对象描述发生了改变,并且你也清楚改变的内容,并且该改变是永久性或长期性的,你可以直接手工修改仓库中对象描述中的相关属性值。

b.如果被测程序中的对象的属性值依赖于前面的步骤或其它对象,则将该属性值参数化,这样就可以使用其它步骤的输出值为属性值。

c.如果属性值的组成部分中,部分是固定的,部分是动态改变的,则可以将属性值设计为正则表达式。

d.如果属性值是遵循某种规则变化的,或者是不可预期的,则从对象描述中移除该属性,并向对象描述中添加一个或多个属性以便于QTP进行对象识别。

  e.将仓库中相应的对象删除,采用描述性编程的方式来识别对象;(实践证明此方法最好用)

二.如果仓库和程序中对象属性无差别,则说明这个错误可能与它的父对象有关(如仓库中父对象的属性值与程序中父对象的属性值不一致),也可能是仓库中的对象与程序中对象的继承关系不相同导致的。判断继承关系中哪个父对象出现问题的两种方法如下:

1.通过重新录制对象,检查到新旧对象是父对象的描述存在不同,还是它们的继承关系根本就不同。

 1)如果是父对象的描述问题,则在对象仓库中修改父对象的描述。

 2)如果是对象的继承关系不正确(即具有不同的父对象)引起的问题,则在脚本中找到所有使用该继承关系的实例,将它们替换为正确的继承关系。例如:有一个带有Frame的网站,你录制了一个操作针对Image对象“Poster”的操作步骤。在Object Repository窗口,你可以Image对象的继承关系如下所示:

 MyCompanyBrowser

 MyCompanyPage

  Main(Frame)

  Poster(image)

    当你运行脚本时,网页看起来没有什么不同,但是识别Image对象时却出现了“Cannot identiry object”的错误提示。当你重新录制操作步骤,然后在Object Repository窗口中查看新的Image对象时,发现该对象的继承关系如下所示:

 MyCompanyBrowser

     MyCompanyPage

          Poster(image)

    从中可以看出,Frame已经从Web Page中移除,所以尽管Image对象“Poster”的描述没有发生任何改变,但它的继承关系已经改变了。在Object Repository窗口,你可以看到新旧Image对象“Poster”是两个完全不同的对象:旧的位于已经被移除的Frame对象之下,而新的则直接位于Page“Mycompany”对象之下。修复这个问题,可以在脚本步骤中将旧的对象替换为新的对象。为了保持Object Repository窗口的整洁,你应删除那些已不再存在的对象(如本例中的Frame)。

2.创建Exist语句,以判断父对象的描述是否存在问题

     QTP在录制发生在某个对象上的操作时,也会同时去了解对象以及它的继承关系。因此,如果在运行过程中,QTP不能识别继承关系中的任何一个父对象,都会导致目标对象的识别失败。

    使用带有Exist方法的Msgbox语句,可以方便的检查出是继承关系中的哪个父对象出现了问题。

    假设在运行下面脚本时,你遇到了“Cannot identify Object”错误信息(但是可以确定对象仓库中Link对象的描述与当前程序中对象的描述是完全一致的):

Browser("Yahoo!").Page("Yahoo!").Link("Arts & Humanities").Click

你可以在该语句前面插入以下语句:

Msgbox Browser("Yahoo!").Exist

Msgbox Browser("Yahoo!").Page("Yahoo!").Exist
Msgbox Browser("Yahoo!").Page("Yahoo!").Link("Arts & Humanities").Exist

然后从头开始运行脚本,发现第1行语句运但是当QTP运行到第2步时,就弹出信息框,内容为“False”,表示不能找到Page object。这就证明Page对象存在问题。确定了出现问题的父对象以后,修复该问题。

 

问题二:The object is not unique,两种情况

一.某类对象的对象描述都不足以唯一识别对象,则可在Object Identification对话框中,改变该类的识别属性的设置,或定义该类的Smart Identification设置并启用Smart Identification机制,这样QTP就可以唯一识别对象了。

二.如果只是个别对象有此问题,则找到可以将它们区别开来的一个或多个属性,并修改仓库中对象的相关属性(如向描述中添加属性等),以使QTP在运行时可以唯一识别它;如果它们的识别属性完全相同,则在对象描述中为对象添加一个ordinal identifierindexlocation


TAG:

 

评分:0

我来说两句

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 11577
  • 日志数: 13
  • 建立时间: 2010-09-15
  • 更新时间: 2010-10-20

RSS订阅

Open Toolbar