您的位置:首页 > 其它

用户体验测试的自动化实现 - 对检查Tab顺序的脚本进行完善

2008-05-22 20:39 666 查看
  注:本文最早发表在《51测试天地》第九期

对检查Tab顺序的脚本进行完善

把前面的脚本结构适当调整,让其可维护性更强,则可改成如下所示的脚本:
' 检查控件的focused属性
Public Function CheckFocus(TestObject)
       If TestObject.CheckProperty("focused","True") Then
                 CheckFocus = True
       Else
                     CheckFocus = False
       End IF
End Function
 
' TAB按键的键值
Const VK_TAB = 15
' 创建DeviceReplay对象
Set DeviceReplay = CreateObject("Mercury.DeviceReplay")
 
' 创建Dictionary对象
Set Dic = CreateObject("Scripting.Dictionary")
' 添加Dictionary的key和value,把顺序号作为Key、控件对象作为Value
Dic.Add "1" , Dialog("Login").WinEdit("Agent Name:")
Dic.Add "2" , Dialog("Login").WinEdit("Password:")
Dic.Add "3" , Dialog("Login").WinButton("OK")
Dic.Add "4" , Dialog("Login").WinButton("Cancel")
Dic.Add "5" , Dialog("Login").WinButton("Help")
 
' 启动应用程序
SystemUtil.Run "C:/Program Files/Mercury Interactive/QuickTest Professional/samples/flight/app/flight4a.exe"
 
' 定位到程序窗口,并判断窗口中的默认焦点是否在正确的位置
Dialog("Login").Activate
CheckFocus(Dic.Item("1"))
 
For I=2 to Dic.Count
       ' 单击Tab键,检查焦点是否跳转到正确的控件上
       DeviceReplay.PressKey VK_TAB
       CheckFocus(Dic.Item(CStr(I)))
Next
    脚本作了以下几点的调整:
(1)其中把检查控件的focused属性的脚本封装成独立的函数已备调用。
(2)使用DeviceReplay对象来发送TAB按键。
(3)使用Dictionary对象来按TAB顺序存储控件对象。
(4)把Dictionary中存储的第一个控件对象作为默认焦点所在的位置,定位到程序界面后,判断窗口中的默认焦点是否在正确的位置。
(5)然后循环遍历Dictionary中存储的控件对象,单击Tab键,检查焦点是否跳转到正确的控件上。
    脚本的运行结果如图4所示:



[align=center]图4 脚本的运行结果[/align]
但是这个脚本还是有些问题,当某个TAB顺序不对时,CheckProperty函数检查属性的时间会比较长,CheckProperty函数检查属性等待的时间默认是根据如图5所示的“Object Synchronization Timeout”来设置的。



[align=center]图5  设置“Object Synchronization Timeout”选项[/align]
    可以通过设置该选项来达到提高检查属性的速度的目的,也可以在脚本中进行设置。查看如下所示的CheckProperty函数的语法可知道,TimeOut属性是可设置的:
    object.CheckProperty (PropertyName, PropertyValue, [TimeOut])
    因此,可以把CheckFocus函数改成如下脚本所示:
' 检查控件的focused属性
Public Function CheckFocus(TestObject)
       If TestObject.CheckProperty("focused","True",2) Then
                 CheckFocus = True
       Else
                     CheckFocus = False
       End IF
End Function
脚本中把TimeOut设置为2秒,这样当检查到控件的focused属性不为预期的“True”时,QTP会等待2秒再次检查,2秒后不管是否出现期待的属性值,都会立即返回当前属性值。
其实还可以对脚本进行进一步地调整,因为循环检查TAB顺序时,只要碰到第一个TAB顺序与预期的不匹配时就可以认为出现了错误,TAB顺序设置不合理。因此可以在循环语句中加入判断,如果出现调用CheckFocus返回值为False的情况,则马上退出循环,如下脚本所示:
' 检查控件的focused属性
Public Function CheckFocus(TestObject)
       If TestObject.CheckProperty("focused","True",2) Then
                 CheckFocus = True
       Else
                     CheckFocus = False
       End IF
End Function
 
' TAB按键的键值
Const VK_TAB = 15
' 创建DeviceReplay对象
Set DeviceReplay = CreateObject("Mercury.DeviceReplay")
 
' 创建Dictionary对象
Set Dic = CreateObject("Scripting.Dictionary")
' 添加Dictionary的key和value,把顺序号作为Key、控件对象作为Value
Dic.Add "1" , Dialog("Login").WinEdit("Agent Name:")
Dic.Add "2" , Dialog("Login").WinEdit("Password:")
Dic.Add "3" , Dialog("Login").WinButton("Cancel")
Dic.Add "4" , Dialog("Login").WinButton("OK")
Dic.Add "5" , Dialog("Login").WinButton("Help")
 
' 启动应用程序
SystemUtil.Run "C:/Program Files/Mercury Interactive/QuickTest Professional/samples/flight/app/flight4a.exe"
 
' 定位到程序窗口,并判断窗口中的默认焦点是否在正确的位置
Dialog("Login").Activate
CheckFocus(Dic.Item("1"))
 
For I=2 to Dic.Count
       ' 单击Tab键,检查焦点是否跳转到正确的控件上
       DeviceReplay.PressKey VK_TAB
       If CheckFocus(Dic.Item(CStr(I))) = False Then
        ' 如果碰到焦点没有跳转到正确的控件上的情况,则马上退出循环
              Exit For
       End If    
Next
    调整后的脚本运行结果如图6所示。



[align=center]图6 调整后的脚本运行结果[/align]
    脚本在检查到第3个TAB顺序定位的控件的Focused属性不为True后,退出For循环,不再继续后续TAB顺序的检查,节省了测试脚本的运行时间,并且让脚本的测试结果更加简明、清晰。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息