VBScript入门2+QTP

 

上午实习任务:

  • 将年份和月份的代码改造成为过程(函数)
  • 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

五、任务三

不用参数化实现自动对同一用户登录飞行订票系统订多张票:

  1. 要求让该用户订从Denver到其它所有城市的机票
  2. 时间为同一天,并编程将所有到达城市放在数组中然后打印出来

 要求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”

猜你喜欢

转载自blog.csdn.net/qq_35756383/article/details/81298794
QTP