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

QTP对象识别机制

阅读更多
QTP对象识别机制 (转载)

测试对象模型是一大组对象类型或类,比如WebElement、WebList,QTP用这些对象类型和类来表示Web页面中的对象。每个测试对象类都有一个可以唯一标识对象的属性列表以及可以录制的方法,这个属性列表和方法列表是可以设置的,见图:




  
在Object Identification对话框中设置的属性录制完后都可以在Object Repository中查看。属性的具体分类见下一小节。

QTP里的对象分两个概念,一个是Test Object(简称TO)测试对象,一个是Runtime Object(简称RO)运行时对象。
这两个概念从字面上不大好理解,也容易混淆。
但从实际作用上来看,应该说TO就是是仓库文件里定义的仓库对象,RO是被测试软件的实际对象。
QTP识别对象,一般是要求先在对象仓库文件里定义仓库对象,里面存有实际对象的特征属性的值。
然后在运行的时候,QTP会根据脚本里的对象名字,在对象仓库里找到对应的仓库对象,
接着根据仓库对象的特征属性描述,在被测试软件里搜索找到相匹配的实际对象,最后就可以对实际对象进行操作了。
仓库对象TO一般在录制/编写脚本时加入仓库文件,它不仅可以在录制编写时进行修改,
也可以在运行过程中进行动态修改,以匹配实际对象。
和TO、RO相关的几个函数有:
  GetTOProperty():取得仓库对象的某个属性的值
  GetTOProperties():取得仓库对象的所有属性的值
  SetTOProperty():设置仓库对象的某个属性的值
  GetROProperty():取得实际对象的某个属性的值
理解了TO的含义,你就可以自由的用SetTOProperty()定义TO,以灵活的操作RO
比如有个测试任务,窗口上有很多待检查的记录,每条记录右边都有一个Check按钮,用来检查各条记录。
记录个数不定,所以Check按钮个数也就不定,只有一个Edit显示记录个数。
我们要对每条记录进行检查,也就是要点击每个Check按钮。
但是Check按钮个数不定,不好录制,而且个数可能也很多(上百个),即使能一一录制,那也很麻烦。
那我有一个好办法,只录制一个按钮对象,它设有两个特征属性 label=OK, index=0
然后用下面的脚本,就可以完成测试
buttonNum = CInt(JavaWindow("Test").JavaEdit("Record Num").GetROProperty("value"))
For buttonIndex = 0 to buttonNum - 1
JavaWindow("Test").JavaButton("Check").SetTOProperty("index", buttonIndex)
JavaWindow("Test").JavaButton("Check").Click
Next
或者窗口上有New、Modify、Delete、Check等好几个按钮,要把这几个按钮一一按过去
我在对象仓库里只设置一个按钮对象AnyButton,label特征属性值填任意值,然后用下面脚本执行测试
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "New")
JavaWindow("Test").JavaButton("AnyButton").Click
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Modify")
JavaWindow("Test").JavaButton("AnyButton").Click
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Delete")
JavaWindow("Test").JavaButton("AnyButton").Click
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Check")
JavaWindow("Test").JavaButton("AnyButton").Click

脚本描述定义访问对象
如果Web对象没有被添加到对象库中,或者通过该Web对象的标识QTP无法识别,即对象库中没有该对象,那么可以用另一种方式:在脚本中用描述性编程来定义访问对象
常规语法为:
TestObject("PropertyName1:=PropertyValue1","PropertyName2:=PropertyValue2"...)+具体操作

Dim buttonIndex
buttonIndex = 1
JavaWindow("Test").JavaButton("label:=check","index:="+CStr(buttonIndex)).Click

属性详解(转载)

QTP通过三类属性来识别对象:
a)Mandatory;
b)Assistive;
c) Ordinal identifiers。
大部分情况下,通过对象的一些特定属性值就可以识别对象(类型a)。这些属性可以通过Tools->Object Identification 定义。每个测试对象类拥有一系列用于唯一确定对象的属性,这就是在这个Object Identification里查看。比如我看了一下WebEdit空间的识别方式,发现它就是通过type,name和html tag来识别。
在这里列出了所有QTP能识别的控件,以及控件的识别方式。你可以给他添加X、Y坐标进行识别。或更明显的,列表中的信息,不按名称识别,而是按ID识别。这个修改可以解决一些问题,想动手试试,但是不知道从何下手……
1. Smart Identification:
智能识别机制主要工作于测试脚本运行时(对象允许智能识别为真),当对象库中对象的强制属性(或辅助属性)与被测应用程序中对应对象的属性不一致时,智能识别机制将会启动。其主要原理为:先选择某个基本属性进行比较,若对象多于一个,再继续添加属性筛选;若添加的对象属性造成无对象匹配,则淘汰该属性,应用该方法直至找到唯一对象并对该对象执行操作。(若所有属性的添加或淘汰都无法识别唯一对象,QTP将应用ordinal identifier去识别对象。)
以上是原话,然后我的理解是:比如要识别页面上的一个webedit控件,然后这个空间有那么多的属性,qtp会根据他的属性,然后从objectidentification里的强制属性和辅助属性里找,假如一致,就可以识别到他就是identification机制里定义的webedit了,假如还是识别不到,就用智能识别。再不行,就用index。
在界面中可看到各种标准Windows控件对应的对象识别方法,例如,对于Dialog控件,使用的是“is child window”、“is ownedwindow”、“nativeclass”和“text”这四个控件对象的属性来区别出一个唯一的Dilalog控件对象。可以单击“Add/Remove”按钮,选择更多的控件属性来唯一识别控件。
以下这篇帖子有部分qtp官方文档的原话,我觉得理解起来更加权威些:
When you run a test, QuickTest searches for the object that matches the
description it learned (without the ordinal identifier). If it cannot find any
object that matches the description, or if it finds more than one object that
matches, QuickTest uses the Smart Identification mechanism (if enabled) to
identify the object. In many cases, a Smart Identification definition can help
QuickTest identify an object, if it is present, even when the learned
description fails due to changes in one or more property values. The test
object description is used together with the ordinal identifier only in cases
where the Smart Identification mechanism does not succeed in narrowing
down the object candidates to a single object.
The Object Identification dialog box also enables you to configure new
user-defined classes and map them to an existing test object class so that
QuickTest can recognize objects from your user-defined classes when you
run your test.
智能识别可是在三个层面设置可是启用:
a. 类,即Object Identification对话框中
b. 对象,即Object Repository对话框中
c. 测试中,即Run Testing对话框中

2. Ordinal Identifier:
QTP除了可以获取到被测对象的主属性、辅助属性值外,还可以获取到被测对象的Ordinal Identifier值。当QTP发现有多个对象具有相同的主属性值、辅助属性值而无法对它们进行唯一识别时, Ordinal Identifier会获取每个对象的序列值,以将它们区别开来。
由于序列值是一个相对值,任何页面的变更都有可能导致这些值发生改变,因此,只在主属性与辅助属性无法唯一识别对象的情况下,QTP才会获取该序列值。
在运行测试脚本时,如果使用对象的属性值以及Smart Identification机制都无法唯一识别应用程序中的对象,才会使用到序列值。如果QTP可以通过其它属性值对对象进行识别,则会忽略序列值。
QTP可以使用以下类型的ordinal identifiers来识别对象:
Index     表示对象在程序代码中的出现顺序,这个顺序是相对于其它具有相同属性的对象而言的。
Location  表示对象在窗口、Frame或对话框中出现的顺序,这个顺序是相对于其它具有相同属性的对象而言的。
CreationTime(仅适用于Browser对象) 表示Browser对象打开的顺序,这相顺序是相对于其它已打开的具有相同属性的对象而言的。
一般情况下,Ordinal Idenfifier类型适用于所有类。在Object Identification窗口,通过Ordial identifier下拉框,可以选择其它类型。
注:QTP在录制脚本时,如果通过主属性与辅助属性已能够唯一识别对象,则不会获取对象的ordinal identifier顺序值。你可以在脚本录制完成后,在Object Properties或Object Repository对话框中使用Add/Remove操作,手动添加顺序值。QTP对象识别机制 (转载)

测试对象模型是一大组对象类型或类,比如WebElement、WebList,QTP用这些对象类型和类来表示Web页面中的对象。每个测试对象类都有一个可以唯一标识对象的属性列表以及可以录制的方法,这个属性列表和方法列表是可以设置的,见图:
   
在Object Identification对话框中设置的属性录制完后都可以在Object Repository中查看。属性的具体分类见下一小节。

QTP里的对象分两个概念,一个是Test Object(简称TO)测试对象,一个是Runtime Object(简称RO)运行时对象。
这两个概念从字面上不大好理解,也容易混淆。
但从实际作用上来看,应该说TO就是是仓库文件里定义的仓库对象,RO是被测试软件的实际对象。
QTP识别对象,一般是要求先在对象仓库文件里定义仓库对象,里面存有实际对象的特征属性的值。
然后在运行的时候,QTP会根据脚本里的对象名字,在对象仓库里找到对应的仓库对象,
接着根据仓库对象的特征属性描述,在被测试软件里搜索找到相匹配的实际对象,最后就可以对实际对象进行操作了。
仓库对象TO一般在录制/编写脚本时加入仓库文件,它不仅可以在录制编写时进行修改,
也可以在运行过程中进行动态修改,以匹配实际对象。
和TO、RO相关的几个函数有:
  GetTOProperty():取得仓库对象的某个属性的值
  GetTOProperties():取得仓库对象的所有属性的值
  SetTOProperty():设置仓库对象的某个属性的值
  GetROProperty():取得实际对象的某个属性的值
理解了TO的含义,你就可以自由的用SetTOProperty()定义TO,以灵活的操作RO
比如有个测试任务,窗口上有很多待检查的记录,每条记录右边都有一个Check按钮,用来检查各条记录。
记录个数不定,所以Check按钮个数也就不定,只有一个Edit显示记录个数。
我们要对每条记录进行检查,也就是要点击每个Check按钮。
但是Check按钮个数不定,不好录制,而且个数可能也很多(上百个),即使能一一录制,那也很麻烦。
那我有一个好办法,只录制一个按钮对象,它设有两个特征属性 label=OK, index=0
然后用下面的脚本,就可以完成测试
buttonNum = CInt(JavaWindow("Test").JavaEdit("Record Num").GetROProperty("value"))
For buttonIndex = 0 to buttonNum - 1
JavaWindow("Test").JavaButton("Check").SetTOProperty("index", buttonIndex)
JavaWindow("Test").JavaButton("Check").Click
Next
或者窗口上有New、Modify、Delete、Check等好几个按钮,要把这几个按钮一一按过去
我在对象仓库里只设置一个按钮对象AnyButton,label特征属性值填任意值,然后用下面脚本执行测试
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "New")
JavaWindow("Test").JavaButton("AnyButton").Click
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Modify")
JavaWindow("Test").JavaButton("AnyButton").Click
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Delete")
JavaWindow("Test").JavaButton("AnyButton").Click
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Check")
JavaWindow("Test").JavaButton("AnyButton").Click

脚本描述定义访问对象
如果Web对象没有被添加到对象库中,或者通过该Web对象的标识QTP无法识别,即对象库中没有该对象,那么可以用另一种方式:在脚本中用描述性编程来定义访问对象
常规语法为:
TestObject("PropertyName1:=PropertyValue1","PropertyName2:=PropertyValue2"...)+具体操作

Dim buttonIndex
buttonIndex = 1
JavaWindow("Test").JavaButton("label:=check","index:="+CStr(buttonIndex)).Click

属性详解(转载)

QTP通过三类属性来识别对象:
a)Mandatory;
b)Assistive;
c) Ordinal identifiers。
大部分情况下,通过对象的一些特定属性值就可以识别对象(类型a)。这些属性可以通过Tools->Object Identification 定义。每个测试对象类拥有一系列用于唯一确定对象的属性,这就是在这个Object Identification里查看。比如我看了一下WebEdit空间的识别方式,发现它就是通过type,name和html tag来识别。
在这里列出了所有QTP能识别的控件,以及控件的识别方式。你可以给他添加X、Y坐标进行识别。或更明显的,列表中的信息,不按名称识别,而是按ID识别。这个修改可以解决一些问题,想动手试试,但是不知道从何下手……
1. Smart Identification:
智能识别机制主要工作于测试脚本运行时(对象允许智能识别为真),当对象库中对象的强制属性(或辅助属性)与被测应用程序中对应对象的属性不一致时,智能识别机制将会启动。其主要原理为:先选择某个基本属性进行比较,若对象多于一个,再继续添加属性筛选;若添加的对象属性造成无对象匹配,则淘汰该属性,应用该方法直至找到唯一对象并对该对象执行操作。(若所有属性的添加或淘汰都无法识别唯一对象,QTP将应用ordinal identifier去识别对象。)
以上是原话,然后我的理解是:比如要识别页面上的一个webedit控件,然后这个空间有那么多的属性,qtp会根据他的属性,然后从objectidentification里的强制属性和辅助属性里找,假如一致,就可以识别到他就是identification机制里定义的webedit了,假如还是识别不到,就用智能识别。再不行,就用index。
在界面中可看到各种标准Windows控件对应的对象识别方法,例如,对于Dialog控件,使用的是“is child window”、“is ownedwindow”、“nativeclass”和“text”这四个控件对象的属性来区别出一个唯一的Dilalog控件对象。可以单击“Add/Remove”按钮,选择更多的控件属性来唯一识别控件。
以下这篇帖子有部分qtp官方文档的原话,我觉得理解起来更加权威些:
When you run a test, QuickTest searches for the object that matches the
description it learned (without the ordinal identifier). If it cannot find any
object that matches the description, or if it finds more than one object that
matches, QuickTest uses the Smart Identification mechanism (if enabled) to
identify the object. In many cases, a Smart Identification definition can help
QuickTest identify an object, if it is present, even when the learned
description fails due to changes in one or more property values. The test
object description is used together with the ordinal identifier only in cases
where the Smart Identification mechanism does not succeed in narrowing
down the object candidates to a single object.
The Object Identification dialog box also enables you to configure new
user-defined classes and map them to an existing test object class so that
QuickTest can recognize objects from your user-defined classes when you
run your test.
智能识别可是在三个层面设置可是启用:
a. 类,即Object Identification对话框中
b. 对象,即Object Repository对话框中
c. 测试中,即Run Testing对话框中

2. Ordinal Identifier:
QTP除了可以获取到被测对象的主属性、辅助属性值外,还可以获取到被测对象的Ordinal Identifier值。当QTP发现有多个对象具有相同的主属性值、辅助属性值而无法对它们进行唯一识别时, Ordinal Identifier会获取每个对象的序列值,以将它们区别开来。
由于序列值是一个相对值,任何页面的变更都有可能导致这些值发生改变,因此,只在主属性与辅助属性无法唯一识别对象的情况下,QTP才会获取该序列值。
在运行测试脚本时,如果使用对象的属性值以及Smart Identification机制都无法唯一识别应用程序中的对象,才会使用到序列值。如果QTP可以通过其它属性值对对象进行识别,则会忽略序列值。
QTP可以使用以下类型的ordinal identifiers来识别对象:
Index     表示对象在程序代码中的出现顺序,这个顺序是相对于其它具有相同属性的对象而言的。
Location  表示对象在窗口、Frame或对话框中出现的顺序,这个顺序是相对于其它具有相同属性的对象而言的。
CreationTime(仅适用于Browser对象) 表示Browser对象打开的顺序,这相顺序是相对于其它已打开的具有相同属性的对象而言的。
一般情况下,Ordinal Idenfifier类型适用于所有类。在Object Identification窗口,通过Ordial identifier下拉框,可以选择其它类型。
注:QTP在录制脚本时,如果通过主属性与辅助属性已能够唯一识别对象,则不会获取对象的ordinal identifier顺序值。你可以在脚本录制完成后,在Object Properties或Object Repository对话框中使用Add/Remove操作,手动添加顺序值。


QTP中设置共享对象库(转载)

很多时候我们总是觉得管理QTP的脚本比较烦.因为除了要对代码的管理之外,还要保证QTP对象库的完整.每一个用例脚本的生成,同时又都会生成一个对象库.那么是不是可以做一个公共的对象库来给各个用例脚本调用呢?接下来,我们就来实现共享对象库的应用.  
第一步:把需要加到共享对象库中的各个用例脚本的对象库,分别导出成.tsr文件.
  操作方法:先用QTP打开已经录制完毕的脚本后,选择Resources--> Object Repository .
  然后file-->export Local Objects导出tsr文件
第二步:把需要加入到共享对象库中的各个用例脚本的对象库,合并对象及对象属性,形成一个大的共享对象库.(可选)
  操作方法:打开Resources-->Object Repository Manager.找到Tools菜单,然后选择打开ObjectRepository mergetool.选择两个要合并的对象库文件,进行对象合并.一次只能合并两个.所以如果这里你要合并多个对象库文件的话,先合并两个后,保存成一个新的.tsr文件.然后再重复上面的操作,选择这个新的.tsr文件和另一个准备好的对象库合并.合并的时候,你会发现,在两个对象库文件中,相同的对象合并成一个,不同的对象,全部被完整增加进去.然后形成一个大的对象库.现在只要保存这个共享对象库.如果以后有新增的对象,可以重复上述操作.
第三步:调用上面保存好的共享对象库.给新的脚本使用.
  在任意test中,都可以依照操作步骤:Resources-->Associate Repository.选择上面保存好的共享对象库的.tsr文件.加入到Associate Repository中.
  完成这一步后,其实整个共享对象库的操作已经完成.你在对象库中可以看到以后的对象.在录制新脚本的时候,如果对象已经存在,就不会再被记录,只有在这个对象库中没有的对象才会被记录进去.回放脚本,对象识别成功.
  • 大小: 75.7 KB
  • 大小: 55.1 KB
分享到:
评论

相关推荐

    QTP 对象识别原理

    以上就是QTP对象识别的原理以及测试流程的主要方面,包括错误处理机制。理解这些概念对于有效地使用QTP进行自动化测试至关重要。在实际应用中,还需要结合具体的测试场景和需求,灵活运用这些知识来创建高效且可靠的...

    QTP对象识别常用方法介绍

    下面将详细介绍QTP对象识别的常用方法。 一、默认对象识别 QTP在录制测试时,会自动识别屏幕上的对象并将其转换为对象库中的对象。这是基于它的智能识别机制,包括图像识别、属性匹配和动态定位等。默认情况下,QTP...

    QTP对象识别的那点事

    ### QTP对象识别详解 #### 一、QTP原理简介 **QTP**(QuickTest Professional)是由Mercury(现为HP的一部分)开发的一款自动化测试工具,主要用于功能测试的自动化处理。它支持多种软件应用环境,如Web、ActiveX、VB...

    QTP识别对象的原理

    QTP的对象模型基于“对象库”和“对象识别机制”。它使用一种称为“智能识别”的技术来识别屏幕上的对象,这主要依赖于以下三个核心组件: 1. **对象库**:这是QTP存储所有已识别对象的地方,包括它们的类、属性和...

    QTP对象识别常用方法

    【QTP对象识别常用方法】 QuickTest Professional(QTP,现称为UFT,Unified Functional Testing)是一款自动化测试工具,主要用于功能测试和回归测试。在QTP中,对象识别是核心功能之一,它决定了QTP如何识别和...

    QTP对象库简介QTP对象库简介

    #### 四、QTP对象识别与管理 - **对象库(OR)**: QTP通过对象库来存储和管理所有被测试的应用程序对象。可以通过快捷键Ctrl+R打开对象库进行各种操作。 - **对象识别原理**: QTP通过比较预期测试对象(TO)和实际...

    QTP 对象识别方法

    ### QTP对象识别方法 #### 一、对象识别的基础概念 **对象的基本概念** 在自动化测试工具QTP(QuickTest Professional)中,对象是指存在于对象库中的各种类型的元素。这些元素可以是用户界面上的任何组成部分,...

    QTP对象识别方法介绍

    ### QTP对象识别方法介绍 #### 一、引言 QuickTest Professional (QTP) 是一款功能强大的自动化测试工具,广泛应用于软件测试领域。通过QTP,用户能够轻松地创建、运行测试案例,并查看测试结果。它支持VBScript...

    第14篇-QTP对象管理机制(2)

    【QTP对象管理机制(2)】是关于自动化测试工具QuickTest Professional(QTP)的深入探讨,主要聚焦于QTP如何管理和识别测试中的对象。QTP,现已被命名为UFT(Unified Functional Testing),是HP公司开发的一款功能...

    第13篇-QTP对象管理机制(1)

    【QTP对象管理机制】是自动化测试工具QuickTest Professional(现在称为UFT,Unified Functional Testing)的核心组成部分。在深入理解这一机制之前,我们首先要明确QTP的定位:它是一款功能强大的自动化测试工具,...

    QTP对象识别

    QTP对象识别

    QTP对象不能识别的处理方式流程图,教你每一步如何解决对象不能识别的处理方法,

    QTP对象不能识别的处理方式流程图,教你每一步如何解决对象不能识别的处理方法,每一步分开介绍不同的现象,直到解决为止,就算是一个小白,都能根据流程图解决QTP不能识别对象的各种问题,

    QTP对象的识别与操做及QTP与oracle链接

    【QTP对象的识别与操作】 在自动化测试工具QuickTest Professional(QTP)中,对象的识别和操作是核心功能之一。QTP中的对象主要包括Test Object(TO)和Runtime Object(RO)。 1. Test Object(TO): TO可以理解...

    第12篇-QTP对象探测器

    总的来说,QTP对象探测器是自动化测试人员的得力助手,它简化了对象识别过程,增强了测试脚本的精确性和可靠性。通过熟练使用对象探测器,测试人员可以更高效地进行测试脚本的编写和维护,从而提升整个软件测试流程...

    QTP11补丁 - 增强WPF对象识别以及问题修复

    2. **事件驱动识别**:可能引入了更先进的事件监听机制,允许测试脚本根据对象的动态行为进行识别。 3. **深度遍历**:增强了对嵌套WPF对象的识别,支持更复杂的UI层次结构。 4. **自定义控件支持**:对于开发者...

    QTP不能识别对象时的处理办法

    #### 知识点三:预防QTP对象识别问题的最佳实践 - **保持插件最新**:定期检查并更新QTP插件,确保它们与被测应用兼容。 - **环境一致性**:尽量确保测试环境与生产环境保持一致,包括浏览器版本和其他运行时组件...

    QTP回放时不能识别对象

    总之,解决QTP回放时不能识别对象的问题,需要对QTP的对象库管理、对象识别机制有深入理解,并结合实际情况灵活运用各种工具和策略。通过持续学习和实践,可以有效地避免和处理这类问题,提高自动化测试的稳定性和...

    对于QTp录制对象不能识别链接的解决方案.docx

    ### 对于QTp录制对象不能识别链接的解决方案 #### 知识点一:问题背景与现象 在使用QuickTest Professional (QTP)进行自动化测试的过程中,可能会遇到一个常见问题:当录制或识别某些Web弹出窗口时,QTP无法正确...

    QTP识别和操作对象的原理

    解释QTP识别对象和操作的原理,帮助更多的人了解QTP工作原理

Global site tag (gtag.js) - Google Analytics