发布新日志

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

    2008-05-30 11:42:21

    一.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

    string1 Null

    Null

    string2 为零长度

    start

    string2 Null

    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 返回的不是一个字符串在另一个字符串中第一次出现的字符位置,而是字节位置。

     

    LTrimRTrim Trim 函数

    返回不带前导空格 (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 函数随机生成一个 1 6 的随机整数。

    本示例用 Randomize 语句初始化随机数生成器。由于忽略了数值参数, 所以 Randomize Timer 函数的返回值作为新的随机数种子值。

     

    Dim MyValue

    Randomize   ' 对随机数生成器做初始化的动作。

     

    MyValue = Int((6 * Rnd) + 1)   ' 生成 1 6 之间的随机数值。

     

  • QTP的安装过程中出现的问题解决方法

    2008-05-26 16:03:59

    在我的电脑上从来没装过QTP,系统是XP,安装后,执行了破解程序,但是允许QTP时,每次都检查LICENSE,我没有这个license,自然无法打开QTP。后来,将9.2的卸载了,重新安装8.2的,依然存在这个问题,看来不是版本的问题,也不是破解包的问题,因为我在公司的电脑安装过,都可以的。

    解决办法:

    找到破解程序释放license的地方,破解后,会显示将license存放在哪个目录下,打开那个目录,找到license文件,用文本打开,将里面的第一行的license(PG8B86ZVAOOBXS4W8M7HR94ST45L8N8T5OYXM3C63FCP7K2LXDK3GH83PQ9CFKMKFFZUFGBDOA#)拷贝粘贴到运行QTP的license输入框中,破解成功。

    原因分析:

    造成这个原因应该是QTP无法识别存放的license,手工输入license就行了。

     

     

Open Toolbar