软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件测试工具>>Mercury>>正文
QTP常见问题解答二
文章出处:51testing博客转 作者: 发布时间:2007-03-15
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就可以唯一识别对象了。
 
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.
For more information on programmatic descrīptions, see Using Programmatic Descrīptions.
>>>如果在录制过程中对象是唯一的,但现在程序中出现了两个或多个描述相同的对象,但是它们在页面(或窗口)中的位置不相同,则应在Object Properties或Object Repository窗口中,向对象描述中添加一个ordinal identifier(index或location)。
 
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对象的继承关系如下所示:
MyCompany(Browser)
    MyCompanyPage)
        Main(Frame)
             Poster(image)
    当你运行脚本时,网页看起来没有什么不同,但是识别Image对象时却出现了“Cannot identiry object”的错误提示。当你重新录制操作步骤,然后在Object Repository窗口中查看新的Image对象时,发现该对象的继承关系如下所示:
MyCompany(Browser)
    MyCompanyPage)
         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行语句运
    但是,当QTP运行到第2步时,就弹出信息框,内容为“False”,表示不能找到Page object。这就证明Page对象存在问题。
    确定了出现问题的父对象以后,修复该问题。参见1.4。

站内搜索
相关文章
◎QTP常见问题解答一
◎学习loadrunner之一_事务
◎《自动化测试工具介绍QTP篇》——新手必看
◎校验对象是否存在object.exist
◎QTP与回归测试
◎QTP中一些基础代码结构累积
◎QTP中MS SQL SERVER数据库连接的一种简单方法
◎Object Repository 的合并
◎Mercury LoadRunner 8.1 使用前必读三
◎Mercury LoadRunner 8.1 使用前必读二
◎Mercury LoadRunner 8.1 使用前必读一
◎我来谈谈WinRunner和QTP的区别
◎winrunner 永久注册成功秘笈
◎td的邮件服务器配置成功
◎LoadRunner下DLL的调用
◎关于"RPC server is unavailable"的解决方案
◎QTP中虚拟对象设置
◎TD中Case的复用
◎中英文操作系统切换导致的找不到对象的解决方法
◎利用Analysis 分析结果
◎文件/表参数的数据分配和更新方法
◎QTP描述性编程原理介绍
◎对象库的管理与合并
◎QTP的学习历程
◎LoadRunner学习——LoadRunner的安装
◎解决回放时浏览器乱码问题
◎TD与QTP连接
◎QTP中的描述性编程
◎测试结果报告知多少
◎QTP中设置共享对象库
◎设定时间让脚本自动运行
◎如何在QTP中使用IE以外浏览器录制和运行测试?
◎QTP中调用共享文件
◎如何使用qtp检查网页中显示的文字颜色为指定的颜色
◎LoadRunner使用虚拟IP测试流程
◎QTP中的步骤生成器
◎Robot GUI脚本操作SQL SERVER数据库
◎QTP脚本还可以这样写
◎对动态的weblist取得其name值
◎QTP中测试环境的初始化
◎QTP Recovery Scenario 简介
◎解决LR无法动态从数据库取值的方法
◎详解loadrunner的think time
◎QTP的登陆脚本设计
◎再论TD的数据迁移
◎关于IP欺骗的问题
◎LoadRunner与Winsock协议[翻译]
◎QTP的录制回放过程
◎LoadRunner函数介绍续
◎LoadRunner函数介绍
热门文章
◎主流测试工具介绍(1)
◎Winrunner经验总结
◎主流测试工具介绍(2)
◎主流测试工具介绍(3)
◎Winrunner TSL命令简介(一)
◎WinRunner的问题整理
◎LoadRunner监视的性能计数器
◎四款主流测试工具的测试流程
◎Loadrunner中参数的设置
◎LoadRunner的一个解决方案
◎让LoadRunner走下神坛
◎WinRunner 脚本标准格式
◎LoadRunner简化国泰航空测试流程
◎WinRunner如何实现自动化测试
◎jboss tomcat weblogic websphere 性能对比测试
◎利用loadrunner测试ORACLE存储过程的性能
◎Winrunner TSL命令简介(四)
◎Winrunner TSL命令简介(二)
◎使用LoadRunner测试TUXEDO
◎TestDirector项目数据迁移完整过程
◎LoadRunner函数介绍
◎关于"RPC server is unavailable"的解决方案
◎Winrunner TSL命令简介(三)
◎使用Winrunner进行性能测试
◎WinRunner使用经验介绍
◎LoadRunner本机录制http协议程序遇到的问题以及解决方法
◎TD7.6 字段中英文对照表
◎Winrunner Context Sensitive命令列表
◎TD中Case的复用
◎MI测试工具介绍
◎对脚本的建议
◎QTP的登陆脚本设计
◎QTP的学习历程
◎如何用QTP解析PDF
◎QuickTestPro SP考试心得
◎loadruner报错:Step download timeout(120 seconds)的解决方法
◎LoadRunner学习——LoadRunner的安装
◎winsock协议错误编码解析
◎TD 7.x 升级到 TD 8.0 的一些经验(SQLSERVER 下)
◎高级测试管理的工具和技术
◎QuickTestPro中的快捷键
◎ERP功能测试最佳实践:10个步骤确保ERP系统的可靠性
◎使用LoadRunner来测试BEATUXEDO (LoadRunner 7.6)
◎Mercury LoadRunner 8.1 使用前必读三
◎winsock的buffer简单解析
◎LoadRunner函数介绍续
◎何谓 Keyword-Driven Testing?
◎Mercury LoadRunner 8.1 使用前必读一
◎QTP的登陆脚本设计
◎使用LoadRunner来测试BEA TUXEDO(LoadRunner7.6)

Google提供的广告