问题一:在一个脚本中自动判断被测系统是否依据不同参数类型做出了正确的处理。
例:对于QTP自带的订票系统,在自动化登录功能时对用户名及密码的判断就有多种情况:
- 用户名及密码正确。结果:正常登录到订票系统。
- 用户名为空,密码正确。结果:提示“Please enter agent name”
用户名少于4个字符,密码正确。结果:提示“Agent name must be at least 4 characters long.” 用户名正确,密码为空。结果:提示“Please enter password” 用户名正确,密码少于4个字符。结果:提示“Password must be at least 4 characters long” 用户名正确,密码错误。结果:提示“Incorrect password. Please try again”
对于不同的用户名及密码,系统的提示信息是不一样的,所以必须对脚本进行强化。让其能对不同参数进行不同的处理。
处理思路:
录制脚本 ——> 进行参数化 ——> 增强脚本,在脚本中增加错误输入的提示框处理 ——> 设置检查点检查不同参数执行时提示框的内容是否正确。——> 对提示框的文本内容进行参数化
录制顺序:
打开订票系统的——>输入用户名为空,密码正确后点击“OK”(这是为了录制系统对错误输入的处理)——> 在提示框中点击“确定”按钮(系统返回登录对话框) ——> 输入正确的用户名和密码点击“OK” ——> 系统登录订票系统 ——> 点击菜单栏中的Flie下的Exit推出订票系统。
代码如下:
Dialog("Login").WinEdit("Password:").SetSecure "4db13473a0029213e33428bdbacf3607c194" //输入密码
Dialog("Login").WinButton("OK").Click //点击OK登录
Dialog("Login").Dialog("Flight Reservations").WinButton("确定").Click //系统弹出了错误提示框后,点击确定
Dialog("Login").WinEdit("Agent Name:").Set "11111" //输入用户名
Dialog("Login").WinEdit("Password:").SetSecure "4db1347e37172040c9b0be233bcba393c6f82c1a" //输入密码
Dialog("Login").WinEdit("Password:").Type micReturn //点击键盘回车键
Window("Flight Reservation").WinMenu("Menu").Select "File;Exit" //退出
wait(3) //在迭代时添加等待时间,不加的话执行太快,还没打开登录框就输入信息,系统会找不到输入框而报错。
参数化方法很多,这里使用一个简单易用的。
在QTP中打开“Keyword View”视图,找到输入用户名的那列,点击其“Value”输入框后面的箭头按钮。系统会打开参数化设置窗口。
在窗口中选择“Parameter”参数化单选框,后面的类型选择“Data Table”
Name:输入框中输入Data Table表参数列的列名。
Location in Data Table:选择参数存放的地方,有下面两个单选项
Global sheet:全局表。所有的事物都能获取到。
Current action sheet (local):私有表。只有当前的事物才能获取到
这样在Data Table中就可以输入不同的参数了。密码参数化相同。
对脚本进行维护,增强脚本的执行力。有几个目的:1、将错误的处理放在登录之后。2、添加判断是否有错误提示框。3、添加错误提示框中提示信息的校验。
修改后的代码:
//输入用户名及密码后点击确定登录系统
Dialog("Login").WinEdit("Agent Name:").Set DataTable("name", dtGlobalSheet)
Dialog("Login").WinEdit("Password:").SetSecure DataTable("pass", dtGlobalSheet)
Dialog("Login").WinEdit("Password:").Type micReturn
//添加IF判断是否弹出"Flight Reservations"对话框,存在执行IF中的语句,不存在执行ELSE中的语句
If Dialog("Login").Dialog("Flight Reservations").Exist Then
//"Flight Reservations"存在,添加了检查点,校验提示信息的内容
Dialog("Login").Dialog("Flight Reservations").Static("Please enter agent name").Check CheckPoint("Please enter agent name")
//校验完毕后,点击提示框的确定按钮并关闭系统。
Dialog("Login").Dialog("Flight Reservations").WinButton("确定").Click
Dialog("Login").Close
//如果没有弹出提示框,也就是正确登录订票系统时,执行下面判断分支的ELSE语句。
else
Window("Flight Reservation").WinMenu("Menu").Select "File;Exit" ///退出登录的订票系统
End If //IF判断结束
wait(3)
经过增强的脚步可以判断正确登录及错误处理。但应为我们获取的提示对话框信息“Static("Please enter agent name")”对象的属性“text”只为“Please enter agent name”,所以不能校验其他形式的提示内容。那就必须对检查点的提示信息进行参数化,依据不同输入值检查响应的提示信息是否正确。
之前已经对用户名及密码进行了参数化,对检查点内容的参数化步骤相同,选择检查点的“Value”进行参数化。
要注意的是,检查点内容的参数值必须与前面用户名和密码输入产生的结果一致。
也就是说,参数化的用户名为空,密码正确。那检查点参数内容就应该是“Please enter agent name”
参数化的用户名正确,密码少于4个字符。那检查点参数内容就应该是“Password must be at least 4 characters long”
参数化列表:
用户名 | 密码 | 提交信息校验 |
用户名正确 | 密码正确 | |
用户名为空 | 密码正确 | Please enter agent name |
用户名少于4个字符 | 密码正确 | Agent name must be at least 4 characters long. |
用户名正确 | 密码为空 | Please enter password |
用户名正确 | 密码少于4个字符 | Password must be at least 4 characters long |
用户名正确 | 密码错误 | Incorrect password. Please try again |
如果还有其他的情况,再对脚本进行强化。增强处理的方式。例:在输入错误超过5次时,弹出登录失败并关闭系统。那增加判断是否有这个提示框,有就执行相应操作就可以了。
但最好是一个脚本只针对一个功能,不要包多个功能放在一个脚本中,那样代码量大,处理复杂,维护起来也困难。