上午实习任务:
- 将年份和月份的代码改造成为过程(函数)
- qtp飞行预订票系统对起飞日期用以上过程判断是否闰/平年、输出月份的最大天数
- vbscript循环、数组的使用
下午实习任务:
- 不用参数化实现自动对同一用户登录飞行订票系统订多张票:
- 要求让该用户订从denver到其它所有城市的机票
- 时间为同一天,并编程将所有到达城市放在数组中然后打印出来
- 同上,要求改为订所有城市到 denver的机票
一、数组
1、定义
(1)静态
Dim a(2)
其中,“2”表示数组的最大下标,即数组可保存下标为0-2的3个数据
(2)动态
Dim a()
ReDim a(2)
定义时不指定大小,等到要用时再指定
2、使用
Dim a()
ReDim a(2)
a(0) = 1
a(1) = 2
a(2) = 3
msgbox a(0)&a(1)&a(2)
ReDim a(4)
a(3) = 4
a(4) = 5
msgbox a(0)&a(1)&a(2)&a(3)&a(4)
动态使用数组时,第二次使用不会保存之前定义的数据,如上述代码会先后弹出
123
45
在“ReDim”后加上“preserve”即可保存数据
Dim a()
ReDim a(2)
a(0) = 1
a(1) = 2
a(2) = 3
msgbox a(0)&a(1)&a(2)
ReDim preserve a(4)
a(3) = 4
a(4) = 5
msgbox a(0)&a(1)&a(2)&a(3)&a(4)
如上,弹出
123
12345
二、循环
1、while …… wend
求1-100内偶数的和
Dim i, sum
i = 1
sum = 0
While (i<=100)
If i mod 2 = 0 Then
sum = sum + i
End If
i = i+1
Wend
2、for
(1)for …… next
计算1-100内的和
Dim i, sum
For i=1 to 100
sum = sum + i
Next
计算1-100内偶数的和(step)
Dim i, sum
For i=2 to 100 step 2
sum = sum + i
Next
(2)for each …… next
对于“一”中的数组,每次打印都使用“msgbox”会使得很麻烦,此时可以用循环来打印
Dim a()
ReDim a(2)
a(0) = 1
a(1) = 2
a(2) = 3
For each i in a
print i
Next
ReDim preserve a(4)
a(3) = 4
a(4) = 5
For each i in a
print i
Next
“for each”会对数组内每一个元素进行处理,无需知道元素个数
“print”方法使得打印出的结果不是弹窗模式,而是一次性显示
三、任务一
将年份和月份的代码改造成为过程(函数)
'检查年份
function checkY(y)
Dim s
If isNumeric(y) Then
If ( (y mod 400)=0 or ((y mod 4)=0 and(y mod 100)<>0) ) then
s = 1
else
s = 0
end if
else
msgbox "输入年份非法!"
end if
End function
'检查月份
function checkM(m)
If isNumeric(m) Then
If m>=1 and m<=12 Then
if(m=2 or m=4 or m=6 or m=9 or m=11) then
msgbox m&"月是小月"
else
msgbox m&"月是大月"
end if
else
msgbox "请输入正确的月份!"
End If
else
msgbox "请输入数字!"
End If
End function
'总和
function checkDate(y, m)
If (isnumeric(m) and isnumeric(y)) Then
checkY(y)
If m>=1 and m<=12 Then
if(m=2) then
if(s=1) then
msgbox y&"年是闰年,"&m&"月有29天!"
else
msgbox y&"年是平年,"&m&"月有28天!"
end if
elseif(m=4 or m=6 or m=9 or m=11) then
msgbox y&"年"&m&"月有30天!"
else
msgbox y&"年"&m&"月有31天!"
end if
else
msgbox "请输入正确的月份!"
End If
else
msgbox "输入年份或月份非法!"
End If
End function
四、任务二
qtp飞行预订票系统对起飞日期用以上过程判断是否闰/平年、输出月份的最大天数
加载任务一中的函数。任务二脚本代码如下:
'Action1
createobject("shell.application").MinimizeAll '所有程序都最小化
Window("Program Manager").WinListView("SysListView32").Activate "Flight"
Dialog("Login").WinEdit("Agent Name:").Set "1234"
Dialog("Login").WinEdit("Agent Name:").Type micTab
Dialog("Login").WinEdit("Password:").SetSecure "5b57c747ce571c6ef73416435b0dfb8bd1229724"
Dialog("Login").WinButton("OK").Click
'Action2
Window("Flight Reservation").WinButton("Button").Click
Window("Flight Reservation").ActiveX("MaskEdBox").Type DataTable("A", dtLocalSheet)
Dim d, index, m, y
d = Window("Flight Reservation").ActiveX("MaskEdBox").GetVisibleText
'm = left(d, 2) '从字符串d中取左2位字符
'y = "20"&right(d, 2) '从字符串d中取右2位字符并加上前缀“20”
m = month(d)
y = year(d)
checkDate y, m
Window("Flight Reservation").WinComboBox("Fly From:").Select DataTable("B", dtLocalSheet)
Window("Flight Reservation").WinComboBox("Fly To:").Select DataTable("C", dtLocalSheet)
Window("Flight Reservation").WinButton("FLIGHT").Click
Dim n
n = Window("Flight Reservation").Dialog("Flights Table").WinList("From").GetItemsCount
Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select RandomNumber(0, n-1)
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").WinEdit("Name:").Set DataTable("D", dtLocalSheet)
Window("Flight Reservation").WinButton("Insert Order").Click
'Action3
Window("Flight Reservation").Close
五、任务三
不用参数化实现自动对同一用户登录飞行订票系统订多张票:
- 要求让该用户订从Denver到其它所有城市的机票
- 时间为同一天,并编程将所有到达城市放在数组中然后打印出来
要求1
'Action1
createobject("shell.application").MinimizeAll
Window("Program Manager").WinListView("SysListView32").Activate "Flight"
Dialog("Login").WinEdit("Agent Name:").Set "1234"
Dialog("Login").WinEdit("Agent Name:").Type micTab
Dialog("Login").WinEdit("Password:").SetSecure "5b57c747ce571c6ef73416435b0dfb8bd1229724"
Dialog("Login").WinButton("OK").Click
'Action2
Dim ct, var, i, n
ct = Window("Flight Reservation").WinComboBox("Fly To:").GetItemsCount
'print ct
For i=0 to (ct-1-1)
Window("Flight Reservation").WinButton("Button").Click
Window("Flight Reservation").ActiveX("MaskEdBox").Type 101018
Window("Flight Reservation").WinComboBox("Fly From:").Select "Denver"
var = Window("Flight Reservation").WinComboBox("Fly To:").GetItem(i)
Window("Flight Reservation").WinComboBox("Fly To:").Select var
Window("Flight Reservation").WinButton("FLIGHT").Click
n = Window("Flight Reservation").Dialog("Flights Table").WinList("From").GetItemsCount
Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select RandomNumber(0, n-1)
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").WinEdit("Name:").Set "name"
Window("Flight Reservation").WinButton("Insert Order").Click
Next
'Action3
Window("Flight Reservation").Close
这里要注意的是,当“from”选了“Denver”后,“to”不能重复选择,所以可选的元素应为ct-1=9个,下标应到ct-1-1=8。
要求2
'Action1
createobject("shell.application").MinimizeAll
Window("Program Manager").WinListView("SysListView32").Activate "Flight"
Dialog("Login").WinEdit("Agent Name:").Set "1234"
Dialog("Login").WinEdit("Agent Name:").Type micTab
Dialog("Login").WinEdit("Password:").SetSecure "5b57c747ce571c6ef73416435b0dfb8bd1229724"
Dialog("Login").WinButton("OK").Click
'Action2
Dim ct, i, n
Dim a()
ct = Window("Flight Reservation").WinComboBox("Fly To:").GetItemsCount
ReDim a(ct-1-1)
'print ct
For i=0 to (ct-1-1)
Window("Flight Reservation").WinButton("Button").Click
Window("Flight Reservation").ActiveX("MaskEdBox").Type 101018
Window("Flight Reservation").WinComboBox("Fly From:").Select "Denver"
a(i) = Window("Flight Reservation").WinComboBox("Fly To:").GetItem(i)
Window("Flight Reservation").WinComboBox("Fly To:").Select a(i)
Window("Flight Reservation").WinButton("FLIGHT").Click
n = Window("Flight Reservation").Dialog("Flights Table").WinList("From").GetItemsCount
Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select RandomNumber(0, n-1)
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").WinEdit("Name:").Set "name"
Window("Flight Reservation").WinButton("Insert Order").Click
Next
'打印数组
For each i in a
print i
Next
'Action3
Window("Flight Reservation").Close
和要求一相比,仅是把存储“fly to”的选择项由变量var改成了数组a,最后打印结果如下:
Frankfurt
London
Los Angeles
Paris
Portland
San Francisco
Seattle
Sydney
Zurich
六、任务四
订所有城市到 Denver的机票
'Action1
createobject("shell.application").MinimizeAll
Window("Program Manager").WinListView("SysListView32").Activate "Flight"
Dialog("Login").WinEdit("Agent Name:").Set "1234"
Dialog("Login").WinEdit("Agent Name:").Type micTab
Dialog("Login").WinEdit("Password:").SetSecure "5b57c747ce571c6ef73416435b0dfb8bd1229724"
Dialog("Login").WinButton("OK").Click
'Action2
Dim ct, i, n
Dim a()
ct = Window("Flight Reservation").WinComboBox("Fly From:").GetItemsCount
ReDim a(ct-1)
'print ct
For i=0 to (ct-1)
Window("Flight Reservation").WinButton("Button").Click
Window("Flight Reservation").ActiveX("MaskEdBox").Type 101018
'print i
a(i) = Window("Flight Reservation").WinComboBox("Fly From:").GetItem(i)
If (a(i) = "Denver") Then
i = i+1
'print "i="&i
a(i) = Window("Flight Reservation").WinComboBox("Fly From:").GetItem(i)
End If
Window("Flight Reservation").WinComboBox("Fly From:").Select a(i)
print a(i)
Window("Flight Reservation").WinComboBox("Fly To:").Select "Denver"
Window("Flight Reservation").WinButton("FLIGHT").Click
n = Window("Flight Reservation").Dialog("Flights Table").WinList("From").GetItemsCount
Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select RandomNumber(0, n-1)
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").WinEdit("Name:").Set "name"
Window("Flight Reservation").WinButton("Insert Order").Click
Next
'Action3
Window("Flight Reservation").Close
和任务五的区别是:
(1)“fly to”为“Denver”,但“fly from”先选。需考虑“fly from”中不能选择“Denver”
(2)虽然也是不能选“Denver”,但是是用if语句排除的,所以数组应能保存ct=10个数据,下标应为ct-1=9
打印结果如下:
London
Los Angeles
Paris
Portland
San Francisco
Seattle
Sydney
Zurich
七、非参数化数据表
(1)对“两位数加法器”,有
'Action1
createobject("shell.application").MinimizeAll
Window("Program Manager").WinListView("SysListView32").Activate "两位数加法器.exe"
'Action2
Dim a, b
a = datatable.Value("p_Text", "Action2")
b = datatable.Value("p_Text1", "Action2")
VbWindow("Form1").VbEdit("Text1").Set a
VbWindow("Form1").VbEdit("Text2").Set b
VbWindow("Form1").VbButton("加").Click
'Action3
VbWindow("Form1").Close
数据表内容如下:
设置为运行所有行后,可以实现数据表3组数据的使用
(2)如果想不改变数据表的值,但改变最后写在程序上的值,代码如下:
'Action1
createobject("shell.application").MinimizeAll
Window("Program Manager").WinListView("SysListView32").Activate "两位数加法器.exe"
'Action2
Dim a, b
datatable.Value("p_Text1", "Action2") = 30
VbWindow("Form1").VbEdit("Text1").Set "1"
VbWindow("Form1").VbEdit("Text2").Set datatable.Value("p_Text1", "Action2")
VbWindow("Form1").VbButton("加").Click
'Action3
VbWindow("Form1").Close
两位数加法器在计算时不是“1+2”,而是“1+30”
八、数据表的导入导出
datatable.Export"c:\add1.xls"
加入上行代码,可将数据表导出至c盘根目录,命名为“add1.xls”
datatable.Import"c:\add1.xls"
上行代码为导入。
同时,也可采用非代码方式:
在数据表右键,选择“file” --> “import from file” 或 “export”