分享

QTP回放时不能识别对象的解决方法

 改变897 2016-05-29

QTP回放时不能识别对象的解决方法

    2010-03-23 22:00

    关于QTP 9.2对象库管理的一些总结 QTP 9.2增强了对于对象库的编辑功能(改进8.2版本中饱受用户诟病的(对于对象库编辑功能不够强大的缺点。 比如1,在新增“Object Repository Manager”中整合了原8.2版本中以插件形式提供merge功能(方便用户更加便捷的管理好对象库

    2,新增导入导出成XML”功能(方便用户编辑。当然HP为了商业利益的考虑(并没有完全把对象库完全以XML 形式展现给用户(而仍然对其封装(限制了灵活性。

    3,新增“associate Repository ”,提供给用户对象映射的(全新的对象库管理概念关于对象库(QTP分为共享对象库和本地对象库共享对象库是可以以TSR后缀名结尾(多个action可以用一个共享对象库。在复杂的业务系统的测试框架中(推荐用TSR管理对象(因为业务复杂(如果不很好的管理好对象库(会造成对象库冗余(后期维护复杂(打开action速度慢等缺点。而本地对象库是和action相关联(主要文件ObjectRepository.bdb(Resource.mtr。这些文件在每新建一个action时自动生成 posted @ 2008-07-04 14:19 beagles 阅读(465) | 评论(0) | 编辑 2008111 运行错误;不能识别对象的处理方法(QTP) “运行错误;不能识别对象的处理方法 转自vickywang_no1的个人空间

    1. 运行错误?不能识别对象!Cannot identify object,出现了这个错误时(就表示当前被测程序的窗口中没有符合条件的对象。出现这种错误(可能的原因有以下两种?:、对象此时在程序中没有显示或不存在。;、在程序中存在该对象(但是它的描述在后来发生了改变(导致与对象仓库中存储的信息不匹配(从而QTP无法识别对象。如果你正遇到“Cannot identify object”的问题(解决方法见1.1 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/19页

中修改或删除相关步骤。

     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,如果你发现某类对象的对象描述对于被测程序来说都不是很合理(或你预期到对象描述中的某属性值是经常变化的(你可以在

2/19页

    Object Identification对话框中改变该类的识别属性的设置(或定义该类的Smart Identification设置并启用Smart Identification机制(这样QTP就可以唯一识别对象了。

    1.7 解决单个对象的描述问题!Solving Individual Test Object Descrīption Problems选择下列方法之一来解决对象的描述问题?:、如果被测程序中对象描述发生了改变(并且你也清楚改变的内容(并且该改变是永久性或长期性的(你可以直接手工修改仓库中对象描述中的相关属性值。;、如果被测程序中的对象的属性值依赖于前面的步骤或其它对象(则将该属性值参数化(这样就可以使用其它步骤的输出值为属性值。~、如果属性值的组成部分中(部分是固定的(部分是动态改变的(则可以将属性值设计为正则表达式。?、如果属性值是遵循某种规则变化的(或者是不可预期的(则从对象描述中移除该属性(并向对象描述中添加一个或多个属性以便于QTP进行对象识别。?、If you can only access the information on the property

    values during the run session, you can create and use functions that use programmatic descrīptions to identify the object using property values retrieved earlier in the run

    session. 、如果在录制过程中对象是唯一的(但现在程序中出现了两个或多个描述相同的对象(但是它们在页面!或窗口,中的位置不相同(则应在Object PropertiesObject Repository窗口中(向对象描述中添加一个ordinal identifier

    indexlocation,。

    1.8 重新录制对象(以判断父对象描述是否存在问题!Re-recording an Object to

    Identify Parent Object Descrīption Problems,根据下面的指引(来判断父对象的问题。通过重新录制对象(来判断它的父对象是否存在问题? 1) 打开浏览器或程序(来到包含被测对象的页面或窗口。 2) 在关键字视图模式(选择最后一个组件component,(或在专家视图模式(将光标放在最后一个脚本步骤的下面。 3) Record按钮(或选择Automation>Record 4) 点击!或操作,页面或窗口中的目标对象。 5) 点击Stop按钮(或选择Automation>Stop(完成步骤添加。 6) 右击新添加的步骤(并选择Object Properties右键菜单。 7) Object Properties对话框中(点击Repository(打开Object Repository窗口(并选中了新对象。注意记下该对象的继承关系。 8) Object Repository窗口中找到旧的对象!即存在问题的对象,(将它的继承关系与新对象的继承关系进行比较。通过比较(可以检查到新旧对象是父对象的描述存在不同(还是它们的继承关系根本就不同。 a. 如果是父对象的描述问题(则修改父对象的描述。参见1.4. b. 如果是对象的继承关系不正确!即具有不同的父对象,引起的问题(则在脚本中找到所有使用该继承关系的实例(将它们替换为正确的继承关系。举例?参见1.8.1 1.8.1 举例假设有一个带有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”的描述没有发生任何改变(但它的继承关系已经

3/19页

    改变了。在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 posted @ 2008-01-11 11:17 beagles 阅读(350) | 评论(0) | 编辑 200819 GetROProperty,GetTOProperties,GetTOProperty的区别

    GetROProperty,GetTOProperties,GetTOProperty的区别 GetTOPropertyGetROProperty都用于取出对象的某个具体属性的值,它们的语法和用法几近相同,一的区别就是GetTOProperty取出的是录制对象的属性值,GetROProperty取出的是在回放过程中运行的对象的属性值. GetTOProperties,是指取出录制对象的所有属性。 GetTOPropertyGetROProperty语法都是: object.GetTOProperty(Property) 者是: object.GetROProperty(Property) 其中Property,对象的属性,是必填项. 关键在于ROTO(R(就是Runtime(T就是Testtime(O就是Object。因此顾名思义(RO就是在测试执行时的对象(TO就是录制/编写测试时的对象。是同一个类在不同的时间生成的不同的实例(一般来说TO是静态的(而RO是动态的!每次执行测试都会生成新的实例,。 GetTOProperties的语法为? object.GetTOProperties

    posted @ 2008-01-09 14:43 beagles 阅读(123) | 评论(0) | 编辑 200813日遇到ActiveX无法创建scrīpting.FileSystemObject的问题(我是如何解决的关于QTP“General Error while saving the test'的解决方法 () 今天在使用QuickTest录制教本的时候 ,无法保存所录制的脚本,于是到网上搜索了一下解决办法,别说还挺灵,贴出,共享! 先将段代码保存为VBS文件,然后运行. Dim fso, MyFile Set fso =

    CreateObject('scrīpting.FileSystemObject') Set MyFile =

    fso.CreateTextFile('C:\testfile.txt', True) MyFile.WriteLine ('This is a test')

    MyFile.WriteLine ('This is another test') MyFile.Close 运行提示有错误: ActiveX 部件不能创建对象: 'scrīpting.filesystemobject' 这是操作系统的问题, activex有问题, QTP 是集成这个进行文件保存的去System32目录下查看是否有个scrrun.dll的文件(如果有(就regsvr32 scrrun.dll一下(没有的话(考一个过来 ActiveX 部件不能

4/19页

    创建对象: Scripting.FileSystemObject 错误描述?服务器没有启动FSO支持解决方法?开启/关闭系统FSO支持方法 win2000系统?在CMD命令行状态输入以下命令? 关闭命令?RegSvr32 /u C:\WINNT\SYSTEM32\scrrun.dll 打开命令?RegSvr32 C:\WINNT\SYSTEM32\scrrun.dll win2003 运行regsvr32 scrrun.dll即可。 如果想关FSO组件(请运行 regsvr32 /u scrrun.dll即可。 初识Regsvr32 想必Regsvr32家一定都不陌生吧(在一些电脑教程或电脑杂志上总能看到它的身影(可如此一个高出镜率的'小明星'在我们很多人的眼里却显得十分的神秘(原来一般的文章都很少对它进行介绍(最多只是了了几句介绍一下如何用它解决常见问题(好多朋友可能都已经在一些文章的指导下使用过好多次Regsvr32了(但对它的身世却依然不了解(今天笔者就借这篇文章打消大家脑海里的疑团(带大家一起去认识一下这Regsvr32 Regsvr32的背景与功能 Regsvr32是一个Windows系统的内嵌程序(不仅存在于windows 2000 / XP下(同时也能在Windows 98中找到它的身影。它的主要功能就是注册或卸载动态链接库文件(DLL)和嵌入式控件(OCX)(您可别小看了它呀(有了它(很多软件或操作系统的难题就都可以迎刃而解了。 基础篇 刚才咱们说到了DLLOCX(估计在好多的读者心里都会冒出这样一个问题(这两个东东究竟是什么意思它们究竟能干什么呢别急(下面就听笔者慢慢道来。 DLL文件:DLL文件全称是Dynamic Link Library(中文名字叫做动态链接库文。在Windows系统中(DLL文件就象EXE文件一样能够完成某项功能(但它却无法像EXE 文件那样独立运行(必须由其他程序来调用它(而它对于程序的执行也是非常重要的(大多数的程序或系统组件在执行时(都必须链接到DLL文件才能正常运行。换言之(DLL文件就像是数据库中一个个公用的函数库(每位设计人员都可以在自己的程序中随意调用它们(这样(不仅不用自己再去编写一些基础功能(因为这些功能都已经由DLL文件完成了)(而且还可以让程序的体积更加小巧。因此(如果某个DLL文件发生丢失(就有可能造成某个软件或某个系统模块发生故障而无法正常工作。 OCX文件:OCX文件的全称是Object Linking

    and Embedding (OLE) Control Extension(中文名字叫做嵌入式对象控件(它的作用其实和刚才谈到的DLL文件特别相像(其实所谓的OLE我们平时已经非常熟悉了(简单地说就像在Word中可以使用Excel数据(写字板中可以嵌入图片文件等等这些功能。打个比方的话(剪贴板就像是个简单的数据共享(而OLE则是一种对象共享 刚才我们谈到Regsvr32的功能是注册与卸载DLL文件的(那么现在又有一个问题困扰着我们(既然DLL文件起到的就是公用函数库的作用(为什么我们不能直接在程序里调用(还要进行一次注册呢其实(这里注册DLL文件的道理就像是我们第一次入学(虽然你坐在教室里(但是如果没有写你的档案(老师是不会认识你的(自然也就不会找到你。同样道理(如果DLL文件没有注册(系统注册表中就没有这个DLL文件的相关信息(虽然它已经存在于我们的硬盘上(但等到调用的时候(系统也就根本找不到这个DLL文件而只能报告没有这个DLL在了(所以在这个时候就需要我们注册DLL文件了。 【小提示】 Windows系统的DLL因为在安装时已经注册好了(因此不用注册(但是如果因为某种情况系统无法识别这些DLL文件时(还是需要我们手动再注册一遍。 Regsvr32命令格式 说完了上面这些(想必好多朋友都听得有点懵了(别急(知道了上面这些知识(下面咱们再学习Regsvr32命令就容易多了。 大家知道(凡是命令肯定都有一个

5/19页

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多