51Testing软件测试论坛

标题: QTP中脚本编写函数 [打印本页]

作者: yunbin_7    时间: 2010-3-31 10:59
标题: QTP中脚本编写函数
怎么在QTP里编写一个函数,这个函数的功能,主要是把所有弹出窗口的提示信息集合在一起。比如,当输入银行账号不是数字时,可以直接去调用这个函数里面的提示信息,再传递到脚本中。当输入税号不是数字时,也可以通过调用这个函数里面另外的提示信息,再传递到脚本中。
作者: shotstar    时间: 2010-3-31 11:10
。。。发现LZ总喜欢对一个问题多次开新帖提问,再之前的帖子上继续讨论不好么?
你所需要的函数,我们已经给你建议了方法了,使用Select Case,你不会是希望我直接帮你写完整个代码吧。
作者: yunbin_7    时间: 2010-3-31 11:17
呵呵 我也发现都是阁下回我的贴,十分感谢!给个提示和方法就可以了。。
作者: shotstar    时间: 2010-3-31 11:30
你是想检查提示信息是否正确是么?其实没什么必要写个函数。在需要获得提示信息的地方做个判断就行了。
要写函数就要先明确好传递什么参数进去,在我看来,传递一个种类和一个信息内容即可,种类用来区分具体的提示信息,比如种类为银行帐号或税号,然后把获取到的提示信息传递到函数里。函数内部用select case判断种类,根据不同的种类确定正确的提示信息,然后去把传递进来的提示信息和正确的提示信息做比对,最后返回结果即可。
不知道是否是你想要的
作者: yunbin_7    时间: 2010-3-31 11:37
我要写的这个函数,主要还是要获得提示信息,因为每个项目都有它们的提示信息,但是只是提示信息的内容不同,所在的窗口都是同一个类,所以就是要通过在每输入一个数据项,就调用这个函数,去获取函数里面该项目的提示信息。至于你说的,给函数设置两个参数,一个就是种类,也就是如银行账号或者税号之类的,第二个就是返回的结果,不过,我是第一次写函数,对基本语法还是知道一点,就是刚开始在用的时候,如何返回值不知道要如何展开,还望指教!
作者: haiwa957    时间: 2010-3-31 11:39
我不明白你把提示信息传入到脚本中然后干什么呢,一般不就是把提示信息打印出来或者写到日志文件中吗
作者: yunbin_7    时间: 2010-3-31 11:43
我要获得的提示信息,主要还是和系统的提示信息进行判断,并在datatable里设置一个列表示是否通过,如果测试结果和期望结果一致,即提示信息一样的话,就给这个列pass,否则failed。这个是我获取提示信息的目的。但是因为表格中数据列比较多,提示信息有的是类似的,所以就通过建立函数,把所有的提示信息都集中在一个函数里面。再通过每次插入一条记录,去调用这个函数,来获取提示信息并进行判断。
作者: haiwa957    时间: 2010-3-31 11:44
给你各函数吧,是用描述性编程写的,先是获得窗口的所有的类型为Dialog的子对象
Public  function GetChildObject(window, childType, childObjArray)
                        Dim childObj
                        Set childObj  = Description.Create()
                        childObj("Class Name").Value = childType
                        Set childObjArray = window.ChildObjects(childObj)
                        GetChildObject = childObjArray.count
                        Set childObj = nothing
End Function       
其中的window:指窗口,需要用描述性编程写,childType:子对象的类型,像你说的这个就是“JavaDialog”或者“Dialog”之类的字符串,childObjArray:接收子对象数组的变量,返回值是满足条件的子对象的个数
作者: haiwa957    时间: 2010-3-31 11:48
Public Function HandleNoticeDialog(dialog)
                If Not dialog.Exist(5) Then
                        Call WriteLog(4, "指定对话框不存在,退出函数HandleNoticeDialog!")
                        Exit Function
                End If
                Dim childType, childObjArray, childCount
                childType = "JavaTable"
                childCount = GetChildObject(dialog, childType, childObjArray)
                If childCount>0 Then
                        Dim table, row, col,i, j, tempstr
                        Set table = childObjArray(0)
                        Call CreateTableHandle(table)
                        For i = 0 to table.GetROProperty("rows")-1
                                tempstr = ""
                                For j = 0 to table.GetROProperty("cols")-1
                                                 tempstr = tempstr & table.GetCellData(i,j)& " "
                                Next
                                Call WriteLog(3,tempstr)
                        Next
                        Set table = nothing
                End If
                childType = "JavaEdit"
                childCount = GetChildObject(dialog, childType, childObjArray)
                If childCount>0 Then
                     For i = 0 to childCount-1
                        Call WriteLog(3,childObjArray(i).GetROProperty("value"))
                     Next
                End If
                                          dialog.close
End Function
这个函数是处理弹出的提示对话框的,dialog是弹出对话框对象,使用描述性编程编写
作者: yunbin_7    时间: 2010-3-31 11:52
标题: 回复 8# 的帖子
谢谢楼上的哥们,不过我现在还没有开始学描述性编程啊?这个要先研究一下。。。
函数我是写好了,只是不知道返回值要怎么写?因为我要设置的弹出窗口信息已经可以给它值了。
作者: yunbin_7    时间: 2010-3-31 11:54
标题: 回复 9# 的帖子
十分感谢你的帖子,不过在下还没有开始学习描述性编程,需要后面好好的研究。。。只是希望普通一点的方法。。。
作者: shotstar    时间: 2010-3-31 12:09
原帖由 yunbin_7 于 2010-3-31 11:43 发表
我要获得的提示信息,主要还是和系统的提示信息进行判断,并在datatable里设置一个列表示是否通过,如果测试结果和期望结果一致,即提示信息一样的话,就给这个列pass,否则failed。这个是我获取提示信息的目的。但是 ...

那就按我上面的回复考虑你的函数吧,返回值其实只要返回个True False就可以了。如果你想返回更多的信息就比较麻烦了,我不太清楚是否能返回多个值。
写返回值的例子
Function text(a,b)
  text=a & b
End Function
str=test("sss","ddd")
函数内部还是用select case去处理,然后判断是否与期望的信息相符合,返回结果。然后你根据返回值再去进一步处理。给你写个伪代码吧

函数Test(MSGtype,getMSG)  'MSGtype是种类,getMSG是从页面获取到的信息
Select case 'MSGtype
判断不同种类的正确提示信息是什么
correctMSG=正确的提示信息
然后判断correctMSG是否和getMSG相等
如果不相等,Test=False
如果相等,Test=True
函数结束

程序里你可以直接去调用函数。根据返回值的正确与否去做下一步处理。
作者: yujie6832    时间: 2010-3-31 12:10
鼓励下SHOTSTAR 很热心的一位网友
作者: shotstar    时间: 2010-3-31 12:11
标题: 回复 13# 的帖子
嘿嘿,谢谢斑竹。
作者: yunbin_7    时间: 2010-3-31 13:32
非常感谢shotstar先生的帮助!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2