i=i+1
DataTable.SetCurrentRow(i)
Browser("北京市建设行业信息化系统").Page("北京市建设行业信息化系统").Frame("mainframe_4").WebButton("新增审批权限").Click
wait
(2)
Browser("北京市建设行业信息化系统").Page("北京市建设行业信息化系统").Frame("mainframe_7").WebList("xmszd").SelectDataTable("项目所在地",dtLocalSheet)
Browser("北京市建设行业信息化系统").Page("北京市建设行业信息化系统").Frame("mainframe_7").WebList("xmtzr").SelectDataTable("项目投资人",dtLocalSheet)
Browser("北京市建设行业信息化系统").Page("北京市建设行业信息化系统").Frame("mainframe_7").WebList("tdyt").SelectDataTable("土地用途",dtLocalSheet)
Browser("北京市建设行业信息化系统").Page("北京市建设行业信息化系统").Frame("mainframe_7").WebList("blbm").SelectDataTable("审批部门",dtLocalSheet)
Browser("北京市建设行业信息化系统").Page("北京市建设行业信息化系统").Frame("mainframe_7").WebButton("确定").Click
wait
(1)
loop
写excel:
Functioninsertexcel(row,col,value,path,sheet)
SetExcelApp=CreateObject("Excel.Application")
SetExcelWor=ExcelApp.Workbooks.Open(path)
SetExcelShe=ExcelWor.Worksheets(sheet).UsedRange
ExcelShe.Cells(row,col)=value
ExcelApp.DisplayAlerts=True
SetExcelShe=Nothing
ExcelWor.Close(True)
ExcelApp.Quit
EndFunction
13.打开\关闭ie,比如:
SystemUtil.Run("C:
\ProgramFiles\InternetExplorer\IEXPLORE.EXE"),””
SystemUtil.CloseProcessByName("iexplore.exe")
14.利用mst(mercuryscripttemplate)生成脚本模板
新建文件ActionTemplate.mst(必须是这个名字)
用记事本打开该文件
编辑内容,如:
'======================================
'模块名称
'软件名称
'作者:
'日期:
'======================================
将该文件剪切到QTP的dat目录下
启动QTP,新建脚本时就能够看到该模板被自动应用了
15.描述性编程参数:
Browser("北京市建设行业信息化系统").Page("北京市建设行业信息化系统").Frame("mainframe").Link("text:
="&projectName,"name:
="&projectName).Click
16.增加同步点
在录制状态下,选择Insert-->SynchronizationPoint,选择要同步的对象,设置要同步的属性,我们可以对对象的Enable,visible一类表示状态的属性做同步点,生成如下脚本
Browser("XX一下,你就知道").Page("XX一下,你就知道").WebEdit("wd").WaitProperty"visible",True,100000
这句话的意思就是在100秒的时间内,等待WebEdit这个对象的visible属性,只要它的visible属性变为true,那么就执行下面操作,最后的100000单位是毫秒,如果在100000毫秒(100秒)后还没有等到visible=true,直接执行下面操作
17.qtp连接数据库
DimStrCon
DimRes,Cmd
SetRes=CreateObject("ADODB.Recordset")
SetCmd=CreateObject("ADODB.Command")
'以下为建立连接
'StrCon="DRIVER={oracle.jdbc.driver.OracleDriver};Server=192.168.100.5;UID=dqjs4_test3;PWD=dqjs4_test3;dbq=dqjs;"
StrCon="DRIVER={OracleinOraClient10g_home1};SERVER=DQJS;UID=dqjs4_test3;PWD=dqjs4_test3;DBQ=DQJS;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.activeconnection=StrCon
Cmd.CommandType=1
'以下为执行sql,根据实际情况替换之
Cmd.CommandText="selectHT_CODEfromHT_JBXXwhereJY_TYPE_NAME='勘察'andHT_JBXX_ID='28BEB060163C11E1B060C555E3FFBE59'"
SetRes=Cmd.Execute()
'展示结果
DowhilenotRes.eof
Msgbox(Res(0))
Res.MoveNext
Loop
'以下为关闭数据库连接
SetRes=nothing
SetCmd.activeconnection=nothing
SetCmd=nothing
18.取随机数字
Randomize
Dimcran
cran=randomnumber(0,100)
msgboxcran
19.随机取下拉列表
dima
a=Browser("北京市建设行业信息化系统_2").Page("提交问题-MantisBT").WebList("reproducibility").GetROProperty("itemscount")
msgboxa
randomize
Dimb
b=randomnumber(0,a-1)
msgboxb
Browser("北京市建设行业信息化系统_2").Page("提交问题-MantisBT").WebList("reproducibility").Select"#"&b
20.GetROProperty、GetTOProperty、GetTOProperties、SetTOProperty
例:
Browser("登陆").Page("登录").Frame("mainFrame").WebEdit("dispatchDoc.dispatchDocTitle").SetTOProperty"name","dispatchDoc.dispatchDocTitle"
这种方法不会修改对象库中对象的属性值,但运行时也不会报错。
GetROProperty:
得到运行时对象的值
Browser("北京市建设行业信息化系统_2").Page("提交问题-MantisBT").WebList("reproducibility").GetROProperty("itemscount")
GetTOProperty:
得到对象库里面对象的值
Browser("北京市建设行业信息化系统_2").Page("提交问题-MantisBT").WebList("reproducibility").GetTOProperty("value")
GetTOProperties:
得到所有属性的keyandvalue
seta=Browser("北京市建设行业信息化系统_2").Page("提交问题-MantisBT").WebList("reproducibility").GetTOProperties
21.回放原理
一、先根据脚本中的对象类型在对象库中查找是否存在该类型的对象。
对象类型是指在对象类型库(ObjectIdentification)中存在的类型。
二、根据脚本中对象的名称在对象库中查找是否存在该名称的对象。
三、根据对象类型库中设定的对象识别机制定位对象:
1、先根据强制属性匹配实际对象的属性值:
(1)唯一匹配,找到对象,退出识别机制;
(2)多个匹配,采用辅助属性辅助识别;
(3)不匹配,报错;
2、根据辅助属性匹配实际对象的属性值:
(1)唯一匹配,找到对象,退出识别机制;
(2)多个匹配,采用顺序标识符辅助识别;
(3)不匹配,报错;
3、根据顺序标识符匹配实际对象的顺序值:
(1)唯一匹配,找到对象,退出识别机制;
(2)多个匹配,尝试采用智能识别;
(3)不匹配,报错;
其中顺序标识符中有两种识别机制:
index:
控件数组的索引值。
location:
对象在GUI界面上的位置,遵循“先从上到下,再从左到右”的原则。
22.insertcalltoexistingaction
脚本中用到了【insertcalltoexistingaction】,修改了其中被调用的action,但发现引用的一直是旧的代码,修改无效。
刚开始不知道怎么回事,后来发现QTP中查找引用的action时是根据【options->folders】中配置的路径再拼接相对路径找到的,而之前我一直以为QTP会自动去我的test所在目录中找相对路径的action。
如果填了多个地址,QTP是会由上到下按照地址一个一个的去找
23.数组
Dimjylx()
ReDimjylx(6)
Dimlength
jylx(0)="勘察"
jylx
(1)="设计"
jylx
(2)="审查"
jylx(3)="施工总承包"
jylx(4)="监理"
jylx(5)="质量检测"
jylx(6)="造价咨询"
length=UBound(jylx)'返回指定数组维数的最大可用下标
selectcase
SelectCasejylx(i)
casejylx(0)
dw=kcdw
Casejylx
(1)
dw=sjdw
Casejylx
(2)
dw=scdw
Casejylx(3)
dw=sgzcbdw
Casejylx(4)
dw=jldw
Casejylx(5)
dw=zljcdw
Casejylx(6)
dw=zjzxdw
endselect
24.txt文件读取
'读取文件
ConstForReading=1,ForWriting=2,ForAppending=8
Setfso=CreateObject("Scripting.FileSystemObject")
Setopenfile=fso.OpenTextFile("C:
/test.txt",ForReading,True)
DoUntilopenfile.AtEndOfStream
str=openfile.ReadLine
a=Split(str,"",-1,1)
Fori=0toUbound(a)
Msgboxa(i)
Next
Loop
openfile.Close
Setfso=Nothing
'写文件
ConstForReading=1,ForWriting=2,ForAppending=8
Setfso=CreateObject("Scripting.FileSystemObject")
setopenfile=fso.OpenTextFile("C:
/test.txt",ForWriting,true)
Fori=1to4
openfile.WriteLine("hello")
openfile.WriteBlankLines(0)
Next
openfile.Close
Setfso=nothing
'追加
ConstForReading=1,ForWriting=2,ForAppending=8
Setfso=CreateObject("Scripting.FileSystemObject")
setopenfile=fso.OpenTextFile("C:
/test.txt",ForAppending,true)
openfile.WriteLine("helloworld")
openfile.Close
Setfso=nothing
25.验证码(扯)
DimInput
Input=InputBox("Enteryourpicno:
")
Browser("调查博客").Page("调查博客").WebEdit("ident_code").SetInput
26.action参数传递
(1)在主action中:
RunAction"Driver_TestCase",oneIteration,table,testCaseSheetName,caseName
(2)被调用action中
testCaseFile=parameter("testCaseFile")
testCaseSheetName=parameter("testCaseSheetName")
caseName=parameter("caseName")
按照顺序传递
27.(脚本中直接调用vbs文件)脚本中加载vbs文件,有类的vbs需要这样使用
ExecuteFile"..\aa\bb.vbs"
该vbs文件的格式必须是ANSI的
28.自定义环境变量
SetoReport=NewExcelReport
Environment("oReport")=oReport
通过环境变量也能传递参数
29.QTP使用外部共享对象库有2种方法
1,通过菜单Resources->AssociateRepositories,关联外部对象库到指定的Action。
2,通过RepositoriesCollection对象,在运行时灵活的加载,自动关联到当前Action。
1.加载外部对象库
2.执行脚本
3.移除加载的对象库
'Uploadobjectrepository
RepositoriesCollection.Add"../test.tsr"
'steps...........
'....................
'Removeobjectrepository
OR_Index=RepositoriesCollection.Find("../test.tsr")
RepositoriesCollection.RemoveOR_Index
30.ie8定位不了页面
SystemUtil.Run("C:
\ProgramFiles\InternetExplorer\IEXPLORE.EXE"),""
31.退出整个for循环exitfor
Fori=0to4
msgboxi
If(i=3)Then
Exitfor
EndIf
Next
32.datatable使用
'qtp的datatable里面增加一个sheet,名称为:
test
datatable.AddSheet("test")
'导入当前目录下aaa.xls的sheet到test中
datatable.ImportSheetpathfinder.Locate("..\qtptest\aaa.xls"),"sheet1","test"
'获取这个test的总行数
Rowcount=DataTable.GetSheet("test").GetRowCount
Fori=1toRowcount
'设置当前行
datatable.GetSheet