QTP自带订票程序问题--在线等
小弟新手一名,在执行QTP自带登录界面测试的时候遇到一个问题,用了4个用例。出现错误的登录名与密码的时候用了if做判断
登录名与密码参数化
用例
1、用户名密码为空
2、用户名密码错误
3、长度大于4字符的正确用户名与正确的密码//正确登录系统
4、正确用户名与密码 //正确登录系统
脚本如下:
出现的问题是跑到用例3的时候窗口关闭,用例4就无法继续跑了
所以就在想,如果今后100个用例,跑到第10个用例,本来是不应该登录到系统的,却登录到系统了(算是一个bug),现在却退出系统了。脚本到第11个就不自动跑了。那后面90个用例咋办。难道是删除这个用例继续跑?
烦请优化一下脚本,解惑一下
Dialog("Login").WinEdit("Agent Name:").Set DataTable("username", dtGlobalSheet)
Dialog("Login").WinEdit("Password:").SetSecure DataTable("psword", dtGlobalSheet)
Dialog("Login").WinButton("OK").Click
If Dialog("Login").Dialog("Flight Reservations").Exist Then
Dialog("Login").Dialog("Flight Reservations").WinButton("确定").Click
Dialog("Login").WinButton("Cancel").Click
else
Window("Flight Reservation").WinMenu("Menu").Select "File;Exit"
End If 跑到用例3的时候,登录系统,再录制退出系统,继续登录,就可以运行到用例4了 Dialog("登录").WinEdit("代理名称:").Set DataTable("代理名称", dtLocalSheet)
Dialog("登录").WinEdit("密码:").SetSecure DataTable("密码", dtLocalSheet)
Dialog("登录").WinButton("确定").Click
If Dialog("登录").Dialog("航班预订").exist then
Dialog("登录").Dialog("航班预订").WinButton("确定").Click
Dialog("登录").WinButton("取消").Click
else
Window("航班预订").Close
end if
wait (2)
我的代码和lz一样,且代理名称和密码的参数如下:
代理名称:空,1,11,1111
密码:空,1,11,1111,mercury
然后设置文件菜单-设置-运行-数据表循环:在所有行上运行,
但是为什么我运行脚本以后就只运行一次? 回复 3# windofland
你和他脚本数据存放的DataTable不一样,他的放在全局表中,你的放在局部表中
dtGlobalSheet 读取Global表中数据 迭代运行设置File-Settings-Run-Data Table iterations
dtLocalSheet 读取当前Action表中数据 迭代运行设置右键Action-Action Call properties -Run-data table iterations 对于你这种脚本运行结果不可预见的脚本运行失败的情况,建议使用简单的场景恢复
场景恢复两种类型:
1、在脚本运行前将应用程序恢复到初始状态
在输入登录名密码前添加登录界面是否存在判断,若不存在则调用场景恢复
2、在脚本运行失败后将应用程序恢复到初始状态
在脚本末尾添加脚本运行是否失败的判断,若失败则调用场景恢复
针对你的脚本可以将场景恢复函数简单设计为:
关闭所有flight4a.exe进程(可以使用自带方法SystemUtil.CloseProcessByName("flight4a.exe"))然后再用SystemUtil.run "路径"打开flight4a.exe 回复 1# legend818
也可以用Class写,在Class_Initialize中做好判断是有Flight启动的函数。在Class_Terminate中写好关闭Flight的函数。
msgbox isRun("flight4a")
Function isRun(ProcessName)
isRun = False
Dim Process '获取所有进程
For each Process in GetObject("winmgmts:{impersonationLevel=impersonate}").Instancesof("Win32_process")
If instr(1,Process.name,ProcessName)Then
printProcessName & "已运行。"
isRun = True
Exit For
End If
Next
End Function
页:
[1]