qtp VB小技巧,二
1 生产随机数列 第一种方法 CODE: randomize'更新反回的数据 funcation rand(k,n) n=int((k-1)*rnd+1) rand=n end funcation 第二种方法 CODE: n=randomnumber.value(1,255) 2 CODE: row=datatable.getcurrentrow if row="5" then end if 3 CODE: webedit("txtpass").setsecure"sdsdf...." 如果参数化密码,可以直接在数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set 4 如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证 # 判断一个窗口是否存在 if(Dialog(dialog_name).exist=true) then else end if 判断一个窗口是否激活 if(window("window_name").active=true) then else end if 导入一个EXCEL表 datatable.Import(excel_name)'将该excel文件中的表全部导入 datatable.ImportSheet(excel_name,sheet_name)'导入excel中名字为sheet_name的sheet表 导出一个EXCEL表 datatable.ExportSheet(excel_name,sheet_name)或 datatable.ExportSheet(excel_name,sheet_index) 获取表中当前的行数 datatable.GetCurrentRow 获取表中总行数 datatable.GetRowCount 返回EXCEL中表的数量 DataTable.GetSheetCount 获取运行的表中的某个值或者设置该值 DataTable.Value(colume_name,sheet_name)'获取colume_name列中的当前光标处的值 DataTable.value(colume_name,sheet_name)=New_Value'设置新值 DataTable.GetSheet(sheet_name).GetParameter(colume_name).valueByRow(n) 判断当前光标是否处于最后一列 iRow=datatable.getCurrentRow if(dataTable.value(sheet_name).GetParameter(colume_name).ValueByRow(iRow)<>expected_value) then for iRow=0 to iRow<datatable.getRowCount rowNum=iRow next end if 获取一列数据 DataTable(colume_name,sheet_name) '一个登陆的对话框,首先为一个错误的判断,后来输入正确的值点击button_name按钮 Dialog(dialog_name).WinEdit(login_name).set login_wrongname Dialog(dialog_name).WinEdit(login_pwd).set login_wrongpwd Dialog(dialog_name).Dialog(wrongdialog_name).WinButton(button_name).click Dialog(dialog_name).WinEdit(login_name).set login_correct_name Dialog(dialog_name).WinEdit(login_pwd).set login_correct_pwd Dialog(Dialog_name).WinButton(button_name).click window的方法和属性 window(win_name).active CODE: if browser("web_name").dialog("dialog_name").exist(1) then'如果不出现=false if error_message<>(datatable.value("error_info"))then 这里我总结了两点技巧: 一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第一遍时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性 5 是: CODE: datatable.value("num",dtlocalsheet) -----向某一列的单元格赋值: CODE: datatable.value("column_name",dtlocalsheet)="nanjing" -----取得某一行具体值: CODE: datatable.setcurrentrow(n) msgbox(datatable.getsheet("global").getparameter("column_name").Rawvalue) 或者kk=datatable.Rawvalue("column_name","action1") ----在run-time时,动态添加表格与数据 CODE: kk=datatable.addsheet("sheet_name").addparameter("column_name","value").name; 6 CODE: with Dialog("name") end with 7 CODE: 选择一个条目:wintreeview.select(item)'根是0 根的名称:wintreeview.getitem(0) 8 CODE: sub database_check set con=createobject("adodb.connection") con.open "Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;U&_ 'access方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\test.mdb" 'Orocle方式:con.open "DRIVER={Oracle in OraHome92};SERVER=CESHI;U 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 CODE: vbcr----chr(13)回车符 10 CODE: 在Keyword View模式会从本步骤运行到所有action结束 在expert view模式仅会将本action运行结束 11 12 CODE: -------从系统的文件中获取信息及删除文件 --------获取文件夹里所有文件信息 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 13 CODE: y=......waitproperty("visible",true,10000) 14 CODE: On error resume next On error goto handle 15 CODE: name=array(1,2,"aa","bb") name(2)="aa" 16 CODE: 进行日期YYYY-MM-DD的格式检查 : Function RegExpTest(patrn, strng) 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 "" case else end select 17 CODE: instr(string1,string2) 18 CODE: 举例说明1: 比如:你录制一个选择磁盘中的文件动作 会录制为: .winlistview(" .winlistview(" 下次录制的时候,如果你的系统文件改为不显示扩展名,下次执行的时候,QTP就找不到she.mp3,只能找到she; 举例说明2: 有时由于不同操作系统以及不同的ie,导致有些窗口不能识别,比如在2000下弹出的网页对话框的标题是: “web对话框",而在2003上是”网页对话框" 19 CODE: isarray'是否是数组 isconnected'判断QTP是否连接到TD isdate'是否是合法的日期类型 isempty'判断是否初始化 isNull'判断是否为空值 isNumeric'判断是否是数字型 isobject'判断是否一个功能对象 isready'判断设备是否准备就绪 isRootFolder'是否是根目录 QTP提供全局错误处理模式,有Popup QTP也提供On Error Resumt Next/On Error goto 0的局部错误处理模式。可以在局部范围内实现Process next step的效果,忽略错误继续执行后续步骤。这个局部错误处理模式,象局部变量优先于全局变量并且只在本函数内有效一样,优先级高于全局错误处理模式,同时只在本函数局部范围(Action本身也可以看成是个函数)内生效。它不会影响外层函数的错误处理模式,但会改变局部范围内调用的子孙函数,将子孙函数的错误处理模式改为Stop Run! 四种全局错误处理模式的区别在于: 1、Process next step 2、Stop run 3、Popup 4、Process next action iteration 经过上述分析,我们可以得到结果,我们的主控Test,全局错误处理模式使用Stop run模式,同时在主控函数里使用On Error Resumt Next/On Error goto 0的局部错误处理模式来调用Case函数。这样使得Case函数和其子函数里发生错误时,会停止执行,并层层返回到主控函数这里,并由主控函数来拦截错误,记录错误。然后主控函数就可以正常的继续执行下一个Case函数了,不用担心会导致整个Test停止执行。 主控函数调用Case函数的详细过程如下: Err.Clear On Error Resume Next call CaseFunctionName If Err.Number <> 0 Then End Err.Clear On Error goto 0 |
- 上一篇 »javascript性能优化总结二,转载
- 下一篇 »css 小经验: 重构css的优化与技巧