转载-QTP代码

QTP与手机测试 阅读详情

生产随机数列
第一种方法
randomize'更新反回的数据
funcation rand(k)
n=int((k-1)*rnd+1)
rand=n
end funcation

第二种方法
n=randomnumber.value(1,255)

2  当运行到表中的 某一行,自动导出表中的所有数据
row=datatable.getcurrentrow
if row="5" then
  datatable.export("d:/data.xml")
end if

3
webedit("txtpass").setsecure"sdsdf...."
如果参数化密码,可以直接在 数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set

4 如果弹出对话框就获取上面提示信息并与表中的信息对 比,不统一证明弹出的提示出错,主要用来验证
if browser("web_name").dialog("dialog_name").exist(1) then'如果不出现=false
     error_message=browser("web_name").dialog("diaglog_name").static("用户密码 错误!".getRoproperty("text")
   if error_message<>(datatable.value("error_info"))then
         msgbox(error_message)
      end if
     browser("web_name").dialog("diaglog_name").close
  end if
这里我总结 了两点技巧
   一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第一 遍时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
    二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以 避免长度以及空格等字符的处理

5  datatable.value("num")只在global形式下的一种省略形式;完整形式是:
datatable.value("num",dtlocalsheet)

----- 向某一列的单元格赋值:
datatable.value("column_name",dtlocalsheet)="nanjing"

----- 取得某一行具体值:
datatable.setcurrentrow(n)
msgbox(datatable.getsheet("global").getparameter("column_name").Rawvalue)
或 者kk=datatable.Rawvalue("column_name","action1")

----在run-time时,动态 添加表格与数据
kk=datatable.addsheet("sheet_name").addparameter("column_name","value").name;

7   wintreeview一些操作
选择一个条目:wintreeview.select(item)'根是0
根的名 称:wintreeview.getitem(0)

8   数据库检查点模块:
sub database_check
set con=createobject("adodb.connection")
con.open "Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_
                 "PWD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"
'access方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:/test .mdb"
'Orocle 方式:con.open "DRIVER={Oracle in OraHome92};SERVER=CESHI;UID=CND_TEST;PWD=CND;DBQ=CESHI;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;"
set record=createobject("adodb.recordset")
sql ="select*from ibm_one_table"
record.open sql,con
DO
if(record("ibm_table_column")="kai")then'// 查找表格中有多少kai
num=num+1;
end if
record.movenext
loop until record.eof=true
record.close
set record=nothing
con.close
set con=nothing
end sub

9   换行符
    vbcr----chr(13)回车符// vblf----chr(10)换行符
    vbcrlf----chr(13)+chr(10)结合//type(chr(13)就相当于按了一上键盘上的enter

10  Run from step有两种方式:
在Keyword View模式会从本步骤运行到所有action结束
在expert view模式仅会将本action运行结束

11  由于对象属性原因,无法识别对象
-----对于对象属性是变化的,可以参数化 /或者用正则表达式
-----报匹配多个对象错误,可以spy查看对象,添加一个该对象另一个唯一标识属性
-----有时可以删除对象的 变化的属性来解决识别问题
------对于多个完全相同的对象,可以采用添加index,location,createtime等特殊属性来识 别
  (index:按照程序源码 ,绘制对象 的先后标识对象,所以与其它 相同对象是相互依 赖,当其它对象发生
  变化后,原先的所有对象index属性要发生变化,开始是0;如index:=0;
        location:根据对象的位置进行确定,从上到下,从左到右;
  CreateTime:按照对象被浏览器打开的先后标识对象)
------ 另外换一种思维方式,采取等效的方法;比如用键盘代替鼠标或用操作系统 本身特性去解决问题

12  对系统文 件的操作
-------从系统的文件中获取信息及删除文件
  get_file_infor("c:/she.mpg")
   function get_file_infor(url)
    dim fso,f
    set fso=createobject("scripting.filesystemobject")
    set f=fso.getfile(url)
    f.name:f.size:f.type:f.datacreated'///获取文件信息
    fso.deletefile(url)'/////删除文件
   end function
--------获取文件夹里所有文 件信息
get_folder_infor("c:/kai")
function get_folder_infor(folder)
dim fso,f,f1,n
set fso=createobject("scripting,filesystemobject")
set f=fso.getfolder(folder)
set fc=f.files
for each f1 in fc
selectcase f1.name
case"kai.mpg","she.mpg","dd.mp3 "'//检查文件夹里是否含 有这些文件
end select
next
end function

13   等待某个对象出现方法
y=......waitproperty("visible",true,10000)

14   防程序中断方法
On error resume next
On error goto handle

15  数组的 应用:
name=array(1,2,"aa","bb")
name(2)="aa"

16  正则表达式应用模板
进行日期YYYY-MM-DD的格式检查 :
Function RegExpTest(patrn, strng)
  Dim regEx, Match, Matches      ' Create variable.
  Set regEx = New RegExp         ' Create a regular expression.
  regEx.Pattern = patrn         ' Set pattern.
  regEx.IgnoreCase = True         ' Set case insensitivity.
  regEx.Global = True         ' Set global applicability.
  Set Matches = regEx.Execute(strng)   ' Execute search.
  For Each Match in Matches      ' Iterate Matches collection.
    RetStr = RetStr & "Match found at position "
    RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
    RetStr = RetStr & Match.Value & "'." & vbCRLF
  Next
  RegExpTest = RetStr
End Function
date_pattern="^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1/d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((01,3-9])|(1[0-2]))-(29|30)))))$"
result_message=RegExpTest(date_pattern, inputbox("请你输入要检查的时间:"))'用其它正则表达式更改此处
Select case result_message
Case ""
         msgbox("你输入的日期格式与标准不匹配")
case else  MsgBox(result_message)
end select

17   返回一个字符串在另一字符串中的位置
instr(string1,string2)

18   有时回放出现找不到对象时,可能不是由于你的代码问题,而是由于你的操作系统等设置问题;
举例说明1:
比如:你录制一个选择磁盘中的 文件动作
会录制为:
.winlistview("  ").drap 46,99
.winlistview("  ").draponitem "she.mp3"
下次录制的时候,如果你的系统文件改为不显示扩展名,下次执行的时候,QTP 就 找不到she.mp3,只能找到she;
举例说明2:
有时由于不同操作系统以及不同的ie,导致有些窗口不能识别,比如在2000下弹出 的网页对话框的标题是:
web 对 话框",而在2003上是”网页对话框"

19  "is+*"类型function
isarray'是否是数组
isconnected' 判断QTP是否连接到TD
isdate'是否是合法的日期类型
isempty'判断是否初始化
isNull'判断是否为空值
isNumeric' 判断是否是数字型
isobject'判断是否一个功能对象
isready'判断设备是否准备就绪
isRootFolder'是否 是根目录

20 Action之间的参数传递
例如:在Action1中,有如下代码:
out_str="This is out_string"
RunAction "Action2",oneIteration,out_str
在Acton2中,在其 step->Action Properties中的,input参数栏,加入out_str后,
msgbox(parameter("out_str")), 就能正确显示参数了 

21 WScript.Shell的一些应用
set WshShell =CreateObject("WScript.Shell")
WshShell.SendKeys "{ENTER}"     '模拟键盘进行操作
WshShell.AppActivate "Calculator"             '启动应用程序

22 获取对象属性名称用法:
GetRoProperty----从应用程序界面上获取对象属性(即,是脚本运 行时,获取的对象动态属性值)
           例如:获取对象库中index属性值,似乎只能用GetToProperty,因为应用程序界面上对象没有该属性,只是
      QTP 为识别该对象创立的描述属性;
GetToproperty----从对象库中描述对象的属性,静态值
GetToProperties---- 获取用于标识对象的属性集;对于这个集合,有count等属性方法

23 FireEvent的使用
可以对一个对象进行更复杂的操 作
如:FireEvent("onfocus")   '使一个控件获取焦点
     FireEvent("ondblclick")  '实现双击/也可以在事件设定中针对该对象事件响应  

24 模板的应用
----- 新建一个文本,输入一些新建Action时常包含的信息,然后保存为ActionTemplate.MST文件,
 并复制到QTP/dat目录 下;这样每次新建action都会包含固定的信息了;
例如:
'-------------------脚本说明 ---------------
'产品版本:      __Build(  )
'测试员:
'编写日期:
'测试功能:
' 脚本类型:
'被测试 对象初始状态:
' 进展程度:
'基本思路:
'主要功能函数:
'历史修改:
'没解决的问题:
'-------------------- 脚本内容-------------

25 在对象库中,两个对象有时不能通过更改属性或命名来达到两个对象完全一致的替换;
在 web-mod项目中,我在对象库里添加了一个自动含有index标识属性的对象,然后每次通过SetToproperty来改变
index值, 对对象进行数据驱动,使其操作另一个对象,但脚本始终操作原先index属性值的对象;后来,把该对象
删除掉,重新添加一个不自动含有index 标识属性的该类对象,然后,手工添加,index标识属性,后来脚本能正常 工 作 了,可见两次的对象属性完全一致,但形成方式不一样,导致的结果往往也不一样;

26 childobject的应用
childobject可以返回界面上满足条件的对象集合,而且与对象库里是否有这些对象无关,这就可以简化对象 库;
返回的对象集合的count方法可以返回对象个数,这就可以通过下标对单个对象进行操作;在出现index标识对象时
可以进行运用
如:Set m_WinCheck=Description.Create()
      m_WinCheck("nativeclass").Value="Button"
      set All_WinCheck=Window("").Dialog("").Childobject(m_WinCheck)
      n=All_WinCheck.Count()
     for i=0 to n-1
      All_WinCheck(i).Set "ON"
     next

Create Log File:

Dim LOGFile, fso, MyFile

LOGFile="C:/Log.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists(LOGFile) = False Then
           Set MyFile = fso.CreateTextFile(LOGFile, True)
           MyFile.Close
    end if
Set MyFile = fso.OpenTextFile(LOGFile, 8, True)
MyFile.WriteLine("")
MyFile.WriteLine(" " & Cstr(Now) & " ---------------------------------------------------------")
MyFile.WriteLine("LOG Information!")
MyFile.Close

数据输入输出方法
数据输入输出的方法:
1  ExecuteFile"e:/kk.vbs"
2  Environment.LoadFromFile("e:/k.xml")
3  Datatable.ImportSheet/Import
4  GetData from DataBase
5  Datatable autofill
6  Action input/output
7  Use GetxxProperty to get data from Object
8  Use Some Function to Product data

插入同步等待某个对象出现

Dim continue
continue=false
While not continue
        wait(1)
        continue=Window("航班预订").Exist
Wend

异 常控制

If Window("航班预订").Dialog("航班预订").Exist Then
        Set myStatic=Description.Create()
        myStatic("nativeclass").Value="Static"
        Set myObject=Window("航班预订").Dialog("航班预订").ChildObjects(myStatic)
        erroInfo=myObject(0).GetROProperty("text")
        Reporter.ReportEvent micFail,"时间输入",erroInfo
        Window("航班预订").Dialog("航班预订").WinButton("确定").Click
        ExitActionIteration
End If

对于 bblong 斑竹在 11 楼的帖子,我感觉有点问题。

Dim continue
continue=false
While not continue
        wait(1)
        start=Window("航班预订").Exist
Wend

上 面的代码的目的是插入同步等待某个对象出现。可是,continue = false, not continue = true,循环体中间又没有改变continue 的语句,那么While 到Wend 之间的代码是永远循环进行下去的,此循环什么时候结束呢?因此,我想   start=Window("航班预订").Exist 是否改为  continue = Window("航班预订").Exist  呢?

 

转自 http://www.51testing.com/?uid-273596-action-viewspace-itemid-211287

QTP之drag and drop 在我们做自动化测试的时候,难免会用到拖拽的功能,这个问题解决办法有两个,其一就是在录制的过程中切换到QTP的低级模式录制脚本,像下面的code一样: [vb] view plain copy   Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Dra 阅读详情

相关推荐

QTP基础代码转载

以下为转载 这两周我开始学习QTP测试我们的web服务了;大体的软件使用操作流程是懂了,但具体实施起来特别是代码的组织及函数应用还有一些困难,因为自己只会vb没学习vbscrīpt,所以想和大家交流一下代码等一些基础知识;呵呵,一起学习,加强记忆与应用。 1 生产随机数列 第一种方法 randomize'更新反回的数据 funcation rand(k,n) n="int((...

weixin_33717117的博客 126

【转】QTP专家视图

QTP专家视图 专家视图 专家视图,也叫脚本视图,属于QTP中比较高级的功能选项。在该视图中,测试人员可以直接修改测试脚本(VB脚本)的代码,来增强测试脚本的功能,它要求测试人员具有一定VB脚本语法基础。 当然,测试脚本中也不完全是VB脚本,严格意义上来说,QTP的测试脚本应该是标准 VB脚本QTP测试对象的组合体。 所谓的QTP测试对象,就是QuickTest定义的用来表示Wind...

weixin_30596343的博客 470

qtp 基础代码---转载自51testing中的kai_top 网友。

1 生产随机数列第一种方法 CODE: [Copy to clipboard] randomize'更新反回的数据funcation rand(k,n)n=int((k-1)*rnd+1)rand=nend funcation第二种方法 CODE: [Copy to clipboard] n=randomnumber.value(1,255)2当运行到表中的某一行,自动导出...

weixin_34255055的博客 134

QTP常用的快捷键

在编写QTP代码时遇到多行注释,查询下快捷键多行注释为:ctrl+M 取消多行注释:ctrl+shift+M, 进一步把快捷键总结了,以下文字为转载而来, 其中QTP快捷键部分原来文字有与我使用的QTP10不符合的,都一一改正并验证过。vb部分原样转载而来。 QTP快捷键 文件菜单 新建 > 测试= CTRL + N 新建 > 业务组件CTRL + SHIFT + N 新建 > 函数库A

KerryRuan的专栏 2301

转载】循序渐进学习QTP三步曲

循序渐进学习QTP--初级篇       我们使用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等。       强烈建议你按照版主oldsidney 写的 Tutorial_oldsidney_cn.pdf 文件来认认真真、从头到尾地执行一遍,包括录制脚本

Aaron1087的专栏 1028

QTP小技巧】02_QTP中Complete Word 实现(转载

相信做过开发或者写过JAVA的朋友都应该对Complete Word这个词语不陌生吧~ 对~~~它就是开发脚本过程中的催化剂 有了它我们就可以不用去死记硬背 有了它我们就不会出现某个代码少一个字母 有了它我们的编码速度明显的提高 因此不但是开发中,Complete Word对测试脚本设计也同样重要~ 下面我就来说一下怎样在QTP中实现Complete Word 首先大...

aygecxzg86489的博客 154

转载QTP识别和操作对象的原理

一、识别对象的原理QTP里的对象有两个概念,一个是Test Object(简称TO),一个是Runtime Object(简称RO)。  这两个概念从字面上不大好理解,也容易混淆。  但从实际作用上来看,应该说TO就是是仓库文件里定义的仓库对象,RO是被测试软件的实际对象。  QTP识别对象,一般是要求先在对象仓库文件里定义仓库对象,里面存有实际对象的特征属性的值。  然后在运行的时候,QTP会根据脚本里的对象名字,在对象仓库里找到对应的仓库对象,接着根据仓库对象的特征属性描述,在被测试软件里搜索找到相匹配

sanwong823的专栏 356

转载QTP优点

 QTP,全称为Quick Test Professional1、QTP使用的则是微软的VBScript语言,比较通用,而且也相对简单易学。从语言上的比较上来看,我个人觉得在编程能力上,WinRunner更胜一筹,因为它拥有相当丰富的C语言函数库,而相对而言,QTP则更大众化,它面向的是没有太多技术背景和编程经验的测试人员。2、      QTP8.0具有的一大特性:关键字驱动测试(keyword

2333

QTP9.2安装问题汇总(转载

关于License error的问题已经解决了。1.如果遇到 License error的问题,首先需要卸载QTP9.2。2.然后删除C:"Program Files"下的Mercury Interactive文件夹。3.再删除C:"Program Files"Common Files"下的Mercury Interactive文件夹。4.在注册表中搜索Mercury Intera

巅峰测试 2650

QTP

QTP支持功能测试和回归测试的自动化。 支持录制功能,可以对脚本设置检查点,也可以进行参数化。可以在一个ACTION中调用另外一个ACTION action可以调用外部脚本。可以复制已有的ACTION.可以通过分割方式产生新的action.每个ACTION都有自己的数据表。 迭代的方式有只执行第一行数据,执行每一行叔叔,执行第几行到第几行的数据。 action参数化 可以使脚本执行多次。...

weixin_30363509的博客 1075

QTP Test中利用vbs和cmd实现重新启动QTP

关于qtp如何自启动,这个问题之前在iQuickTest上面问过zzxxbb123,不过他给的答案比较概括一点。所以自己就想办法弄的具体了点。以下是之前写的文章,也是最早在51autotest上面放的。链接 http://www.51autotest.com/home.php?mod=space&uid=2535&do=blog&id=145 连续长时间执行过...

baijie5865的博客 289

qtp启动java程序_[转载]QTP六脉神剑之调用Java程序

不少网友对于QTP调用Java程序感到束手无策,实际上要调用Java程序是非常容易的。接下来songfun老师传授给大家武林绝技之六脉神剑。在演示这个例子前,请大家先造一个java程序(我以java计算器为例,源码见下),以方便观察调用结果。第一式:少商剑。特点:剑路雄劲,石破天惊。打开QTP,在QTP的Expert View中输入:InvokeApplication"cmd /k cd c:\ ...

weixin_39768388的博客 134

[转载]基于QTP+QC自动化测试框架

原文地址:基于QTP+QC自动化测试框架作者:默默吴文 1.    介绍 QTP是HP公司的自动化测试工具,目前主流版本为HP QuickTest Professional 10.0。HP QuickTest Professional 提供符合所有主要应用软件环境的功能测试和回归测试的自动化。采用关键字驱动的理念以简化测试用例的创建和维护。它让用户可以直接录制屏幕上的操作...

weixin_43734229的博客 462

qtp访问html,QTP-HTML DOM测试应用(转载)

HTML 文档中的每个元素、属性、文本等都代表着树中的一个节点DOM对象识别IE可以使用【IEDevToolBar】或【IEWebDeveloperV2】使用DOM的作用1.修改控件自身接口调用了DOM对象接口来修改控件的自身接口属性2.DOM对象下CurrentStyle对象应用CurrentStyle.是一个可以与HTML对象元素的style. sheets进行交互的接口,它可以获取对象元素的...

weixin_35033679的博客 273

转载】在QTP中使用描述性编程

<br />在QTP中使用描述性编程是一个提高QTP脚本利用率的很好的方式。<br />  通常QTP是通过对象库来识别不同的对象,而描述性编程是QTP另外一种能够识别对象的途径,它不依赖于对象库,通过增加一些对象的描述来识别对象的。<br />  说明:本例子是以Flight飞机订票系统的登陆界面为测试页面进行描述的。<br />  步骤一:录制脚本<br />  Dialog("Login").WinEdit("Agent Name:").Set "Holly"<br />  Dialog("Login

sanwong823的专栏 473

QTP使用中的一些好的方法

转载!(QTP使用中的一些好的方法) SystemUtil Object Descrīption An object used to control applications and processes during a run session. 在脚本运行过程中,可使用该对象控制应用程序或进程. Operations The tables below list the

V总加油站 924

QTP专题】安装时报DLL无法注册(转载

安装QTP过程中报很多DLL注册失败,全部忽略后安装完成,结果打开QTP录制的脚本无法保存,(点击保存按钮没反应) 1、问题分析:   问题a 使用精减版的操作系统   问题b 需要IE 6.0 及以上版本支持, 请检查你的IE浏览器是否为 6.0 以上版本   问题c 请检查Windows系统目录中是否存在以下三个文件: msvcp60.dll, mfc42.dll, ...

aygecxzg86489的博客 617
上一篇: QTP中的DataTable参数化操作
adelalin
博客等级 码龄17年 4粉丝 0原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值