“天街小雨润如酥,草色遥看近却无。最是一年春好处,绝胜烟柳满皇都。”读一首古诗,心情也随之平静下来
"Cannot identify object" QTP不能识别对象问题的解决方案
上一篇 /
下一篇 2008-02-25 15:30:15
/ 个人分类:测试工具
1.8.1举例
假设有一个带有Frame的网站,你录制了一个操作针对Image对象“Poster”的操作步骤。在Object Repository窗口,你可以Image对象的继承关系如下所示:
MyCompany(Browser)
MyCompany(Page)
Main(Frame)
Poster(image)
当你运行脚本时,网页看起来没有什么不同,但是识别Image对象时却出现了“Cannot identiry object”的错误提示。当你重新录制操作步骤,然后在Object Repository窗口中查看新的Image对象时,发现该对象的继承关系如下所示:
MyCompany(Browser)
MyCompany(Page)
Poster(image)
从中可以看出,Frame已经从Web Page中移除,所以尽管Image对象“Poster”的描述没有发生任何改变,但它的继承关系已经改变了。
在Object Repository窗口,你可以看到新旧Image对象“Poster”是两个完全不同的对象:旧的位于已经被移除的Frame对象之下,而新的则直接位于Page“MyCompany”对象之下。
修复这个问题,可以在脚本步骤中将旧的对象替换为新的对象。
为了保持Object Repository窗口的整洁,你应删除那些已不再存在的对象(如本例中的Frame)。
1.9创建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行语句运行成功,并且弹出信息框,内容为“True”。
但是,当QTP运行到第2步时,就弹出信息框,内容为“False”,表示不能找到Page object。这就证明Page对象存在问题。
确定了出现问题的父对象以后,修复该问题。参见1.4。
2. 运行错误:对象不唯一(The object is not unique)
在被测页面或窗口中的同一父对象下,找到多个与仓库中对象描述相符的Run-time对象。
请确定是只有个别对象存在此问题,还是此类对象的所有对象(或部分对象)存在此问题。
此类对象的所有对象(或部分对象)都存在此问题吗?
如果是,参考2.1;
如果否,参考2.2。
2.1为某对象类设置能唯一识别对象的描述规则(Configuring Unique Test Object Descrīptions for a Test Object Class)
如果你发现某类对象的对象描述都不足以唯一识别对象,你可以在Object Identification对话框中,改变该类的识别属性的设置,或定义该类的Smart Identification设置并启用Smart Identification机制,这样QTP就可以唯一识别对象了。
2.2设置通唯一识别对象的对象描述(Creating a Unique Test Object Descrīption for an Object)
查看当前对象的描述,并尝试在程序中找到其它具有相同描述的对象并查看它们的描述。
l 如果你找到了可以将它们区别开来的一个或多个属性,则修改仓库中对象的相关属性(如向描述中添加属性等),以使QTP在运行时可以唯一识别它。
l 如果它们的识别属性完全相同,则在对象描述中为对象添加一个ordinal identifier(index或location)。
3. 运行错误:找不到父对象(Parent not found)
识别对象时,会先识别它的父对象是否正确。如果遇到“Parent not found”的错误信息,请尝试以下解决方法:
l 修复出现问题的父对象的描述。参见1.4。
l 在脚本中找到继承关系不正确的实例,并修改为正确的继承关系。例如1.8.1。
4. 运行错误:无效的参数(Invalid arguments)
一个或多个方法的参数是无效的。
参数无效可能是参数类型错误,也可能是参数个数不正确。
根据以下建议,找到方法的正确语法:
l 在Keyword模式,如果方法包括参数,则在Value栏会显示该方法的参数提示。
l 在Expert模式,如果方法包括参数,则当你插入方法然后按下Shift+Ctrl+Space键时,QTP会显示该方法的参数的提示信息。(注:只有在Editor Options对话框的General页签中打开了Statement completion功能时才可以看到参数的提示信息。)
5. 运行错误:不能识别item(Cannot identify item)QTP不能识别方法参数中指定的列表或树对象的item时,请确认指定的item是否存在于对象之中。
l 如果item不存在,则删除相关脚本步骤,或修改item。
相关阅读:
- JavaScript的测试覆盖率工具 - JSCoverage (51testing, 2008-2-19)
- 一个并发用户测试案例的测试结果分析 (mexia, 2008-2-19)
- JavaScript的测试覆盖率工具 - JSCoverage (paulinetina, 2008-2-20)
- Silk Performer软件性能测试工具使用点滴 (51testing, 2008-2-20)
- ClearCase的组件 (51testing, 2008-2-20)
- Web Script代码覆盖率工具的研究 (51testing, 2008-2-21)
- Exchange server 2003安装中error code 0xc0070714问题的解决 (luxuabc, 2008-2-21)
- 对性能测试的思考------理发店模型 (转载) (mexia, 2008-2-22)
- loadrunner性能指标参数 (mexia, 2008-2-25)
- "Cannot identify object" QTP不能识别对象问题的解决方案 (qicyt1812, 2008-2-25)
收藏
举报
TAG:
测试工具