zoukankan      html  css  js  c++  java
  • QTP自传之描述性编程

    描述性编程,即采用描述性的语言定位对象,不需要事先将对象添加到对象库中。下面,就说说如何使用描述性编程,我们将继续使用对象库编程中的网页。

    使用描述性编程的两种方法

    • 直接描述

    对象("属性名:=属性值","属性名:=属性值"...)

    这种方式很形象很好记,比方说要去找个人,就叫张三吧,用上面的公式就是这样。

    人("名字:=张三")

    如果有多个叫张三的人,可以更具体的描述出特征。

    人("名字:=张三","性别:=男","身高:=175CM"...)

    通过说出张三的这些特种,最终我们会找到他,下面是我们在对象库编程使用的代码。

    Browser("web对象演示").Page("web对象演示").WebEdit("用户名").Set "test"
    Browser("web对象演示").Page("web对象演示").WebEdit("邮箱").Set "11111@qq.com"
    Browser("web对象演示").Page("web对象演示").WebEdit("个人介绍").Set "haha"

    用描述性编程可以达到同样的效果,试试看,用户名是不是输入了test呢?

    '描述性编程
    Browser("micClass:=Browser").Page("micClass:=Page").WebEdit("name:=username").Set "test"
    Browser("micClass:=Browser").Page("micClass:=Page").WebEdit("name:=mail").Set "11111@qq.com"
    Browser("micClass:=Browser").Page("micClass:=Page").WebEdit("class:=edit","html tag:=TEXTAREA").Set "haha"

    注意,对个人介绍富文本使用了两个属性描述,通过网页源码(不想或看不到源码可以通过Spy工具查看对象属性)我们可以看到它没有name属性,而用户名和邮箱的class属性都为edit,要想定位,必须再添加唯一性的属性,这里选择html tag。

    //截取的网页源码
    <div class="content">
       <span>用户名</span><input type="text" name="username" class="edit">
    </div>
    <div class="content">
        <span>邮箱</span><input type="mail" name="mail"  class="edit">
    </div>
    <div class="content">
        <span>个人介绍</span><textarea rows="5" cols="20" class="edit"></textarea>
    </div>

    大家有没有注意,描述性编程有的时候不能直接从代码上看出所描述对象的具体用途,比如上面代码WebEdit("class:=edit","html tag:=TEXTAREA"),通过class和html tag属性描述,但是我们不知道它描述的什么对象,而对象库编程的代码WebEdit("个人介绍"),清楚的指出这是设置个人介绍输入框的值,这也算是描述性编程不足的地方吧。

    • Description对象方法

    直接上代码

     1 '描述性编程description方式
     2 '生成description对象
     3 Set obj_browser=description.Create()
     4 Set obj_page=description.Create()
     5 Set obj_webedit_username=description.Create()
     6 Set obj_webedit_mail=description.Create()
     7 Set obj_webedit_textarea=description.Create()
     8 '设置属性值
     9 obj_browser("micClass").value="Browser"
    10 obj_page("micClass").value="Page"
    11 obj_webedit_username("name").value="username"
    12 obj_webedit_mail("name").value="mail"
    13 obj_webedit_textarea("html tag").value="TEXTAREA"
    14 
    15 Browser(obj_browser).Page(obj_page).WebEdit(obj_webedit_username).Set "test"
    16 Browser(obj_browser).Page(obj_page).WebEdit(obj_webedit_mail).Set "11111@qq.com"
    17 Browser(obj_browser).Page(obj_page).WebEdit(obj_webedit_textarea).Set  "haha"
    18 
    19 '释放对象
    20 Set obj_browser=nothing
    21 Set obj_page=nothing
    22 Set obj_webedit_username=nothing
    23 Set obj_webedit_mail=nothing
    24 Set obj_webedit_textarea=nothing

    这样写看上去挺好,但当有很多相同对象的时候就会很麻烦,有100个WebEdit难道要设置100个description对象?我们可以改进代码如下

     1 '描述性编程description方式
     2 '生成description对象
     3 Set obj_browser=description.Create()
     4 Set obj_page=description.Create()
     5 Set obj_webedit=description.Create()
     6 
     7 '设置属性值
     8 obj_browser("micClass").value="Browser"
     9 obj_page("micClass").value="Page"
    10 obj_webedit("micClass").value="WebEdit"
    11 
    12 Set obj_webedits=Browser(obj_browser).Page(obj_page).ChildObjects(obj_webedit)
    13 
    14 obj_webedits.item(0).set "test"
    15 obj_webedits.item(1).set "11111@qq.com"
    16 obj_webedits.item(2).set "haha"
    17 
    18 '释放对象
    19 Set obj_browser=nothing
    20 Set obj_page=nothing
    21 Set obj_webedit=nothing
    22 Set obj_webedits=nothing

    两种方式都已经介绍完了,第一种方式适用于一般的测试环境,第二种方式适用于基于框架的测试因其代码的复用性较高,具体的区别大家可以自己体会。下面用两种描述性编程方式重写对象库编程的代码。

     1 '描述性编程description方式
     2 '生成description对象
     3 Set obj_browser=description.Create()
     4 Set obj_page=description.Create()
     5 Set obj_webedit=description.Create()
     6 Set obj_weblist=description.Create()
     7 Set obj_webcheckbox=description.Create()
     8 Set obj_webradiogroup=description.Create()
     9 Set obj_webbutton=description.Create()
    10 Set obj_webtabe=description.Create()
    11 
    12 '设置属性值
    13 obj_browser("micClass").value="Browser"
    14 obj_page("micClass").value="Page"
    15 obj_webedit("micClass").value="WebEdit"
    16 obj_weblist("micClass").value="WebList"
    17 obj_webcheckbox("micClass").value="WebCheckBox"
    18 obj_webradiogroup("micClass").value="WebRadioGroup"
    19 obj_webbutton("micClass").value="WebButton"
    20 obj_webtabe("micClass").value="WebTable"
    21 
    22 '获取所有WebEdit对象
    23 Set obj_webedits=Browser(obj_browser).Page(obj_page).ChildObjects(obj_webedit)
    24 obj_webedits.item(0).set "test"
    25 obj_webedits.item(1).set "11111@qq.com"
    26 obj_webedits.item(2).set "haha"
    27 
    28 Browser(obj_browser).Page(obj_page).WebList(obj_weblist).Select "java"
    29 
    30 '获取所有WebCheckBox对象
    31 Set obj_webcheckboxs=Browser(obj_browser).Page(obj_page).ChildObjects(obj_webcheckbox)
    32 For i=0 to 1
    33     obj_webcheckboxs.item(i).set "ON"
    34 Next
    35 
    36 Browser(obj_browser).Page(obj_page).WebRadioGroup(obj_webradiogroup).Select ""
    37 Browser(obj_browser).Page(obj_page).WebButton(obj_webbutton).Click
    38 
    39 '获取WebTable单元格内的值
    40 username=Browser(obj_browser).Page(obj_page).WebTable(obj_webtabe).GetCellData(2,1)
    41 mail=Browser(obj_browser).Page(obj_page).WebTable(obj_webtabe).GetCellData(2,2)
    42 sex=Browser(obj_browser).Page(obj_page).WebTable(obj_webtabe).GetCellData(2,3)
    43 
    44 If username="test" and mail="11111@qq.com" and sex="" Then
    45     msgbox "OK"
    46 End If
    47 '释放对象
    48 Set obj_browser=nothing
    49 Set obj_page=nothing
    50 Set obj_webedit=nothing
    51 Set obj_webedits=nothing
    52 Set obj_weblist=nothing
    53 Set obj_webcheckbox=nothing
    54 Set obj_webradiogroup=nothing
    55 Set obj_webbutton=nothing
    56 Set obj_webcheckboxs=nothing
    57 Set obj_webtabe=nothing
    58 '描述性编程直接描述方式
    59 
    60 With Browser("micClass:=Browser").Page("micClass:=Page")
    61     .WebEdit("name:=username").Set "test"
    62     .WebEdit("name:=mail").Set "11111@qq.com"
    63     .WebEdit("class:=edit","html tag:=TEXTAREA").Set "haha"
    64     .WebList("micClass:=WebList").Select "java"
    65     .WebCheckBox("html id:=film").Set "ON"
    66     .WebCheckBox("html id:=game").Set "ON"
    67     .WebRadioGroup("micClass:=WebRadioGroup").Select ""
    68     .WebButton("name:=提交").Click
    69 
    70     username=.WebTable("micClass:=WebTable").GetCellData(2,1)
    71     mail=.WebTable("micClass:=WebTable").GetCellData(2,2)
    72     sex=.WebTable("micClass:=WebTable").GetCellData(2,3)
    73 End With
    74 
    75 If username="test" and mail="11111@qq.com" and sex="" Then
    76     msgbox "OK"
    77 End If

    如何取舍

    • 对象库编程

    1.当对象的属性有更改时(例如对象name更改),而脚本中大量引用此对象(10次,100次),只需要更改对象库中对象的属性即可,描述性编程则需要手动更改所有涉及的代码,效率很低。

    2.可以通过对象拖拽,F7等方式快速编写代码,自动生成,不容易打错。

    • 描述性编程

    1.不需要维护庞大的对象库。

    2.在完成对象库编程不能完成的功能(对象不能识别的时候)

    描述性编程和对象库编程各有优缺点,不能说谁好谁劣,只有在适当的时候采用适当的方法才是正理。

    最好的方法就是,对象可以识别的时候就用对象库编程,不能识别的时候就用描述性编程。

  • 相关阅读:
    游戏中调用SDK提供的支付接口 头文件的包含
    sdk支付结果 调用游戏中的回调
    escplise 下新添加c++代码的处理
    rapidjson的read和write的sample
    cocos2d-x 3.0 场景切换特效汇总
    Eclipse 打开文件所在位置
    eclipse及其Java环境搭理
    rust cargo build一直出现 Blocking waiting for file lock on package cache
    rust随笔
    cmake 安装一个目录下的图片 到另一个目录文件中去
  • 原文地址:https://www.cnblogs.com/michaelle/p/4023307.html
Copyright © 2011-2022 走看看