请输入您要查询的百科知识:

 

词条 QTP面向对象的框架
释义

这种框架的核心思想是把某个窗口的测试对象和相关业务核心操作都封装在VBS的类中,称之为GUI层,或者叫GUI-业务桥接层。例如下面的登录界面类: ' 登录界面类,封装了界面对象数据以及相关业务操作

Class Login

Private m_htChildObjects 'As Scripting.Dictionary

Public Property Get ChildObjects()

Set ChildObjects = m_htChildObjects

End Property

Public Property Let ChildObjects(ByRef dic)

Set m_htChildObjects = dic

End Property

' 初始化界面对象并验证对象是否存在

Public Function Init()

ChildObjects = CreateObject("Scripting.Dictionary")

With ChildObjects

.Add "LoginDialog", Dialog("text:=Login")

.Add "AgentName", ChildObjects.Item("LoginDialog").WinEdit("attached text:=Agent Name:")

.Add "Password", ChildObjects.Item("LoginDialog").WinEdit("attached text:=Password:")

.Add "Submit", ChildObjects.Item("LoginDialog").WinButton("text:=OK")

End With

'IsContextLoaded is a function that iterates through the Dictionary and checks if the GUI objects "exist"

Init = IsContextLoaded(ChildObjects) ' 检查界面层对象是否存在

End Function

' 与界面对象绑定的各类业务操作

' 测试数据从GlobalDictionary中获取(放在Data层),这里把测试数据做成函数参数可能会更好?!

Public Function SetUsername()

ChildObjects.Item("AgentName").Set GlobalDictionary.Item("AgentName")

End Function

Public Function SetPassword()

ChildObjects.Item("Password").Set GlobalDictionary.Item("Password")

End Function

Public Function Submit()

ChildObjects.Item("Submit").Click

End Function

End Class

Public Function CreateLogin()

Dim objLogin

Set objLogin = New Login

Set CreateLogin = objLogin

End Function

在业务层的类中封装业务操作流程的代码,例如下面的登录流程:

' 登录业务类,封装了登录过程的业务操作流程

Class do_login

Public Default Function Run()

Dim intStatus

Set objLogin = CreateLogin() ' 调用GUI层的Login类

If objLogin.Init() Then ' 如果所需的界面对象都存在,则执行业务操作流程

objLogin.SetUsername()

objLogin.SetPassword()

objLogin.Submit()

intStatus = micPass 'If login succeeds

Else

intStatus = micFail

End If

Run = intStatus

End Function

End Class

Public Function Create_do_login()

Dim bzLogin

Set bzLogin = New do_login

Set Create_do_login = bzLogin

End Function

这种写法的好处,除了可以细粒度地抽象、分解业务的测试代码,提高可重用性外,还可以在业务层的代码执行前,先让界面层检查验证所需的测试对象是否都存在( 例如上面代码中的objLogin.Init() ),避免了QTP在运行过程中碰到对象不存在的时候卡住的现象。

在界面层的Init方法中,通过描述性编程把测试对象都存入Dictionary中,然后用IsContextLoaded方法遍历对象,检查是否在运行时都存在:

' 检查界面层对象是否存在并写入测试报告

Public Function IsContextLoaded(ByRef htContext)

Dim ix, items, keys, strDetails, strAdditionalRemarks

IsContextLoaded=true

items = htContext.Items

keys = htContext.Keys

For ix = 0 To htContext.Count-1

IsContextLoaded = IsContextLoaded And items(ix).Exist(0)

strDetails = strDetails & vbNewLine & "Object #" & ix+1 & ": '" & keys(ix) & "' was"

If IsContextLoaded Then

intStatus = micPass

strDetails = strDetails & ""

strAdditionalRemarks = ""

Else

intStatus = micWarning

strDetails = strDetails & " not"

strAdditionalRemarks = " Please check the object properties."

End If

strDetails = strDetails & " found." & strAdditionalRemarks

Next

Reporter.ReportEvent intStatus, "IsContextLoaded", strDetails

End Function

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/27 21:02:12