QTP总结

一位高人的QTP学习笔记

转贴一个高人的QTP笔记供大家学习。

文章比较长,一共三部分:

1、连接数据库查询例子,无参数化

//查询收文操作,通过数据库查询记录数是否正确

//1、输出记录数值,例如782、获取输出的记录数值3、连接数据库,查询记录数

4、输出记录数值和从数据库中查询记录数值,相比较,相等则成功,不等则失败

Browser("湛江信息化测试登录").Page("湛江东兴石油企业有限公司办公自动化系统

").Frame("mainFrame").OutputCheckPoint("78")

Dimmm

'mm=DataTable.GlobalSheet.GetParameter("mainFrameOutput_Text_out").Value

//注释,获取datatable值与DataTable("mainFrameOutput_Text_out",dtGlobalSheet)一致

mm=DataTable("mainFrameOutput_Text_out",dtGlobalSheet)

MsgBoxmm

Dimres,cmd,sql

Setres=createobject("adodb.recordset")

Setcmd=createobject("adodb.command")

Cmd.activec

Cmd.CommandType= 1

sql="selectcount(*) from oa_receivebumf where BUMFNAME like '%收文测试%'"

'sql="selectcount(*) from oa_receivebumf where BUMFNAME='"&nn&"'"

//注释,sql语句,等于时sql语句

//sql="select count(*) from oa_receivebumf where BUMFNAME like '%nn%'"//likesql语句 Cmd.CommandText = sql

Setres = Cmd.Execute()

//msgboxres("name")

MsgBoxres(0)

IfCstr(res(0)) = Cstr(mm)Then

Reporter.ReportEventmicPass, "test", "查询成功"

else

Reporter.ReportEventmicfail, "test", "查询失败"

EndIf

Setres = nothing

Setcmd.ActiveConnection = nothing

SetCmd= nothing

2、登记用户,查看是否登记成功

//登记用户,查询用户是否存在在数据库中

1参数化2、取参数化值3、查询语句中,赋值给查询条件

4、从数据库中查询出用户名,与参数化中值做比较

脚本如下:

Browser("测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").SetDataTable("p_Text", dtGlobalSheet)

Dimxname

xname=DataTable("p_Text", dtGlobalSheet)

MsgBoxxname

Dimres,cmd,sql

Setres=createobject("adodb.recordset")

Setcmd=createobject("adodb.command")

Cmd.activec

Cmd.CommandType= 1

sql="selectname from address_list t where name ='"&xname&"'"

Cmd.CommandText= sql

Setres = Cmd.Execute()

'msgboxres("name")

MsgBoxres(0)

Setres = nothing

Setcmd.ActiveConnection = nothing

SetCmd= nothing

第二部分

1Datatable方法GetRowCount

DataTable.GetSheet("Action1").GetRowCount//获取总行数

使用如:

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

2Datatable方法SetNextRow

DataTable.GetSheet("Action1").SetNextRow//取得下一行

datatable.setcurrentrow(n)//取得某一行

3Datatable方法getcurrentrow//获得当前行数

例如:datatable.getcurrentrow

4、获取datatable

4.1DataTable("p_Text", dtLocalSheet) //取得datatable中参数名称为:p_Text的值

4.2DataTable.GlobalSheet.GetParameter("p_Text").Value //获取参数值方法和DataTable("p_Text",dtLocalSheet)一样

例如:xname为变量,dimxname

xname=DataTable("p_Text",dtLocalSheet)

xname=DataTable.GlobalSheet.GetParameter("p_Text").Value

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

datatable.value("num",dtlocalsheet)

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

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

6、字符转换Cstr

dimmm

Cstr(mm)

7、获取对象属性名称用法:

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

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

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

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

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

8、如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证if browser("web_name").dialog("dialog_name").exist(1) then'如果不出现=false

error_message=browser("web_name").dialog("diaglog_name").static("用户密码错

!".getRoproperty("text")

iferror_message<>(datatable.value("error_info"))then

msgbox(error_message)

endif

browser("web_name").dialog("diaglog_name").close

endif

这里总结了两点技巧:

一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是该用户不存在,不用更改会自动识别,我想主要是录制第一遍时,用户密码错误只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性

二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理

9、数据库检查点模块:

subdatabase_check

setcon=createobject("adodb.connection")

con.open"Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_

"PWD=123456;APP=QuickTest 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;"

setrecord=createobject("adodb.recordset")

sql="select*fromibm_one_table"

record.opensql,con

DO

if(record("ibm_table_column")="kai")then'//查找表格中有多少kai

num=num+1;

endif

record.movenext

loopuntil record.eof=true

record.close

setrecord=nothing

con.close

setcon=nothing

endsub

10"is+*"类型function

isarray'是否是数组

isconnected'判断QTP是否连接到TD

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

isempty'判断是否初始化

isNull'判断是否为空值

isNumeric'判断是否是数字型

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

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

isRootFolder'是否是根目录

11for方法1,参数化时选择:dtLocalSheet

DimCountNum

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

Fori=0 to CountNum-1

----xunhuanti------

DataTable.GetSheet("Action1").SetNextRow//使用SetNextRow方法Next

12for方法2,参数化时选择:dtLocalSheet

dimcountNum

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

Fori=1 to countNum

DataTable.GetSheet("Action1").SetCurrentRow(i)//使用SetCurrentRow(i)方法―――ddd―――

next

13while方法1,参数化时选择:dtLocalSheet

DimCountNum,i

i=1

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

Whilei<=CountNum

------xuhuanti---

DataTable.GetSheet("Action1").SetNextRow

i= i+1

Wend

14while方法2,参数化时选择:dtLocalSheet

DimCountNum,i

i=1

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

Whilei<=CountNum

DataTable.GetSheet("Action1").SetCurrentRow(i)

----xuhuanti---

i= i+1

Wend

第三部分

15Dowhile方法

Dimi,RowCount '定义两个变量

i=0

RowCount=DataTable.GetSheet("Action1").GetRowCount'设置RowCount等于Action1中的行数。msgbox RowCount

Dowhile i<rowcount

i=i+1'第一次进入循环,执行这句后,i=1

'DataTable.GetSheet("Action1").SetCurrentRow(i)这句话被我注释掉了,正确的写法应该是下面这样,分开写。

datatable.getsheet("Action1")

datatable.setcurrentrow(i)

----xunhuanti----

loop

16、取对象属性(Property)值

Dimusname

usname=Browser("测试登录").Page("办公自动化系统

").Frame("mainFrame_2").WebEdit("addressVO.name").GetRoProperty("Value")'获取对象属性(Property)值,如PropertyValue

MsgBoxusname

17、取得要删除的id,并删除

'url在查看该新增记

id=Browser("测试登录").Page("办公自动化系统").Frame("mainFrame_4").GetROProperty("url")'url这个属性值中存在我需要删除记录的ID信息

strId=Mid(id,instr(60,id,"=")+1) '这一步是把需要的id值取了出来,例如:strId=Mid

(id,instr(1,id,"=")+1)

strUserid=strId 'strUserid是我要删除的记录前的复选框属性值当中的ID信息

Browser("测试登录").Page("办公自动化系统

").Frame("mainFrame").WebCheckBox("value:="&strUserid).Set"ON" 这样就把想删除的记录选中了。 Browser("测试登录").Page("办公自动化系统").Frame("mainFrame").WebButton("").Click'这样就删除掉啦,呵呵

17.2通过数据库取得id值,并赋值进行删除

Browser("测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").SetDataTable("p_Text", dtGlobalSheet)

Browser("测试登录").Page("办公自动化系统

").Frame("mainFrame_2").WebEdit("addressVO.address").SetDataTable("p_Text1", dtGlobalSheet)

Browser("测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.unitTel").SetDataTable("p_Text2", dtGlobalSheet)

Dimxname,address,unitTel

xname=DataTable("p_Text",dtGlobalSheet) 'datatable中取值

address=DataTable("p_Text1",dtGlobalSheet)

unitTel=DataTable("p_Text2",dtGlobalSheet)

Dimres,cmd,sql

Setres=createobject("adodb.recordset")

Setcmd=createobject("adodb.command")

Cmd.activeconnection="DRIVER={Oraclein

OraHome92};SERVER=HKORACLE;UID=USER22;PWD=ZJLH;DBQ=HKORACLE;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=Me;CSR=F;FWC=F;FBS=60000;TLO=O;"

Cmd.CommandType= 1

'sql="selectaddressid from address_list t where name ='"&xname&"'"

'sql="selectaddressid from address_list t where name ='"&xname&"'

sql="selectaddressid from address_list t where name ='"&xname&"' andaddress='"&address&"' andunitTel='"&unitTel&"'"

Cmd.CommandText= sql

Setres = Cmd.Execute()

MsgBoxres(0) '打印res(0)

DataTable("addressid",dtGlobalSheet)=Cstr(res(0)) '输出值到datatable

Browser("测试登录").Page("办公自动化系统

 

").Frame("mainFrame").WebCheckBox("value:="&res(0)).Set"ON"

Setres = nothing

Setcmd.ActiveConnection = nothing

SetCmd= nothing

18、赋值语句有:

1Browser("测试登录").Page("办公自动化系统

").Frame("mainFrame").WebCheckBox("value:="&strUserid).Set"ON"

2Browser("湛江信息化测试登录").Page("湛江东兴石油企业有限公司办公自动化系统

").Frame("mainFrame").WebCheckBox("value:="&res(0)).Set"ON"

3Browser("测试登录").Page("办公自动化系统

").Frame("mainFrame").WebCheckBox("IDS").SetTOProperty"value",Cstr(res(0)) 'Cstr为转换成小数方法4: Browser("测试登录").Page("办公自动化系统

").Frame("mainFrame").WebCheckBox("IDS").SetTOProperty"value",strUserid

19、取字符串方法:

1instr方法

InStr([start,]string1, string2[, compare])

这个函数需要的的参数是起始位置、主体字符串、要查找的字符串;Compare是可选参数。指定字符串比较。此compare参数是可以省略的,也可以是0, 1 2

指定0(缺省)做二进制比较。指定1做不区分大小写的文本比较。例如我们要查找在字符串“abcdefg”中是否存在“cd”并返回其位置,则使用下面的语句就可以实现:

pos=InStr(1,"abcdefg","cd")pos会返回3表示查找到并且位置为第三个字符开始。这就是查找的实现,而查找下一个功能的实现就是把当前位置作为起始位置继续查找。

或者:id=87444=ddddd

instr(1,id,"="),从位置为第一个字符起,查找=字符

2mid方法

Mid(string,start[, length])

如:MyVar=Mid("VB Script is fun!", 4, 6) 'MyVar contains "Script".从第4位字符开始,后面6位字符例如:MyVar2=Mid("VBScript is fun",4) 'MyVar contains "Script is fun!"

'从第4位字符开始,后面的字符

3:Right方法

Right(string,length)

例子:

DimAnyString, MyStr

AnyString= "Hello World" ' Define string.

MyStr= Right(AnyString, 1) ' Returns "d".

MyStr= Right(AnyString, 6) ' Returns " World".

MyStr= Right(AnyString, 20) ' Returns "Hello World".

20datatable方法

1AddSheet方法

DataTable.AddSheet(SheetName)

如:Variable=DataTable.AddSheet("MySheet").AddParameter("Time", "8:00") global中,添加sheet,并在sheet添加列和列值

2DeleteSheet方法

DataTable.DeleteSheetSheetID

例如:DataTable.DeleteSheet"MySheet"

3Export方法

DataTable.Export(FileName)

例如:DataTable.Export("C:\flights.xls")

4ExportSheet方法

DataTable.ExportSheet(FileName,DTSheet) 'DTSheet sheetindex 例如:DataTable.ExportSheet"C:\name.xls" ,1

5GetCurrentRow

DataTable.GetCurrentRow

例子:row= DataTable.GetCurrentRow

Reporter.ReportEvent1, "Row Number", row

6GetRowCount

DataTable.GetRowCount

例子:

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

Reporter.ReportEvent2, "There are " &rowcount, "rows in the data sheet."

7GlobalSheet Property方法

DataTable.GlobalSheet

例如:DataTable.GlobalSheet.AddParameter"Time", "5:45"

8Import方法

DataTable.Import(FileName)

例子:DataTable.Import("C:\flights.xls")

9ImportSheet方法

DataTable.ImportSheet(FileName,SheetSource, SheetDest)

例子:

DataTable.ImportSheet"C:\name.xls" ,1 ,"name"

'name.xls导入sheetindex1sheet名称为:name

 

10:LocalSheet Property 方法

DataTable.LocalSheet

例子:DataTable.LocalSheet.AddParameter("Time","5:45")

11:SetCurrentRow方法

DataTable.SetCurrentRow(RowNumber)

例子:DataTable.SetCurrentRow (2)

例子2:DataTable.SetCurrentRow (i)

12:SetNextRow方法

DataTable.SetNextRow

例子:

DataTable.SetNextRow

13:Value Property方法

1:DataTable.Value(ParameterID [, SheetID]) 或者 DataTable(ParameterID [, SheetID]) 2:DataTable.Value(ParameterID [,SheetID])=NewValue

或者 DataTable(ParameterID [, SheetID]) =NewValue

例子1:DataTable.Value ("Destination","ActionA")="New York"

例子2:DataTable("addressid", dtGlobalSheet)=Cstr(res(0))

'Cstr(res(0))为一变量,addressid为sheet一列名称

14:取datatable中某一行值

datatable.getsheet(“global”).getparameter("列名").valuebyrow(i)

如果想取第一行,就将i变为1

21、ReportEvent Method 方法

Reporter.ReportEvent EventStatus,ReportStepName, Details [, in]

'EventStatus状态:pass:0,失败:1,done:2,警告:3,

状态:0 or micPass,1 or micFail,2 or micDone,3 or micWarning:

ReportStepName为Name of the intended step in the report(object name)

例子1:

Reporter.ReportEvent micFail,"Custom Step", "The user-defined step failed."

例子2:

row = DataTable.GetCurrentRow

Reporter.ReportEvent 1, "RowNumber", row

row为一变量

 

22、reusable action参数的传递方法1

注:action1和action2都是reusableaction,在action3中调用action1和action2

1:action1中参数化,datatable参数名称为:p_Text,Global类型的

2:action2中,编写代码如下:

Dim name1

name1=DataTable.value("p_Text","Global")

Browser("测试登录").Page("办公自动化系统_2").Frame("mainFrame").Link("收文名称001").SetTOProperty"text",name1

//text为对象的属性

3:在action3中,直接调用action1和action2就可以。多个reusable也类似这么做。

23、action 参数传递方法2(没有验证过)

不知道你是不是想把Action2的一些值传递给Action3。

Action Param 既可以作输入也可以作输出,所以他们之间的参数传递是很简单的。 在Action1里面只要实现如下代码就可以了:

RunAction "Action2",oneIteration, InputParamToAction2, OutputParamFromAction2 RunAction"Action3", oneIteration, OutputParamFromAction2

上面的变量OutputParamFromAction2就同时作为Action2的输出和Action3的输入。

23、action 参数传递方法3(没有验证过)

Action级别的参数调用:

1: 设置参数

Action Properters >> ActionParameter

增加input的参数和output的参数

2: Action 1 的脚本:

parameter("output")="Action1Output"

msgbox("Action1Input:"&parameter("input"))

msgbox("Action1Output:"&parameter("output"))

3:Action 2 的脚本:

RunAction "Action1",oneIteration,"Action2 Input",action2

 

msgbox("Output inAction2:"&action2)

我们不难发现在QTP的Action之间关系

作为被调用Action1,都是使用parameter("参数名")来使用的。

作为调用Action1的Action2而言,input参数是可以往被调用Action1的操作输入的参数。Output的参数是从被调用的Action1返回的值。

24、关于datatable和Sheet例子

datatable.AddSheet("husheet")'datatable添加一个sheet

datatable.ImportSheet"c:\test.xls","testsheet","husheet" '从外部导入一EXCEl为test.xls

Dim i,RowCount '定义两个变量

i=0

RowCount=datatable.GetSheet("husheet").GetRowCount'设置RowCount等于51sheet中的行数。 msgboxRowCount

Do while i<rowcount

i=i+1 '第一次进入循环,执行这句后,i=1

'datatable.getsheet("51sheet").setcurrentrow(i)这句话被我注释掉了,正确的写法应该是下面这样,分开写。

datatable.getsheet("husheet")

datatable.setcurrentrow(i)

'执行过上面两句后,CurrentRow是第一行。

tempData=DataTable.GetSheet("husheet").GetParameter("Name").Value

'现在,我们调用msgbox看看下面得到的是什么值?每次循环都能得到每行的值,下次循环得到的是第二行

msgbox"GetParameter-Name:"&tempData '这里弹出我们要看的值。

'下面我们用另外一种方法来得到。

msgbox"GetParameter-i:"&DataTable.GetSheet("husheet").GetParameter(1).Value'这里我用

GetParameter(1)去得到sheet中第一列的值。

loop

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值