下面讲另一个重要的函数,用过QTP的应该知道,当QTP在运行时,测试对象一旦发生变化,如与对象库中的对象无法匹配时,QTP就会停止运行直到超时,然后弹出错误框。在QC里执行也是一样,只是没有出现错误框,这样的情况会导致在自动化测试中浪费很多时间。因此,在GUI层中的Init函数的最后加入了IsContextLoaded函数,此函数的作用就是,检查GUI层中所有对象是否已经存在,并且把结果进行返回,实现程序如下:
Public Function IsContextLoaded(ByRef htContext) Dim allExist, ix, aItems, aKeys, strDetails, strAdditionalRemarks allExist = True aItems = htContext.Items aKeys = htContext.Keys For ix = 0 To htContext.Count-1 IsContextLoaded = aItems(ix).Exist(0) strDetails = strDetails & vbNewLine & _ "Object #" & ix+1 & ": '" & akeys(ix) & "' was" If IsContextLoaded Then strDetails = strDetails & "" strAdditionalRemarks = "" Else strDetails = strDetails & " not" strAdditionalRemarks = " Please check the object properties" allExist = False End If IsContextLoaded = IsContextLoaded And allExist Select Case IsContextLoaded Case True intStatus = micPass Case False intStatus = micWarning End Select strDetails = strDetails & " found." & strAdditionalRemarks Next Reporter.ReportEvent intStatus, "IsContextLoaded", strDetails End Function |
由于QTP不提供从外部文件中读取类的方法,因此,在这里添加一个创建类的函数,接着就是把外部文件封装好,直接保存为*.vbs后就可以为QTP运行服务了:
Public Function CreateLogin() Dim objLogin Set objLogin = New BaiduSearch Set CreateLogin = objLogin End Function |
5.2.3 调用业务行为
在QTP中加载之前保存的VBS cript文件后,在专家视图中输入图5-2所示的脚本,就可以完成业务行为的调用。
图5-2
当脚本执行完毕后,会在结果报告中显示对象是否存在,如果在运行时出现某个对象不能识别,或者说出现属性不匹配的情况,QTP就会立刻退出,并在结果报告中显示不匹配的那个对象来方便我们进行定位,其实这也是本设计模式的一个比较明显的优势。