legend818 发表于 2013-1-27 12:11:21

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

xyyhljm 发表于 2013-1-30 10:50:16

跑到用例3的时候,登录系统,再录制退出系统,继续登录,就可以运行到用例4了

windofland 发表于 2013-2-20 17:34:10

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
然后设置文件菜单-设置-运行-数据表循环:在所有行上运行,
但是为什么我运行脚本以后就只运行一次?

feiyunkai 发表于 2013-2-21 09:33:29

回复 3# windofland
你和他脚本数据存放的DataTable不一样,他的放在全局表中,你的放在局部表中

dtGlobalSheet 读取Global表中数据   迭代运行设置File-Settings-Run-Data Table iterations
dtLocalSheet   读取当前Action表中数据 迭代运行设置右键Action-Action Call properties -Run-data table iterations

feiyunkai 发表于 2013-2-21 09:58:11

对于你这种脚本运行结果不可预见的脚本运行失败的情况,建议使用简单的场景恢复
场景恢复两种类型:
1、在脚本运行前将应用程序恢复到初始状态
在输入登录名密码前添加登录界面是否存在判断,若不存在则调用场景恢复
2、在脚本运行失败后将应用程序恢复到初始状态
在脚本末尾添加脚本运行是否失败的判断,若失败则调用场景恢复

针对你的脚本可以将场景恢复函数简单设计为:
关闭所有flight4a.exe进程(可以使用自带方法SystemUtil.CloseProcessByName("flight4a.exe"))然后再用SystemUtil.run "路径"打开flight4a.exe

黑羽祭 发表于 2013-2-21 13:48:16

回复 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]
查看完整版本: QTP自带订票程序问题--在线等