您的位置:首页 > 编程语言 > Qt开发

qtp常用方法

2015-12-24 15:16 274 查看
1.在测试中我们使用QTP调试脚本的时候一般就是DEBUG或者MSGBOX察看一些信息,其实有时候也可以使用print来实现批量的察看信息但是不影响程序运行.

运行脚本:

a="100"

print a

复制代码

~~~~~~~~~~~~~~~~~~~~~~~~~

2.取datatable特定行的数据可以这样使用

运行脚本:

DataTable.GetSheet("Action1").GetParameter("test").ValueByRow(4)

复制代码

~~~~~~~~~~~~~~~~~~

3.Wait Seconds [, Milliseconds]可以精确到毫秒.

~~~~~~~~~~~~~~~~~~

4.在自定义的function里面数组作为返回值.

运行脚本:

circuit = "399937"

Function trimString(circuit)

Dim holdArray(5)

holdArray(0) = Left(circuit, 2)

holdArray(1) = Right(circuit, 2)

msgbox holdArray(0) 'showed 39

trimString = holdArray' I get an out of range error here

End Function

dim myArray

'here I want to assign the return array to another array

myArray = trimString(circuit)

' and then call one element from it

msgbox myArray(1)

复制代码

~~~~~~~~~~~~~~~

5.计算一个操作的时间.

运行脚本:

Browser("Browser").Page("Page").Image("getRates").Click

var_StartTime = Timer

Browser("Browser").Page("Page").Sync

Browser("Browser").Page("Page").Check CheckPoint("Check1")

var_EndTime = Timer

intRespTime = round ((var_EndTime - var_StartTime), 2 )

msgbox (intRespTime)

复制代码

~~~~~~~~~~~~~~~

6.取得指定sheet(datatable)的行数和列数(也可以理解为参数个数)

paramcount = DataTable.GetSheet("Action1").GetParameterCount

msgbox "There are " ¶mcount&"columns in the data sheet."

rowcount = DataTable.GetSheet("Action1").GetRowCount

msgbox "There are " &rowcount&"rows in the data sheet."

复制代码

~~~~~~~~~~

7.一种设置全局变量的方法GlobalDictionary

'Part 1.

'***********************************************************************************************************

Dim WshShell

Set WshShell =CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU\Software\Mercury Interactive\QuickTest Professional\MicTest\ReservedObjects\GlobalDictionary\ProgID", "Scripting.Dictionary","REG_SZ"

Set WshShell = Nothing

复制代码

'*********************************************************************************************************************

'Part 2.

'*****************************************************************************************

GlobalDictionary.Add "ParamName", "ParamValue"

Msgbox GlobalDictionary.Item("ParamName")

GlobalDictionary.Item("ParamName")="***********"

Msgbox GlobalDictionary.Item("ParamName")

Msgbox GlobalDictionary.Exists("ParamName")

GlobalDictionary.Remove("ParamName")

Msgbox GlobalDictionary.Exists("ParamName")

复制代码

'*********************************************************************************************

~~~~~~~~~~~

8.关掉多余的IE窗口

SystemUtil.CloseProcessByWndTitle "51testing", True

复制代码

~~~~~~~~~~~~~~~~~~

9.Execute 的用法,这个用法在一些特殊时候很有用的.

x="4"

Execute "Dim A_" & x

Execute "A_" & x &"=99"

Msgbox Eval("A_" & x)

~~~~~~~~~~~~~~~~~~~

复制代码

10.GetLastError的介绍,看字面就是取运行最后一个错误

x = GetLastError

msgbox(DescribeResult(x))

复制代码

这样可以在程序里面判断程序运行时候是否出错了.

~~~~~~~~~~~~~~~~~

11.把weblist抓图下来

Setting.WebPackage("ReplayType") = 2 'Default is 1

Browser(".").Page(".").WebList(".").Click

Desktop.CaptureBitmap "C:\Test.bmp",True

Setting.WebPackage("ReplayType") = 1

复制代码

~~~~~~~~~~~~~~~~~~~~~~~~~~

12.Reporter.ReportEvent的新用法

transNumber = 12345

Reporter.ReportEvent micPass, "TransactionNumber", "<DIV style='font-size: 7pt; color: white'>&</DIV>"&"<B> <FONT COLOR=#000000>"&transNumber&"</FONT></B>"

Reporter.ReportEvent micPass, "TransactionNumber", "<DIV style='font-size: 7pt; color: white'>&</DIV>"&"<B> <FONT COLOR=red>"&transNumber&"</FONT></B>"

复制代码

~~~~~~~~~~~~~~~~~~~~~~~~~~

13.For循环中step的用法

For K = 1 To 10 step 2

msgbox k

Next

复制代码

~~~~~~~~~~~~~~~~~~~~~~~

14.Option Explicit,大家都知道VB Script里面是可以不申明变量直接使用,但是有时候我们为了脚本的规范,尽量申明使用的变量,这样你就用一下Option
Explicit吧.

Option Explicit ' Force explicit variable declaration.

Dim MyVar ' Declare variable.

MyInt = 10 ' Undeclared variable generates error.

MyVar = 10 ' Declared variable does not generate error.

复制代码

~~~~~~~~~~~~~~~~~~~~~~~

14.从TXT文件里面读取特定行的数据.

Dim fso, myfile,msg

Set fso=CreateObject("scripting.FileSystemObject")

Set myfile = fso.openTextFile("C:\login.txt",1,false)

'这里设置一个循环看需要读取第几行

for i=1 to 10

myfile.SkipLine

next

msg=myfile.ReadLine

myfile.close

复制代码

1 生产随机数列

第一种方法

Randomize '更新返回的数据(Initialize random-number generator)

Function rand(k)

n = Int((k-1)* Rnd +1)

rand = n

End Function

复制代码

第二种方法

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)

复制代码

5.1 向某一列的单元格赋值:

datatable.value("column_name",dtlocalsheet)="nanjing"

复制代码

5.2 取得某一行具体值:

datatable.setcurrentrow(n)

msgbox(datatable.getsheet("global").getparameter("column_name").Rawvalue)

或者kk=datatable.Rawvalue("column_name","action1")

复制代码

5.3 在run-time时,动态添加表格与数据

kk=datatable.addsheet("sheet_name").addparameter("column_name","value").name;

复制代码

6 wintreeview一些操作

选择一个条目:wintreeview.select(item)'根是0

根的名称:wintreeview.getitem(0)

复制代码

7 数据库检查点模块:

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

复制代码

8 换行符

vbcr----chr(13)回车符// vblf----chr(10)换行符

vbcrlf----chr(13)+chr(10)结合//type(chr(13)就相当于按了一上键盘上的enter

复制代码

9 Run from step有两种方式:

在Keyword View模式会从本步骤运行到所有action结束

在expert view模式仅会将本action运行结束

复制代码

10 由于对象属性原因,无法识别对象

-----对于对象属性是变化的,可以参数化/或者用正则表达式

-----报匹配多个对象错误,可以spy查看对象,添加一个该对象另一个唯一标识属性

-----有时可以删除对象的变化的属性来解决识别问题

------对于多个完全相同的对象,可以采用添加index,location,createtime等特殊属性来识别

  (index:按照程序源码,绘制对象的先后标识对象,所以与其它相同对象是相互依赖,当其它对象发生

  变化后,原先的所有对象index属性要发生变化,开始是0;如index:=0;

location:根据对象的位置进行确定,从上到下,从左到右;

  CreateTime:按照对象被浏览器打开的先后标识对象)

------另外换一种思维方式,采取等效的方法;比如用键盘代替鼠标或用操作系统本身特性去解决问题

复制代码

11 对系统文件的操作

11.1 从系统的文件中获取信息及删除文件

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

11.2 获取文件夹里所有文件信息

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

select case f1.name

case"kai.mpg","she.mpg","dd.mp3"'//检查文件夹里是否含有这些文件

end select

next

end function

复制代码

12 等待某个对象出现方法

y=......waitproperty("visible",true,10000)

复制代码

13 防程序中断方法

On error resume next

On error goto handle

复制代码

14 数组的应用:

name=array(1,2,"aa","bb")

name(2)="aa"

复制代码

15 正则表达式应用模板

进行日期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

复制代码

16 返回一个字符串在另一字符串中的位置

instr(string1,string2)

复制代码

17 有时回放出现找不到对象时,可能不是由于你的代码问题,而是由于你的操作系统等设置问题;

举例说明1:

比如:你录制一个选择磁盘中的文件动作

会录制为:

.winlistview(" ").drap 46,99

.winlistview(" ").draponitem "she.mp3"

下次录制的时候,如果你的系统文件改为不显示扩展名,下次执行的时候,QTP就找不到she.mp3,只能找到she;

举例说明2:

有时由于不同操作系统以及不同的ie,导致有些窗口不能识别,比如在2000下弹出的网页对话框的标题是:

“web对话框",而在2003上是”网页对话框"

复制代码

18 "is+*"类型function

isarray'是否是数组

isconnected'判断QTP是否连接到TD

isdate'是否是合法的日期类型

isempty'判断是否初始化

isNull'判断是否为空值

isNumeric'判断是否是数字型

isobject'判断是否一个功能对象

isready'判断设备是否准备就绪

isRootFolder'是否是根目录

复制代码

19 Action之间的参数传递

例如:在Action1中,有如下代码:

out_str="This is out_string"

RunAction "Action2",oneIteration,out_str

在Acton2中,在其step->Action Properties中的,input参数栏,加入out_str后,

msgbox(parameter("out_str")),就能正确显示参数了 

复制代码

20 WScript.Shell的一些应用

set WshShell =CreateObject("WScript.Shell")

WshShell.SendKeys "{ENTER}"     '模拟键盘进行操作

WshShell.AppActivate "Calculator" '启动应用程序

复制代码

21 获取对象属性名称用法:

GetRoProperty----从应用程序界面上获取对象属性(即,是脚本运行时,获取的对象动态属性值)

例如:获取对象库中index属性值,似乎只能用GetToProperty,因为应用程序界面上对象没有该属性,只是

      QTP为识别该对象创立的描述属性;

GetToproperty----从对象库中描述对象的属性,静态值

GetToProperties----获取用于标识对象的属性集;对于这个集合,有count等属性方法

复制代码

22 FireEvent的使用

可以对一个对象进行更复杂的操作

如:FireEvent("onfocus") '使一个控件获取焦点

FireEvent("ondblclick") '实现双击/也可以在事件设定中针对该对象事件响应  

复制代码

23 模板的应用

-----新建一个文本,输入一些新建Action时常包含的信息,然后保存为ActionTemplate.MST文件,

 并复制到QTP/dat目录下;这样每次新建action都会包含固定的信息了;

例如:

'-------------------脚本说明---------------

'产品版本: __Build( )

'测试员:

'编写日期:

'测试功能:

'脚本类型:

'被测试对象初始状态:

'进展程度:

'基本思路:

'主要功能函数:

'历史修改:

'没解决的问题:

'--------------------脚本内容-------------

复制代码

24 在对象库中,两个对象有时不能通过更改属性或命名来达到两个对象完全一致的替换;

在web-mod项目中,我在对象库里添加了一个自动含有index标识属性的对象,然后每次通过SetToproperty来改变

index值,对对象进行数据驱动,使其操作另一个对象,但脚本始终操作原先index属性值的对象;后来,把该对象

删除掉,重新添加一个不自动含有index标识属性的该类对象,然后,手工添加,index标识属性,后来脚本能正常 工作了,可见两次的对象属性完全一致,但形成方式不一样,导致的结果往往也不一样。

25 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

复制代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: