背景:为测试某软件而编写了一个简单的测试脚本,现在整理里面用到的一些知识点做个记录,日后再写脚本时忘记的话可以查找此文。也分享给大家
目录
正文
1、语句注释
使用'号,只能注释当前行
2、变量
原型: Dim 变量名:变量名
例子: Dim A:A=0 '定义变量A,初始值为0。语句结尾无需分号
3、函数
3.1 定义函数
原型:
(1)Function 函数名()
'函数体
End Function
(2)Sub 函数名()
'函数体
End Sub
例子:
Sub Test() '定义Test函数
'函数体
End Sub
注:Function和Sub 的区别是Function函数有返回值,而Sub 函数没有返回值。
3.2 调用函数
在需要调用的位置直接写 函数名() 即可。
例子:
'语句1
...
Test() '调用Test函数
'语句..
4、数组
原型:
array(元素1, 元素2, 元素3, ...)
列子:
Dim Arr_DateFormat:Arr_DateFormat = array("YY-MM-DD","YY/MM/DD"") '定义并初始化日期格式Arr_DateFormat数组
Arr_DateFormat(i) '使用第i个元素
5、常用流程控制语句
5.1 for循环
指定循环次数,使用计数器重复运行语句。
原型:
For Iterator=i to mCount step 1
'循环体
Next
'Iterator=i:代表从数字i开始递增。Iterator只是变量名,可修改为其他名称,如: begin=i
'mCount: 当i大于mCount时就停止循环
'step: 每次递增的大小(可省略,默认为1)
'Next: 循环结束
例子:
Dim mCnt:mCnt=5
For begin=1 to mCnt step 1 '从1开始递增,每次递增1,begin大于5时跳出循环
'循环体
Next '循环结束,将执行下一条语句
5.2 wile循环
当条件为true时执行循环体
原型:
while(条件)
'循环体
Wend
例子:
Dim i:i=0
While i <> 10 '判断i的值是否等于10,如果不等就执行循环体
i=i+1 '循环体,每循环1次i递增1
Wend
5.3 do..Loop循环
先执行循环体,然后再判断条件,当条件为true时,退出循环
原型:
Do
'循环体
Loop Until 条件
例子:
Dim a:a=2
Do
MsgBox a 'MsgBox弹出提示框显示a的值
a = a -1
Loop Until a = 0 '直到a变量为0时,否则一直循环
5.4 if判断
当条件为true时执行程序模块
原型:
If 条件1 Then '判断[条件]是否为真
'程序模块1 '满足条件后将要执行的内容
ElseIf 条件2 Then '当第条件1不满足要求时,判断条件2
'程序模块2 '满足条件后将要执行的内容
ElseIf 条件.. Then '当第条件2不满足要求时,判断条件..
'程序模块.. '满足条件后将要执行的内容
End If
例子:
If IfpassWd<>0 Then '如果变量passWd不等于0,则执行
'程序模块 '满足条件后将要执行的内容
End
6、语句执行等待
wait 5 '在脚本当前执行到的位置等待5秒
7、对电脑应用程序的操作
7.1 关闭windows应用进程
systemUtil.closeProcessbyname("excel.exe") '关闭Windows中的Excel进程
7.2 运行windows应用程序
原型:SystemUtil.Run file,[params],[dir],[op],[mode]
'file 文件名
'params 可选,如果file参数中指定的是一个可执行文件,则可以使用params参数来指定该可执行文件的运行参数
'dir 可选,程序的路径
'op 可选,将要被执行的动作。如果该参数值为空,则默认操作为open操作。
'mode 可选,指定应用程序打开时的显示模式。可以指定以下几种打开模式。默认模式是1。
例子:(1)打开cmd,并往里面输入指令
Dim IPAdd:IPAdd=192.168.1.201 'IP地址变量定义初始化
SystemUtil.Run "cmd.exe","","C:\WINDOWS\system32","open" '开启cmd
wait 2 '等待2秒,等cmd窗体开启
Window( "object class:=ConsoleWindowClass" ).Type "ping "&IPAdd '执行 ping 192.168.1.201 指令
Window( "object class:=ConsoleWindowClass" ).Type "dir" '执行 dir 指令
SystemUtil.CloseProcessByName("cmd.exe") '关闭Cmd.exe
(2)用notepad++程序打开Test.txt文件
SystemUtil.run "notepad++.exe","C:\Users\Administrator\Desktop\Test.txt"
7.3 复制Windows文件
例子:
Dim RltPath:RltPath= environment("TestDir")&"\Rlt.xls" '文件1的位置
Dim RltPath_bk:RltPath_bk= environment("TestDir")&"\Rlt_bk.xls" '文件2
SET FSO=CREATEOBJECT("SCRIPTING.FILESYSTEMOBJECT")
FSO.COPYFILE RltPath,RltPath_bk '把Rlt.xls文件复制为Rlt_bk.xls
8、比较两个对象(数字、字符/字符串)的值是否相等
8.1 正则表达式原型
原型:
Function IsRegMatch(str1,str2)
Dim regEx
Set regEx = New RegExp
regEx.Pattern = str1
IsRegMatch = regEx.Test(str2)
Set regEx = nothing
End Function
使用:
Dim A:A="hello"
If IsRegMatch(A,"hello") = true Then '如果A等于hello条件为真,则执行程序模块的内容
'程序模块
End If
8.2 InStr函数
函数原型:InStr([start,]string1,string2[,compare])
'start 可选。规定每次搜索的起始位置。默认是搜索起始位置是第一个字符。如果已规定compare参数,则必须有此参数。
'string1 必填。需要被搜索的字符串。
'string2 必填。需搜索的字符串。
'compare 必填。规定要使用的字符串比较类型。默认是0
0 = vbBinaryCompare - 执行二进制比较。
1 = vbTextCompare - 执行文本比较
函数返回值:InStr 函数可返回一个字符串在另一个字符串中首次出现的位置。
0: string1、string2为"" 或 string2没有找到 或 start>string1的长度
Null: string1 或 string2 为 Null
start: string2 为 ""
其他数字:string1中找到了string2并返回找到匹配字符串的位置。
例子:
(1) If InStr(Succ,"成功") > 0 Then '如果返回值>0则代表Succ变量的值为"成功"
'程序模块
End If
(2) If InStr("ABC","B") > 0 Then '如果返回值>0则代表B在字符串ABC中
'程序模块
End If
9、对Excel的操作
9.1 设置Excel內容
Sub initExl()
Dim RltPath:RltPath= environment("TestDir")&"\Rlt.xls"
Set mExcel = createobject("excel.application") '创建Excel对象
Set mWorkbook = mExcel.Workbooks.Open(RltPath) 'Excel文件路径及文件名
Set mSheet = mWorkbook.Sheets("设备管理模块") '设置Sheet
Dim lie:lie = 9 'Excel第9列为止
Dim hang:hang=8 'Excel第8行为止
For h = 3 To hang Step 1 '循环行,一行的每列都循环后再到下一行
For l = 2 To lie Step 1 '循环列
mSheet.cells(h,l) = 0 '把第3行、第2列开始的每个单元格值置0
Next '列循环结束
Next '行循环结束
mWorkbook.Close(true) '保存且关闭工作簿
mExcel.Quit '退出Excel
Set mSheet=Nothing '释放变量
Set mExcel=Nothing '释放变量
Set mWorkbook=Nothing '释放变量
End Sub
mSheet.cells(行号,列号)=值 '设置指定单元格的值
9.2 获取Action1表中的某列数据
Dim val:val = datatable("Name","Action1") '获取Action1的表中Name列的值并赋值给val
10、在当前位置导入其他vbs脚本
在当前位置展开导入的脚本,类似于把目标脚本的内容复制到当前位置。
例子:LoadFunctionLibrary "D:\QTP\li\test.vbs"
11、测试对象的常用操作
11.1 提高测试对象的匹配准确率
有时为了提高对象的匹配准确率,可多加几个熟悉。
原型:
测试对象类型("属性:=值","属性:=值", ...)
例子:
SwfWindow("程序").SwfLabel("swfname:=label","text:=设备管理").Click 'swfname和text属性的值都对了才点击Click
11.2 把焦点定在当前测试对象上
SwfWindow("程序").SwfObject("设备操作").Object.Focus '焦点定位
11.3 获取对象指定属性的值
SwfWindow("程序").SwfWindow("FrmInformation").SwfObject("swfname:=valInfo").GetROProperty("text") '获取文本属性的值
11.4 判断某测试对象是否存在
原型:Exist(秒)
例子:SwfWindow("程序").SwfWindow("FrmConfirm").Exist(3) = true
'判断对象在3秒内是否在应用程序中存在,3秒内的任何时候若存在了,'则立即完成该语句并返回True(最短约0秒)
11.5 SwfTable的使用
SwfWindow("XX").SwfTable("列表").SelectCell n行,N列 '选定n行,N列的单元格
11.6 设置编辑框的值
SwfEdit("导入路径").Set
11.7 获取ListView对象的行数
SwfWindow("XX").SwfListView("测试状态").GetItemsCount '获取行数
11.8 获取 n行,N列 单元格的值
SwfWindow("XX").SwfListView("测试状态").GetSubItem(n,N) '获取 n行,N列 单元格的值
12、模拟电脑键盘输入
Set WSObj = CreateObject("WScript.Shell") '创建WScript对象
WSObj.SendKeys "{RIGHT}" '模拟按了键盘的 →右键
WSObj.SendKeys "{LEFT}" '模拟按了键盘的 ←左键
WSObj.SendKeys "ABCD" '模拟依次按了键盘ABCD键