QTP疑难问题解答(不能识别对象)_第1页
QTP疑难问题解答(不能识别对象)_第2页
QTP疑难问题解答(不能识别对象)_第3页
QTP疑难问题解答(不能识别对象)_第4页
QTP疑难问题解答(不能识别对象)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页QTP疑难问题解答(不能识别对象)QTP疑难问题解答(不能识别对象)

发表于:2023-06-20来源::点击数:标签:qtp

1.运行错误:不能识别对象(Cannotidentifyobject)出现了这个错误时,就表示当前被测程序的窗口中没有符合条件的对象。出现这种错误,可能的原因有以下两种:l对象此时在程序中没有显示或不存在。l在程序中存在该对象,但是它的描述在后来发生了改

1.运行错误:不能识别对象(Cannotidentifyobject)

出现了这个错误时,就表示当前被测程序的窗口中没有符合条件的对象。

出现这种错误,可能的原因有以下两种:

l对象此时在程序中没有显示或不存在。

l在程序中存在该对象,但是它的描述在后来发生了改变,导致与对象仓库中存储的信息不匹配,从而QTP无法识别对象。

如果你正遇到“Cannotidentifyobject”的问题,解决方法见1.1。

1.1如何去识别对象描述(IdenfiryingTestObjectDescrīptionProblems)

如果你能在被测程序中看到对象,但仍出现了“CannotIdentifyObject”错误信息,这就表示仓库中对象的描述与程序中对象的描述一定存在着差异。

解决对象描述问题的第一步是找到差异,最简单的方法是将仓库中对象的属性值与程序中对象的属性值进行比较。(仓库中对象的属性值可在ObjectRepository窗口中查看,程序中对象的属性值可用ObjectSpy功能查看。)

比较仓库中对象的属性值与程序中对象的属性值的操作见1.3。

在完成比较后,是否发现存在差异?

如果是,请参考1.4;

如果否,请参考1.5。

1.2处理对象丢失问题(SolvingMissingObjectProblems)

在运行脚本时,QTP偿试进行某种操作,而该操作的对象在程序中却没有出现,出现这种情况的原因有以下几种:

l对象不再存在。对象已经被从程序中删除。

解决方法:见1.2.1。

l对象还没有装载。

解决方法:见1.2.2。

l当前的程序页面(或窗口)不正确,不是对象所在的页面(或窗口)。

解决方法:见1.2.3。

l前一个步骤没有正确执行。

解决方法:见1.2.3。

1.2.1解决对象不再存在的问题

如果对象已经不再在被测程序中存在,则应在脚本中修改或删除相关步骤。

1.2.2解决对象装载超时的问题

如果对象丢失的原因是因为没有足够的时间装载,偿试以下解决方案:

a.对于Web对象,增加BrowserNavigationTimeout(FileSettingWeb页签)时间。

b.在包括该对象的步骤前使用Wait语句,让QTP在执行该步骤之前等待一段时间。

1.2.3检查前面步骤的执行情况

如果是因为打开了错误的页面(或窗口)导致对象丢失问题,或因为前一步骤执行措误导致对象丢失问题,则请按以下方法检查原因:

a.如果怀疑在完成脚本后,被测程序又发生了改变,则检查对象的继承关系以及对象描述。参考1.1。

b.如果怀疑脚本错误,则检查脚本的每一个步骤。你可能是遗失了某个步骤,也可能是使用了不正确的方法或参数。

1.3测试对象的属性值与Run-time对象的属性值的比较(ComparingTestObjectandRun-TimeObjectPropertyValues)

根据以下的步骤比较测试对象与Run-time对象的属性值:

1)进入ObecjtRepository窗口(ResourcesObjectRepository),选择对象。

2)用笔记下对象的class以及它的各个属性及属性值。

3)打开被测程序,并打开包含被测对象的页面或窗口。

4)在QTP中选择菜单ToolsObjectSpy或点击ObjectSpy按钮,打开ObjectSpy对话框。

5)选择“TestObjectProperties”选项。

6)点击右上角的按钮(带有手图标的),这时QTP窗口以及ObjectSpy对话框都被最小化。

7)在程序页面(或窗口)中点击目标对象,恢复ObjectSpy对话框,并在对话框中显示对象及其父对象(以树的形式显示),并在Properties页签中显示当前对象的属性及属性值。

8)这时ObjectSpy对话框的Properties页签中显示Run-time对象的所有属性,在此查看对象的class,以及它的属性及属性值,并将它与第2步中记下的内容进行比较。

1.4解决对象描述存在的问题(SolvingObjectDescrīptionProblems)

如果发现仓库中对象的属性值与程序中对象的属性值存在不同,你应该判断这个不同是个别对象的问题,还是其它同类对象也存在相同的问题。

是所有(或多个)同类对象都存在问题吗?

如果是,则参考1.6

如果否,则参考1.7

1.5关于父对象描述的识别问题(IdentifyingParentObjectDescrīptionProblems)

对象的识别还与它所继承的父对象有关。

如果你能在被测程序中看到对象,而且程序中对象的属性值与仓库中对象的属性值也是一致的,但仍然遭遇到了“Cannotidentifyobject”错误,则这个错误可能与它的父对象有关(如仓库中父对象的属性值与程序中父对象的属性值不一致),也可能是仓库中的对象与程序中对象的继承关系不相同导致的。

要判断是继承关系中的哪个父对象出现了问题,请偿试下面的方法之一:

l重新录制对象,比较新旧对象的父对象。

欲了解如何完成比较,参考1.8。

l对继承关系中的每个父对象,分别插入一个Exist语句,并运行该部分脚本。

欲了解如果创建Exist语句,参考1.9。

注:你也可以使用ObjectRepository窗口中的HighlightinApplication功能,在被测程序中定位对象。

一旦找到了存在问题的父对象,接下来偿试以下方法:

l修复存在问题的父对象的描述。方法见1.4。

l在专家视图的模式下,查找所有继承存在问题的实例并进行修正。

举例:1.8.1。

1.6解决某类对象的识别问题(SovingObjectIdentificationProblemsforaTestObjectClass)

如果你发现某类对象的对象描述对于被测程序来说都不是很合理,或你预期到对象描述中的某属性值是经常变化的,你可以在ObjectIdentification对话框中改变该类的识别属性的设置,或定义该类的SmartIdentification设置并启用SmartIdentification机制,这样QTP就可以唯一识别对象了。

1.7解决单个对象的描述问题(SolvingIndividualTestObjectDescrīptionProblems)

选择下列方法之一来解决对象的描述问题:

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

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

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

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

lIfyoucanonlyaclearcase/"target="_blank">ccesstheinformationonthepropertyvaluesduringtherunsession,youcancreateandusefunctionsthatuseprogrammaticdescrīptionstoidentifytheobjectusingpropertyvaluesretrievedearlierintherunsession.

l如果在录制过程中对象是唯一的,但现在程序中出现了两个或多个描述相同的对象,但是它们在页面(或窗口)中的位置不相同,则应在ObjectProperties或ObjectRepository窗口中,向对象描述中添加一个ordinalidentifier(index或location)。

1.8重新录制对象,以判断父对象描述是否存在问题(Re-recordinganObjecttoIdentifyParentObjectDescrīptionProblems)

根据下面的指引,来判断父对象的问题。

通过重新录制对象,来判断它的父对象是否存在问题:

1)打开浏览器或程序,来到包含被测对象的页面或窗口。

2)在关键字视图模式,选择最后一个组件(component),或在专家视图模式,将光标放在最后一个脚本步骤的下面。

3)点击Record按钮,或选择AutomationRecord。

4)点击(或操作)页面或窗口中的目标对象。

5)点击Stop按钮,或选择AutomationStop,完成步骤添加。

6)右击新添加的步骤,并选择ObjectProperties右键菜单。

7)在ObjectProperties对话框中,点击Repository,打开ObjectRepository窗口,并选中了新对象。注意记下该对象的继承关系。

8)在ObjectRepository窗口中找到旧的对象(即存在问题的对象),将它的继承关系与新对象的继承关系进行比较。

通过比较,可以检查到新旧对象是父对象的描述存在不同,还是它们的继承关系根本就不同。

a.如果是父对象的描述问题,则修改父对象的描述。参见1.4.

b.如果是对象的继承关系不正确(即具有不同的父对象)引起的问题,则在脚本中找到所有使用该继承关系的实例,将它们替换为正确的继承关系。

举例:参见1.8.1。

1.8.1举例

假设有一个带有Frame的网站,你录制了一个操作针对Image对象“Poster”的操作步骤。在ObjectRepository窗口,你可以Image对象的继承关系如下所示:

MyCompany(Browser)

MyCompany(Page)

Main(Frame)

Poster(image)

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

MyCompany(Browser)

MyCompany(Page)

Poster(image)

从中可以看出,Frame已经从WebPage中移除,所以尽管Image对象“Poster”的描述没有发生任何改变,但它的继承关系已经改变了。

在ObjectRepository窗口,你可以看到新旧Image对象“Poster”是两个完全不同的对象:旧的位于已经被移除的Frame对象之下,而新的则直接位于Page“Mycompany”对象之下。

修复这个问题,可以在脚本步骤中将旧的对象替换为新的对象。

为了保持ObjectRepository窗口的整洁,你应删除那些已不再存在的对象(如本例中的Frame)。

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

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

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

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

Browser("Yahoo!").Page("Yahoo!").Link("ArtsHumanities").Click

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

MsgboxBrowser("Yahoo!").Exist

MsgboxBrowser("Yahoo!").Page("Yahoo!").Exist

MsgboxBrowser("Yahoo!").Page("Yahoo!").Link("ArtsHumanities").Exist

然后你从头开始运行脚本,发现第1行语句运行成功,并且弹出信息框,内容为“True”。

但是,当QTP运行到第2步时,就弹出信息框,内容为“False”,表示不能找到Pageobject。这就证明Page对象存在问题。

确定了出现问题的父对象以后,修复该问题。参见1.4。

2.运行错误:对象不唯一(Theobjectisnotunique)

在被测页面或窗口中的同一父对象下,找到多个与仓库中对象描述相符的Run-tim对象。

请确定是只有个别对象存在此问题,还是此类对象的所有对象(或部分对象)存在此问题。

此类对象的所有对象(或部分对象)都存在此问题吗?

如果是,参考2.1;

如果否,参考2.2。

2.1为某对象类设置能唯一识别对象的描述规则(ConfiguringUniqueTestObjectDescrīptionsforaTestObjectClass)

如果你发现某类对象的对象描述都不足以唯一识别对象,你可以在ObjectIdentification对话框中,改变该类的识别属性的设置,或定义该类的SmartIdentification设置并启用SmartIdentification机制,这样QTP就可以唯一识别对象了。

2.2设置通唯一识别对象的对象描述(CreatingaUniqueTestObjectDescrīptionforanObject)

查看当前对象的描述,并偿试在程序中找到其它具有相同描述的对象并查看它们的描述。

l如果你找到了可以将它们区别开来的一个或多个属性,则修改仓库中对象的相关属性(如向描述中添加属性等),以使QTP在运行时可以唯一识别它。

l如果它们的识别属性完全相同,则在对象描述中为对象添加一个ordinalidentifier(index或location)。

3.运行错误:找

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论