海是我向往的地方,吸纳和咆哮是他的魅力!!!

QTP识别对象的原理(转)

上一篇 / 下一篇  2008-07-01 10:49:34

  • QTP识别对象的原理(转)

    一.QTP识别对象的原理

    QTP要求先在仓库文件里定义仓库对象,里面存有实际对象的特征属性的值,
    运行的时候,QTP会根据仓库对象的特征属性描述,寻找到实际对象,然后操作实际对象。

    仓库对象TO一般在录制/编写脚本时加入仓库文件,它不仅可以在编写时进行修改,
    也可以在运行过程中进行动态修改,以匹配实际对象。

    相关的几个函数有:

    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


    另外,QTP还支持脚本描述的方法来定义和访问对象,即不需要在仓库里定义,也能访问和操作实际对象

    如上面两个任务,可以如下实现

    1. 不需要在仓库里定义Check按钮对象,直接用下面脚本来实现测试

    buttonNum = CInt(JavaWindow("Test").JavaEdit("Record Num").GetROProperty("value"))
    For buttonIndex = 0 to buttonNum - 1
      JavaWindow("Test").JavaButton("label:=Check", "index:="+CStr(buttonIndex)).Click
    Next

    2. 不需要在仓库里定义New、Modify、Delete、Check按钮对象,直接用下面脚本来实现测试

    JavaWindow("Test").JavaButton("label:=New").Click
    JavaWindow("Test").JavaButton("label:=Modify").Click
    JavaWindow("Test").JavaButton("label:=Delete").Click
    JavaWindow("Test").JavaButton("label:=Check").Click

    二.操作对象的原理

    QTP为用户提供了两种操作对象的接口,一种就是对象的封装接口,另一种是对象的自身接口。
    对象的自身接口是对象控件本身的接口,只要做过软件开发,使用过控件的人应该很清楚。
    对象的封装接口是QTP为对象封装的另一层接口,它是QTP通过调用对象的自身接口来实现的。


    两种接口的脚本书写格式的差别在于:
      自身接口需要在对象名后面加object再加属性名或方法名,
      封装接口就不用在对象名后面加object。

    比如操作JavaEdit对象,通过QTP封装的封装接口,脚本如下:
      设置JavaEdit的内容:
         JavaDialog("Add NE").JavaEdit("NE Name").Set "NE1"
      读取JavaEdit的内容:
         msgbox JavaDialog("Add NE").JavaEdit("NE Name").GetROProperty("value")

    如果通过JavaEdit的自身接口,脚本如下:
      设置JavaEdit的内容:
         JavaDialog("Add NE").JavaEdit("NE Name").object.setText("NE1")
      读取JavaEdit的内容:
         Msgbox JavaDialog("Add NE").JavaEdit("NE Name").object.getText()

    QTP执行JavaEdit().Set语句时,是通过执行JavaEdit().object.setText()来实现的。
    QTP执行JavaEdit().GetROProperty("value"),是通过执行JavaEdit().object.getText()来实现的。
    JavaEdit对象的封装接口Set()和GetROProperty("value"),是QTP封装JavaEdit对象的自身接口setText()和getText()而得来的。

    对象的封装接口是QTP使用的缺省接口,我们录制出来的脚本都是使用封装接口,大家用的也都是封装接口。
    但是封装接口不如自身接口丰富,因为QTP只是封装了部分常用的自身接口嘛。
    所以我们在需要时,可以绕过封装接口,直接调用对象的自身接口。
    不过有些自身接口不够稳定,在实践中偶尔会出现问题,但是概率很少。
    封装接口有相应功能的话,就尽量用封装接口吧!


    理解了封装接口和自身接口的原理,我们就可以更加灵活的操作对象了。

    但是我们怎么知道对象都有哪些封装接口和自身接口呢?
    其实很简单,用对象查看器(Object Spy)查看对象,在查看窗口里有列出这些接口,包括属性和方法。
    窗口中间有选择栏让你选择Run-time Object或者Test Object,
    当你选择Run-time Object时,它显示的就是对象的自身接口(自身的属性和方法)
    当你选择Test Object时,它显示的就是对象的封装接口(封装的属性和方法)

    明白了这些,你还等什么呢?快拿起对象查看器,看看对象都有哪些封装接口和自身接口,肆意的操作它,玩弄它吧!

    原始链接:http://bbs.51testing.com/thread-13554-1-1.html

  • QTP常用函数说明(转)

    2008-05-30 10:18:05

    Left函数

    返回Variant (String),其中包含字符串中从左边算起指定数量的字符。

    语法

    Left(string,length)

    Left函数的语法有下面的命名参数

    部分

    说明

    string

    必要参数。字符串表达式其中最左边的那些字符将被返回。如果string包含Null,将返回Null

    length

    必要参数;为Variant (Long)数值表达式,指出将返回多少个字符。如果为0,返回零长度字符串("")。如果大于或等于string的字符数,则返回整个字符串。

     

    说明

    欲知string的字符数,使用Len函数。

    注意   LeftB函数作用于包含在字符串中的字节数据。所以length指定的是字节数,而不是要返回的字符数。

     

     

    Mid函数

    从字符串中返回指定数目的字符。

    Mid(string, start[, length])

    参数

    string

    字符串表达式,从中返回字符。如果string包含Null,则返回Null

    Start

    string中被提取的字符部分的开始位置。如果start超过了string中字符的数目,Mid将返回零长度字符串("")

    Length

    要返回的字符数。如果省略或length超过文本的字符数(包括start处的字符),将返回字符串中从start到字符串结束的所有字符。

    说明

    要判断string中字符的数目,可使用Len函数。

    下面的示例利用Mid函数返回字符串中从第四个字符开始的六个字符:

    Dim MyVar

    MyVar = Mid("VB脚本is fun!", 4, 6) 'MyVar包含"scrīpt"

    注意   MidB函数与包含在字符串中的字节数据一起使用。其参数不是指定字符数,而是字节数。

     

    Len函数

    返回字符串内字符的数目,或是存储一变量所需的字节数。

    Len(string| varname)

    参数

    string

    任意有效的字符串表达式。如果string参数包含Null,则返回Null

    Varname

    任意有效的变量名。如果varname参数包含Null,则返回Null

    说明

    下面的示例利用Len函数返回字符串中的字符数目:

    Dim MyString

    MyString = Len("VBscrīpt") 'MyString包含8

    注意   LenB函数与包含在字符串中的字节数据一起使用。LenB不是返回字符串中的字符数,而是返回用于代表字符串的字节数。

     

    Right函数

    从字符串右边返回指定数目的字符。

    Right(string, length)

    参数

    string

    字符串表达式,其最右边的字符被返回。如果string参数中包含Null,则返回Null

    Length

    数值表达式,指明要返回的字符数目。如果为0,返回零长度字符串;如果此数大于或等于string参数中的所有字符数目,则返回整个字符串。

    说明

    要确定string参数中的字符数目,使用Len函数。

    下面的示例利用Right函数从字符串右边返回指定数目的字符:

    Dim AnyString, MyStr

    AnyString = "Hello World"     '定义字符串。

    MyStr = Right(AnyString, 1)   '返回"d"

    MyStr = Right(AnyString, 6)   '返回" World"

    MyStr = Right(AnyString, 20)  '返回"Hello World"

    注意   RightB函数用于字符串中的字节数据,length参数指定返回的是字节数目,而不是字符数目。

     

    InStr函数

    返回某字符串在另一字符串中第一次出现的位置。

    InStr([start, ]string1,string2[,compare])

    参数

    start

    可选项。数值表达式,用于设置每次搜索的开始位置。如果省略,将从第一个字符的位置开始搜索。如果start包含Null,则会出现错误。如果已指定compare,则必须要有start参数。

    string1

    必选项。接受搜索的字符串表达式。

    string2

    必选项。要搜索的字符串表达式。

    compare

    可选项。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅设置部分。如果省略,将执行二进制比较。

    设置

    compare参数可以有以下值:

    常数

    描述

    vbBinaryCompare

    0

    执行二进制比较。

    vbTextCompare

    1

    执行文本比较。

    返回值

    InStr函数返回以下值:

    如果

    InStr返回

    string1为零长度

    0

    string1Null

    Null

    string2为零长度

    start

    string2Null

    Null

    string2没有找到

    0

    string1中找到string2

    找到匹配字符串的位置

    start > Len(string2)

    0

    说明

    下面的示例利用InStr搜索字符串:

    Dim SearchString, SearchChar, MyPos

    SearchString ="XXpXXpXXPXXP"  '要搜索的字符串。

    SearchChar = "P"  ' Search for "P".

    MyPos = Instr(4, SearchString, SearchChar, 1)  '在位置4进行的文本比较。返回6

    MyPos = Instr(1, SearchString, SearchChar, 0)  '在位置1进行的二进制比较。返回9

    MyPos = Instr(SearchString, SearchChar)  '默认情况下,进行的是二进制比较(省略了最后的参数)。返回9

    MyPos = Instr(1, SearchString, "W")  '在位置1进行的二进制比较。返回0(找不到"W")。

    注意   InStrB函数使用包含在字符串中的字节数据,所以InStrB返回的不是一个字符串在另一个字符串中第一次出现的字符位置,而是字节位置。

     

    LTrimRTrimTrim函数

    返回不带前导空格(LTrim)、后续空格(RTrim)或前导与后续空格(Trim)的字符串副本。

    LTrim(string)

    RTrim(string)

    Trim(string)

    string参数是任意有效的字符串表达式。如果string参数中包含Null,则返回Null

    说明

    下面的示例利用LTrim, RTrim,Trim函数分别用来除去字符串开始的空格、尾部空格、开始和尾部空格:

    Dim MyVar

    MyVar = LTrim("  vbscrīpt ")  'MyVar包含"vbscrīpt "

    MyVar = RTrim("  vbscrīpt ")  'MyVar包含"  vbscrīpt"

    MyVar = Trim("  vbscrīpt ")  'MyVar包含"vbscrīpt"

     

    Rnd函数示例

    本示例使用Rnd函数随机生成一个16的随机整数。

  • TAG:

     

    评分:0

    我来说两句

    Open Toolbar