`
trygood
  • 浏览: 79114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

QTP运行过程中弹出无法识别对象和对象不唯一的解决方法

阅读更多
问题一:Cannot Identify Object
QTP运行时报错说无法识别对象,如果你的对象在对象库里面本身存在但还报出这个错误,这就表示仓库中对象的描述与程序中对象的描述一定存在着差异。 解决对象描述问题的第一步是找到差异,最简单的方法是将仓库(Object Repository)中对象的属性值与程序中对象的属性值(用Object Spy查看)进行比较。比较的结果:
一.如果仓库和程序中对象属性有差别,则分两种情况
1. 如果同类对象都存在此问题,则可在Object Identification对话框中改变该类的识别属性的设置,或定义该类的Smart Identification设置并启用Smart Identification机制,这样QTP就可以唯一识别对象了。
2.  如果是单个对象存在此问题,则可以按照以下方法解决
a.如果被测程序中对象描述发生了改变,并且你也清楚改变的内容,并且该改变是永久性或长期性的,你可以直接手工修改仓库中对象描述中的相关属性值。
b.如果被测程序中的对象的属性值依赖于前面的步骤或其它对象,则将该属性值参数化,这样就可以使用其它步骤的输出值为属性值。
c.如果属性值的组成部分中,部分是固定的,部分是动态改变的,则可以将属性值设计为正则表达式。
d.如果属性值是遵循某种规则变化的,或者是不可预期的,则从对象描述中移除该属性,并向对象描述中添加一个或多个属性以便于QTP进行对象识别。
  e.将仓库中相应的对象删除,采用描述性编程的方式来识别对象;(实践证明此方法最好用)
二.如果仓库和程序中对象属性无差别,则说明这个错误可能与它的父对象有关(如仓库中父对象的属性值与程序中父对象的属性值不一致),也可能是仓库中的对象与程序中对象的继承关系不相同导致的。判断继承关系中哪个父对象出现问题的两种方法如下:
1.通过重新录制对象,检查到新旧对象是父对象的描述存在不同,还是它们的继承关系根本就不同。
 (1)如果是父对象的描述问题,则在对象仓库中修改父对象的描述。
 (2)如果是对象的继承关系不正确(即具有不同的父对象)引起的问题,则在脚本中找到所有使用该继承关系的实例,将它们替换为正确的继承关系。例如:有一个带有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)。
2.创建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对象存在问题。确定了出现问题的父对象以后,修复该问题。
 
问题二:The object is not unique,两种情况
一.某类对象的对象描述都不足以唯一识别对象,则可在Object Identification对话框中,改变该类的识别属性的设置,或定义该类的Smart Identification设置并启用Smart Identification机制,这样QTP就可以唯一识别对象了。
二.如果只是个别对象有此问题,则找到可以将它们区别开来的一个或多个属性,并修改仓库中对象的相关属性(如向描述中添加属性等),以使QTP在运行时可以唯一识别它;如果它们的识别属性完全相同,则在对象描述中为对象添加一个ordinal identifier(index或location)
分享到:
评论

相关推荐

    QTP对象识别常用方法介绍

    2. **智能识别**:当对象属性不完整或不唯一时,QTP的智能识别功能会尝试通过其他属性来识别对象,比如使用控件的相对位置或者父对象。 3. **对象的健壮性**:为了提高对象的可识别性,可以设置对象的健壮性。例如...

    导致QTP运行脚本慢的常见原因

    QTP 在识别对象的过程中,如果对象的强制属性和辅助属性还不能唯一匹配到对象的话,会激活智能识别模式。智能识别模式可以提高对象的识别准确性,但同时也会消耗一定的资源开销,导致脚本运行缓慢。 解决方法:全局...

    第2篇-认识QTP操作窗体

    总结,QTP的操作窗体概念涵盖了对软件测试中图形用户界面元素的理解和操作,通过对象库、动作、参数化、脚本编写、数据驱动测试、智能识别以及错误处理等技术,实现高效、全面的自动化测试。掌握这些知识点对于进行...

    软件测试之QTP培训教程

    启动QTP时,会弹出选择加载插件的对话框。正确选择插件对于测试的顺利进行至关重要。原则是:按需加载,避免冲突。例如,如果你正在测试一个基于Web的应用,那么选择Web插件就足够了,而无需加载其他可能引起冲突的...

    QTP-ActiveScreenAccess 对象的讲解.rar

    **QTP(QuickTest Professional)**,现在被称为UFT(Unified Functional Testing),是HP公司推出的一款功能强大的自动化测试工具,...在实际工作中,结合其他QTP对象和方法,可以构建出更强大的自动化测试解决方案。

    QTP描述性编程

    在QTP中,描述性编程(Descriptive Programming)是一个重要的概念,它为自动化测试提供了一种灵活的、不依赖于对象库的方式来定位和操作应用程序中的对象。 描述性编程的核心思想是将需要识别的对象的属性直接写入...

    QTP教程 从零开始教你

    如果在执行过程中出现错误,QTP会报告具体的错误信息,帮助定位问题。 - **分析测试结果**:测试结束后,根据QTP提供的结果报告,分析测试覆盖率、失败原因,从而进行必要的修复和调整。 3. **建立检查点** - **...

    软件测试之QTP新手入门

    - **测试对象属性(Test Object Property)**: 在QTP中,每个测试对象都有其特定的属性,这些属性可以帮助我们唯一地识别对象。为了确保测试的稳定性,通常建议使用那些不易改变的属性来标识对象。例如,一个按钮可能...

    QTP描述性编程,说的不错。希望分享

    2. **动态对象识别**:当对象的属性(如名称、类名)不是固定不变时,可以使用描述符的值来动态识别对象。例如,`WebButton(description="点击我")`,其中`description`是对象的一个属性,可以根据实际值进行匹配。 ...

    QTP之学习详细笔记

    1. **对象描述符**:QTP使用对象描述符来唯一识别对象,包括类名、属性和索引等信息。 2. **对象 spy**:QTP的对象Spy工具可以帮助我们查看和验证对象的属性,确保脚本中的对象识别正确无误。 3. **对象仓库**:...

    ( 第5篇-初试QTP脚本录制回放

    【QTP自动化测试简介】 ...结合对象库、智能识别、参数化和关联等特性,QTP能够应对复杂的应用程序测试挑战,是软件测试领域不可或缺的工具。通过学习和掌握QTP,测试人员可以提升工作效率,确保软件产品的质量。

    8、自动化测试工具-QTP(下)

    这种方式类似于告诉QTP对象的关键特征,QTP则根据这些特征来匹配和识别对象。 例如,在订票系统中选择乘客数量的场景中,可以使用描述性编程来实现随机选择乘客数量的功能。 #### QTP动态对象识别技术 QTP提供了...

    qtp的一些实用的例子

    理解对象库和正确识别对象是使用QTP进行自动化测试的关键。 【测试脚本语言】 QTP基于VBScript(Visual Basic Scripting Edition)编写测试脚本。掌握VBScript的基本语法,如变量、函数、条件语句和循环结构,是...

    QTP自动化测试工具使用说明文档

    - **对象库**:QTP通过对象库来识别应用程序中的元素。在录制模式下,QTP会捕获用户在应用上的操作,并转化为测试步骤。 - **智能识别**:QTP使用其独特的“智能识别”技术,即使对象属性发生变化,也能正确识别。...

    QTP 学习大全,让了解更多的知识。

    当出现多个对象具有相同描述时,QTP无法唯一识别。为解决这个问题,需要添加更多对象属性,例如`Dialog("Login").WinEdit("attached text:=Password:","window id:=3001").Set "cheers_lee"`,通过附加的属性如...

    自动化测试的实践应用QTP测试框架PPT资料.ppt

    - **静态Web对象**:通过Object Spy查看并选择唯一识别对象的属性。 - **动态Web对象**:如遇到创建时间(CreationTime)、索引(index)和文本属性(text)变化的对象,QTP会利用这些属性进行动态识别。 **6. 测试...

    QTP自动化测试工具技术以及与手工测试的对比.pdf

    在录制脚本过程中,QTP会识别出测试对象所属的控件类型,记录其特有的属性值,确保这些信息足以唯一标识测试对象,以避免在回放时出现误识别。 QTP的自动化测试相比手工测试有显著优势。首先,它能大幅缩短测试时间...

    第21篇-QTP同步点

    同步点是QTP中的一种机制,用于确保测试脚本在执行过程中正确地与应用程序的动态行为同步,避免因程序的异步执行而导致的错误或遗漏。 1. **同步点的基本原理** 同步点的主要作用是让QTP等待特定条件的发生,比如...

    (完整word)开源自动化测试工具selenium的使用.docx

    XPath则是一种标记网页元素位置的方法,通过它可以在不依赖截图的情况下唯一标识页面元素,类似于QTP的对象库。 在使用Selenium进行自动化测试时,通常遵循以下步骤: 1. **测试准备**:首先,确保测试用例已经...

    《VBS简易教程》

    - **变量无关性**: VBS中的变量无需事先声明类型,脚本在运行时会自动识别并转换数据类型。 - **解释执行**: VBS脚本由解释器逐行执行,无需编译过程。 - **多用途**: VBS不仅可以在Windows本地环境中执行(通过...

Global site tag (gtag.js) - Google Analytics