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

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

  • 直接描述

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

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

人("名字:=张三")

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

人("名字:=张三","性别:=男","身高:=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对象方法

直接上代码

 '描述性编程description方式
'生成description对象
Set obj_browser=description.Create()
Set obj_page=description.Create()
Set obj_webedit_username=description.Create()
Set obj_webedit_mail=description.Create()
Set obj_webedit_textarea=description.Create()
'设置属性值
obj_browser("micClass").value="Browser"
obj_page("micClass").value="Page"
obj_webedit_username("name").value="username"
obj_webedit_mail("name").value="mail"
obj_webedit_textarea("html tag").value="TEXTAREA" Browser(obj_browser).Page(obj_page).WebEdit(obj_webedit_username).Set "test"
Browser(obj_browser).Page(obj_page).WebEdit(obj_webedit_mail).Set "11111@qq.com"
Browser(obj_browser).Page(obj_page).WebEdit(obj_webedit_textarea).Set "haha" '释放对象
Set obj_browser=nothing
Set obj_page=nothing
Set obj_webedit_username=nothing
Set obj_webedit_mail=nothing
Set obj_webedit_textarea=nothing

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

 '描述性编程description方式
'生成description对象
Set obj_browser=description.Create()
Set obj_page=description.Create()
Set obj_webedit=description.Create() '设置属性值
obj_browser("micClass").value="Browser"
obj_page("micClass").value="Page"
obj_webedit("micClass").value="WebEdit" Set obj_webedits=Browser(obj_browser).Page(obj_page).ChildObjects(obj_webedit) obj_webedits.item().set "test"
obj_webedits.item().set "11111@qq.com"
obj_webedits.item().set "haha" '释放对象
Set obj_browser=nothing
Set obj_page=nothing
Set obj_webedit=nothing
Set obj_webedits=nothing

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

 '描述性编程description方式
'生成description对象
Set obj_browser=description.Create()
Set obj_page=description.Create()
Set obj_webedit=description.Create()
Set obj_weblist=description.Create()
Set obj_webcheckbox=description.Create()
Set obj_webradiogroup=description.Create()
Set obj_webbutton=description.Create()
Set obj_webtabe=description.Create() '设置属性值
obj_browser("micClass").value="Browser"
obj_page("micClass").value="Page"
obj_webedit("micClass").value="WebEdit"
obj_weblist("micClass").value="WebList"
obj_webcheckbox("micClass").value="WebCheckBox"
obj_webradiogroup("micClass").value="WebRadioGroup"
obj_webbutton("micClass").value="WebButton"
obj_webtabe("micClass").value="WebTable" '获取所有WebEdit对象
Set obj_webedits=Browser(obj_browser).Page(obj_page).ChildObjects(obj_webedit)
obj_webedits.item().set "test"
obj_webedits.item().set "11111@qq.com"
obj_webedits.item().set "haha" Browser(obj_browser).Page(obj_page).WebList(obj_weblist).Select "java" '获取所有WebCheckBox对象
Set obj_webcheckboxs=Browser(obj_browser).Page(obj_page).ChildObjects(obj_webcheckbox)
For i= to
obj_webcheckboxs.item(i).set "ON"
Next Browser(obj_browser).Page(obj_page).WebRadioGroup(obj_webradiogroup).Select "男"
Browser(obj_browser).Page(obj_page).WebButton(obj_webbutton).Click '获取WebTable单元格内的值
username=Browser(obj_browser).Page(obj_page).WebTable(obj_webtabe).GetCellData(,)
mail=Browser(obj_browser).Page(obj_page).WebTable(obj_webtabe).GetCellData(,)
sex=Browser(obj_browser).Page(obj_page).WebTable(obj_webtabe).GetCellData(,) If username="test" and mail="11111@qq.com" and sex="男" Then
msgbox "OK"
End If
'释放对象
Set obj_browser=nothing
Set obj_page=nothing
Set obj_webedit=nothing
Set obj_webedits=nothing
Set obj_weblist=nothing
Set obj_webcheckbox=nothing
Set obj_webradiogroup=nothing
Set obj_webbutton=nothing
Set obj_webcheckboxs=nothing
Set obj_webtabe=nothing
'描述性编程直接描述方式 With Browser("micClass:=Browser").Page("micClass:=Page")
.WebEdit("name:=username").Set "test"
.WebEdit("name:=mail").Set "11111@qq.com"
.WebEdit("class:=edit","html tag:=TEXTAREA").Set "haha"
.WebList("micClass:=WebList").Select "java"
.WebCheckBox("html id:=film").Set "ON"
.WebCheckBox("html id:=game").Set "ON"
.WebRadioGroup("micClass:=WebRadioGroup").Select "男"
.WebButton("name:=提交").Click username=.WebTable("micClass:=WebTable").GetCellData(,)
mail=.WebTable("micClass:=WebTable").GetCellData(,)
sex=.WebTable("micClass:=WebTable").GetCellData(,)
End With If username="test" and mail="11111@qq.com" and sex="男" Then
msgbox "OK"
End If

如何取舍

  • 对象库编程

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

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

  • 描述性编程

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

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

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

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

QTP自传之描述性编程的更多相关文章

  1. QTP描述性编程中往WebEdit控件输入文字问题

    在网上查找到许多相关的描述性编程的案例,自己就想动手一试,于是在专家视图中输入如下代码: systemUtil.Run "http://www.baidu.com" wait(15 ...

  2. QTP - 描述性编程

    描述性编程: 1.QTP的描述性编程能够摆脱测试对象库的限制,编写出更为复杂.适应能力更强的测试脚本. 2.即不需要在仓库晨定义,也能访问和操作实际对象. 3.用描述性编程编写的测试脚本在运行时,QT ...

  3. 017QTP 描述性编程的使用方法

    一.什么时候使用描述性编程 在测试过程中,有些界面元素是动态出现或动态变化的,在录制的时候并没有添加到对象库中 二.描述性编程的运行原理 用描述性编程编写的测试脚本在运行时,QTP会使用测试脚本中给出 ...

  4. QTP自传之web常用对象

    随着科技的进步,“下载-安装-运行”这经典的三步曲已离我们远去.web应用的高速发展,改变了我们的思维和生活习惯,同时也使web方面的自动化测试越来越重要.今天,介绍一下我对web对象的识别,为以后的 ...

  5. QTP自传之对象库编程

    对象库编程是我们平时工作中使用最多的编程方式,在自动化脚本开发中起到举足轻重的作用,与描述性性编程相比,更直接和易于维护,今天就和大家简单的聊聊如何进行对象库编程. 既然是对象库编程,肯定要对已存在于 ...

  6. QTP自传之初识

    我叫QTP,全名是HP Quicktest Professional,大家都叫我小Q. 小Q生于1998年,那是一个春天(哈哈咱也是跨世纪的人才).家里人丁兴旺,兄弟众多,L(Loadrunner), ...

  7. QTP自传之测试报告

    前言 测试报告是测试阶段的最后产出,也是最重要的产出,自动化测试报告也是如此.前期所做的工作,添加对象.编写脚本等都是为了可以生成一份正确.严谨的测试报告.我作为一款功能全面的自动化测试工具,毫无疑问 ...

  8. QTP自传之对象

    对象在手,测试我有 大家别误会,这里说的对象可不是值指男女朋友,而是对被测控件的识别.经过昨天的录制,大家一定很奇怪为什么我可以做到精确的回放操作,这都要归功于对象,下面就隆重的介绍我在对象识别方面的 ...

  9. QTP自传之录制

    录制,是一件吃力不讨好的活.很多人以为录制就是我的主要甚至全部的功能,这是大错特错的.不过,录制功能却是不熟悉我的人了解我的有效途径,是大家学习的有力武器.今天就先从录制功能说起吧. 说到录制,就不得 ...

随机推荐

  1. 【css面试题】三个DIV要求水平对齐,左右两个DIV宽度固定为100px,中间那个DIV充满剩余的宽度(至少2种方法)

    这是我在一家公司面试时遇到的问题,当时没有答上来!! 所以看到的小伙伴一定要注意了!! 变化浏览器宽度可看到效果: 左 右 中 然后我们来看看代码: 第一种方法:(浮动) <style type ...

  2. maven 依赖冲突的问题

    如果原始系统的jarA依赖jarB1.0 而新引入的jarC依赖jarB2.0 导致系统启动报错,提示冲突,这时为了保证原始系统的稳定性, 在pom.xml文件中引入jarC时,需要exclude掉j ...

  3. asp.net手动填充TreeView生成树

    最近在做项目发现需要用到树的地方,页面的前台任然是使用一个asp.net的控件TreeView来显示树的结构,当然也可以自己在前台写一个树来展示,这在后期跟局功能的不同很大可能会要用到异步的知识,废话 ...

  4. Android开发手记(31) 使用MediaRecorder录音

    使用Android手机的时候,有时我们会用到录音功能,本文简单的介绍了如何使用MediaRecorder通过手机自带麦克风进行录音. 首先,既然是录音,我们需要录音和写外存的权限: <uses- ...

  5. PL/SQL Developer远程连接Oracle数据库

    首先打开电脑,到pl/sql安装的指定目录[D:\app\DZL\product\11.2.0\dbhome_1\NETWORK\ADMIN]找到[tnsnames.ora]     打开[tnsna ...

  6. CI 笔记4 (easyui 手风琴)

    添加父div标签,和子div标签 <div class="easyui-accordion" data-options="fit:true,border:false ...

  7. DATEDIFF interval=ms的用法

    datediff(ms,@CurrDateTime,@Date)>0 当上面的日期超过24天,用上面的sql会有问题 要修改成如下: (CONVERT(VARCHAR,@CurrDateTime ...

  8. IOS DLNA开发(CyberLink和PlatinumKit)

    1.CyberLink 和 PlatinumKit 两者的比较 CyberLink大概在2010年之后功能就没有更新,部分功能不够完善,网上有下载地址 http://www.pudn.com/down ...

  9. asp.net Handler中的IsReusable属性及在Handler中使用Session

    大家在用HttpHandler的时候,一般都会有两个大的疑问(当然,前提是你有钻研精神的话,呵呵) 1. IsReusable到底什么意思? 老实说,这个属性很多人都感兴趣,但搞懂的人确实不多.MSD ...

  10. .Net用js实现aspx页面删除TextBox输入框的前后空格

    去掉TextBox输入框两头的前后空格:onblur="this.value=this.value.replace(/^\s+|\s+$/g,'');" str为要去除空格的字符串 ...