qtp vb脚本小技巧,一

1 生产随机数列

第一种方法-----------------------------------

randomize'更新反回的数据

funcation rand(k,n)

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("kai",dtlocalsheet)="nanjing"

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

是datatable.value("num",dtlocalsheet)

-----取得某一具体行的值:

datatable.setcurrentrow(n);

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

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

-----在run-time期间,添加一个action和参数

kk=datatable.addsheet("name").addparameter("kai","ddd").name'/value

6 with dialog("name")'可以省好多代码,看着也简洁

content=.wintreeview

end with

7 wintreeview.select(item)(根是0,列表第一个也是0)

wintreeview.getcontent

wintreeview.getitem(整行)+";"+

winlistview.getitem(行中的第一个字符段)

wincheckbox("").set"off"'/on

8 数据库检查点:

sub getdata

set con=createobject("adodb.connection")

con.open("descrīption=mod;driver=sqlserver;server=hp\sqlserver;u&_

"pwd=11111;APP=qtp;WS '用sqlserver方式

Con.open "DRIVER = {Microsoft Access Driver (*.mdb)};DBQ=D:\Testdb.mdb" '用access方式

set record=createobject("adodb.recordset")

sql="select * from m3_program" '选择具体满足一条件的:sql="select* from m3_program where "

record.open sql,con

if(not record.eof) then

record.movenext

msgbox("p_name")

end if

record.close

set record=nothing

con.close

set con=nothing

end sub

'如果没有查到内容,在结果中不会报错,也不会弹出窗口

9 vbcr----chr(13)回车符

vblf----chr(10)换行符

vbcrlf----chr(13)+chr(10)结合

10 从step run has two ways(一是在key-driven页面,另一个是在代码页面,前者走完项目,后者只是本acton第一行

11 对于时间,日期等的格式检查(一种是正则表达式,另一种是输出对比,如果

 不好对比,用mid截取一部分对比)

12对于一些列表框或树结构,如果发生结点名称发生变化,此时如果报没有彼配的对象,此时可以把更改后面的名称如_2"

13;对于动态变化的对象,要分清是对像还是属性;对于属性可以用gettoproperty("ddd");得到;而对于由于动态无法识别对

像可以用描述性脚本:

 如:Set ōbject= Descrīption.Create()

Object("regexpwndclass").Value="HtmlButton"

Object("regexpwndtitle").Value="登陆"

browser("ss").page("a").button(Object).click

14:对于属性是变化的,有时可以把该属性从识别对象里删除

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

get_file_infor("c:\she.mpg")

function get_file_infor(url)

dim fso,f

set fso=createobject("scrīpting.filesystemobject")

set f=fso.getfile(url)

msgbox(f.datecreated)

f.name:f.size:f.type

fso.deletefile(url)'/////删除文件

end function

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

get_folder_infor("c:\kai")

function get_folder_infor(folder)

dim fso,f,f1,n

set fso=createobject("scrīpting,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

16,四舍五入可以在后面+0.5,进行自动解决

17,y=-------waitproperty("visible",true,10000)

18,on error resume next

on error goto o

19 window("").wintreeview("systreeview32").TYpe micctrldown+"p"+micctrlup

20,定义数组 name=array(1,2,"aa","bb");name(0)=1

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

现在碰到一个情况:我QTP的参数化是通过读取DataTable(就是那个execel表)里面的数据来实现的,每一次跑一遍脚本,就要修改数据表里面很多列的数据(我测试的那个程序不能输入重复的数据),我想能不能通过程序,来控制那个数据表里面的每一列的数据,再开始跑脚本之前实现动态对数据的增加修改,比如说:我第一次跑脚本用的是原来已经在数据表里面设定好的数据,第二次跑的之前,先把数据表里面的每一列数据+b 列如:原来某一列第一行的值为aa,我第二次跑脚本之前让它变成aab,可以采用下面的方法:

建议把第二次跑的数据保存在datatable中的另外一列

var1=datatable("col1",Globalsheet)

datatable("col2",globalsheet)=var1&"b"

var2=datatable("col2",globalsheet)

msgbox var2

datatable.Export ("d:/test.xls")

也可以把值保存到环境变量中。

---------

1.GetCellData函数

作用:获取单元格的值

例: rowCount = Browser("xxx ").Page("xxx ").Frame("xxx").WebTable("xxx").RowCount

For counter = 1 To rowCount

text = Browser("xxx").Page("xxx").Frame("xxx").WebTable("xxx").GetCellData(counter,1)

If (text = "xxx") Then

counter = counter - 1

selectNO = "#" & counter

Browser("xxx").Page("xxx").Frame("xxx").WebRadioGroup("xxx").Select selectNO

Exit For

End If

Next

2.把值插入datatable里

例: datatable.setcurrentrow(i)

datatable.value("name","Global")="name"

datatable.value("passwd","Global")="passwd"

3.用代码来启动浏览器

Browser1 = "IE"

StartURL = "www.51testing.com"

IF Browser1 = "IE" THEN

set IE = CreateObject("InternetExplorer.Application")

IE.Visible = true

IE.Navigate StartURL

END IF

4.ExecuteFile函数

作用:ExecuteFile 可以直接执行vbs文件,而不需要将其导入resource中

ExecuteFile FileName

说明:where FileName is the absolute or relative path of your VBscrīpt file.

例:ExecuteFile("F:\test.vbs")

5.Strcomp函数

作用:比较文本

例:dim strtext1,strtext2,str ,str1,comp1

strtext1 = "xxx"

strtext2 = "xxx"

str = VbWindow("xxx").VbWindow("xxx").VbLabe1("xxx").GetTOProperty("text")

str1= VbWindow("xxx").VbWindow("xxx").VbLabel("xxx").GetTOProperty("text")

comp1=strcomp(strtext1,str,0)

If comp=0 Then

msgbox “这两个串相等”

else

msgbox str

End If

6.CaptureBitmap

作用:捕获屏幕

7. GetROProperty

作用:取对象属性值

例:VbWindow("xxx").VbWindow("xxx").VbWindow("xxx").ActiveX("xxx").GetROProperty("TextMatrix(1,0)") 

8.ExitAction - 退出当前操作,无论其循环属性如何。

ExitActionIteration - 退出操作的当前循环。

ExitRun - 退出测试,无论其循环属性如何。

ExitGlobalIteration - 退出当前全局循环。

9.如何使用Excel对象处理数据?

Dim xl

打开excel文件

Function OpenExcelFile(strFilePath)

Set xl = CreateObject("Excel.Application")

xl.Workbooks.Open strFilePath

End Function

获得指定单元格数据

Function GetCellData(strSheet,rwIndex,colIndex)

GetCellData = xl.WorkSheets(strSheet).Cells(rwIndex,colIndex)

End Function

填充单元格数据

Function PutCellData(strSheet,rwIndex,colIndex,varData)

xl.WorkSheets(strSheet).Cells(rwIndex,colIndex) = varData

End Function

保存并推出

Function SaveAndQuit()

xl.Activeworkbook.save

xl.Quit

Set xl = nothing

End Function

10.连接sql数据库

例:Dim res,cmd,sql

Set Res=createobject("adodb.recordset")

Set Cmd=createobject("adodb.command")

Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User   '这句话是连接数据库的数据源,要做修改

Cmd.CommandType = 1

sql="selec t * from 表 where name=username"

Cmd.CommandText = sql

Set res = Cmd.Execute()

Set res = nothing

Set cmd.ActiveConnection = nothing

Set Cmd= nothing