1.1 如何去识别对象描述(Idenfirying Test Object Descrīption Problems)
如果你能在被测程序中看到对象,但仍出现了“Cannot Identify Object”错误信息,这就表示仓库中对象的描述与程序中对象的描述一定存在着差异。
解决对象描述问题的第一步是找到差异,最简单的方法是将仓库中对象的属性值与程序中对象的属性值进行比较。(仓库中对象的属性值可在Object Repository窗口中查看,程序中对象的属性值可用Object Spy功能查看。)
比较仓库中对象的属性值与程序中对象的属性值的操作见1.3。
在完成比较后,是否发现存在差异?
如果是,请参考1.4;
如果否,请参考1.5。
1.2 处理对象丢失问题(Solving Missing Object Problems)
在运行脚本时,QTP偿试进行某种操作,而该操作的对象在程序中却没有出现,出现这种情况的原因有以下几种:
>>>对象不再存在。对象已经被从程序中删除。
解决方法:见1.2.1。
>>>对象还没有装载。
解决方法:见1.2.2。
>>>当前的程序页面(或窗口)不正确,不是对象所在的页面(或窗口)。
解决方法:见1.2.3。
>>>前一个步骤没有正确执行。
解决方法:见1.2.3。
1.2.1 解决对象不再存在的问题
如果对象已经不再在被测程序中存在,则应在脚本中修改或删除相关步骤。
1.2.2 解决对象装载超时的问题
如果对象丢失的原因是因为没有足够的时间装载,偿试以下解决方案:
a.对于Web对象,增加Browser Navigation Timeout(File>Setting>Web页签)时间。
b.在包括该对象的步骤前使用Wait语句,让QTP在执行该步骤之前等待一段时间。
1.2.3 检查前面步骤的执行情况
如果是因为打开了错误的页面(或窗口)导致对象丢失问题,或因为前一步骤执行措误导致对象丢失问题,则请按以下方法检查原因:
a. 如果怀疑在完成脚本后,被测程序又发生了改变,则检查对象的继承关系以及对象描述。参考1.1。
b. 如果怀疑脚本错误,则检查脚本的每一个步骤。你可能是遗失了某个步骤,也可能是使用了不正确的方法或参数。
1.3 测试对象的属性值与Run-time对象的属性值的比较(Comparing Test Object and Run-Time Object Property Values)
根据以下的步骤比较测试对象与Run-time对象的属性值:
1) 进入Obecjt Repository窗口(Resources>Object Repository),选择对象。
2) 用笔记下对象的class以及它的各个属性及属性值。
3) 打开被测程序,并打开包含被测对象的页面或窗口。
4) 在QTP中选择菜单Tools>Object Spy或点击Object Spy按钮,打开Object Spy对话框。
5) 选择“Test Object Properties”选项。
6) 点击右上角的按钮(带有手图标的),这时QTP窗口以及Object Spy对话框都被最小化。
7) 在程序页面(或窗口)中点击目标对象,恢复Object Spy对话框,并在对话框中显示对象及其父对象(以树的形式显示),并在Properties页签中显示当前对象的属性及属性值。
8) 这时Object Spy对话框的Properties页签中显示Run-time对象的所有属性,在此查看对象的class,以及它的属性及属性值,并将它与第2步中记下的内容进行比较。
1.4 解决对象描述存在的问题(Solving Object Descrīption Problems)
如果发现仓库中对象的属性值与程序中对象的属性值存在不同,你应该判断这个不同是个别对象的问题,还是其它同类对象也存在相同的问题。
是所有(或多个)同类对象都存在问题吗?
如果是,则参考1.6
如果否,则参考1.7
1.5 关于父对象描述的识别问题(Identifying Parent Object Descrīption Problems)
对象的识别还与它所继承的父对象有关。
如果你能在被测程序中看到对象,而且程序中对象的属性值与仓库中对象的属性值也是一致的,但仍然遭遇到了“Cannot identify object”错误,则这个错误可能与它的父对象有关(如仓库中父对象的属性值与程序中父对象的属性值不一致),也可能是仓库中的对象与程序中对象的继承关系不相同导致的。
要判断是继承关系中的哪个父对象出现了问题,请偿试下面的方法之一:
>>>重新录制对象,比较新旧对象的父对象。
欲了解如何完成比较,参考1.8。
>>>对继承关系中的每个父对象,分别插入一个Exist语句,并运行该部分脚本。
欲了解如果创建Exist语句,参考1.9。
注:你也可以使用Object Repository窗口中的Highlight in Application功能,在被测程序中定位对象。
一旦找到了存在问题的父对象,接下来偿试以下方法:
>>>修复存在问题的父对象的描述。方法见1.4。
>>>在专家视图的模式下,查找所有继承存在问题的实例并进行修正。
举例:1.8.1。
1.6 解决某类对象的识别问题(Soving Object Identification Problems for a Test Object Class)
如果你发现某类对象的对象描述对于被测程序来说都不是很合理,或你预期到对象描述中的某属性值是经常变化的,你可以在Object Identification对话框中改变该类的识别属性的设置,或定义该类的Smart Identification设置并启用Smart Identification机制,这样QTP就可以唯一识别对象了。