欢迎来到天天文库
浏览记录
ID:12681719
大小:40.00 KB
页数:3页
时间:2018-07-18
《无法识别对象的解决办法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、问题一:CannotIdentifyObjectQTP运行时报错说无法识别对象,如果你的对象在对象库里面本身存在但还报出这个错误,这就表示仓库中对象的描述与程序中对象的描述一定存在着差异。解决对象描述问题的第一步是找到差异,最简单的方法是将仓库(ObjectRepository)中对象的属性值与程序中对象的属性值(用ObjectSpy查看)进行比较。比较的结果:一.如果仓库和程序中对象属性有差别,两种情况1.如果同类对象都存在此问题,则可在ObjectIdentification对话框中改变该类的识别属性的设置,或定义该类的SmartIdentification设置并启用SmartId
2、entification机制,这样QTP就可以唯一识别对象了。2.如果是单个对象存在此问题,则可以按照以下方法解决a.如果被测程序中对象描述发生了改变,并且你也清楚改变的内容,并且该改变是永久性或长期性的,你可以直接手工修改仓库中对象描述中的相关属性值。b.如果被测程序中的对象的属性值依赖于前面的步骤或其它对象,则将该属性值参数化,这样就可以使用其它步骤的输出值为属性值。c.如果属性值的组成部分中,部分是固定的,部分是动态改变的,则可以将属性值设计为正则表达式。d.如果属性值是遵循某种规则变化的,或者是不可预期的,则从对象描述中移除该属性,并向对象描述中添加一个或多个属性以便于QTP进
3、行对象识别。e.将仓库中相应的对象删除,采用描述性编程的方式来识别对象;(实践证明此方法最好用)二.如果仓库和程序中对象属性无差别,则说明这个错误可能与它的父对象有关(如仓库中父对象的属性值与程序中父对象的属性值不一致),也可能是仓库中的对象与程序中对象的继承关系不相同导致的。判断继承关系中哪个父对象出现问题的两种方法如下:1.通过重新录制对象,检查到新旧对象是父对象的描述存在不同,还是它们的继承关系根本就不同。(1)如果是父对象的描述问题,则在对象仓库中修改父对象的描述。(2)如果是对象的继承关系不正确(即具有不同的父对象)引起的问题,则在脚本中找到所有使用该继承关系的实例,将它们替
4、换为正确的继承关系。例如:有一个带有Frame的网站,你录制了一个操作针对Image对象“Poster”的操作步骤。在ObjectRepository窗口,你可以Image对象的继承关系如下所示:MyCompany(Browser) MyCompany(Page) Main(Frame) Poster(image) 当你运行脚本时,网页看起来没有什么不同,但是识别Image对象时却出现了“Cannotidentiryobject”的错误提示。当你重新录制操作步骤,然后在ObjectRepository窗口中查看新的Image对象时,发现该对象的继承关系如下所示:MyCompa
5、ny(Browser) MyCompany(Page) Poster(image) 从中可以看出,Frame已经从WebPage中移除,所以尽管Image对象“Poster”的描述没有发生任何改变,但它的继承关系已经改变了。在ObjectRepository窗口,你可以看到新旧Image对象“Poster”是两个完全不同的对象:旧的位于已经被移除的Frame对象之下,而新的则直接位于Page“Mycompany”对象之下。修复这个问题,可以在脚本步骤中将旧的对象替换为新的对象。为了保持ObjectRepository窗口的整洁,你应删除那些已不再存在的对象(
6、如本例中的Frame)。2.创建Exist语句,以判断父对象的描述是否存在问题 QTP在录制发生在某个对象上的操作时,也会同时去了解对象以及它的继承关系。因此,如果在运行过程中,QTP不能识别继承关系中的任何一个父对象,都会导致目标对象的识别失败。 使用带有Exist方法的Msgbox语句,可以方便的检查出是继承关系中的哪个父对象出现了问题。 假设在运行下面脚本时,你遇到了“CannotidentifyObject”错误信息(但是可以确定对象仓库中Link对象的描述与当前程序中对象的描述是完全一致的):Browser("Yahoo!").Page("Yahoo!").
7、Link("Arts&Humanities").Click你可以在该语句前面插入以下语句:MsgboxBrowser("Yahoo!").ExistMsgboxBrowser("Yahoo!").Page("Yahoo!").ExistMsgboxBrowser("Yahoo!").Page("Yahoo!").Link("Arts&Humanities").Exist然后从头开始运行脚本,发现第1行语句运但是当QTP运行到第2步时,就弹出信息
此文档下载收益归作者所有