51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3608|回复: 14
打印 上一主题 下一主题

[原创] QTP中脚本编写函数

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-3-31 10:59:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎么在QTP里编写一个函数,这个函数的功能,主要是把所有弹出窗口的提示信息集合在一起。比如,当输入银行账号不是数字时,可以直接去调用这个函数里面的提示信息,再传递到脚本中。当输入税号不是数字时,也可以通过调用这个函数里面另外的提示信息,再传递到脚本中。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-3-31 11:10:44 | 只看该作者
。。。发现LZ总喜欢对一个问题多次开新帖提问,再之前的帖子上继续讨论不好么?
你所需要的函数,我们已经给你建议了方法了,使用Select Case,你不会是希望我直接帮你写完整个代码吧。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2010-3-31 11:17:27 | 只看该作者
呵呵 我也发现都是阁下回我的贴,十分感谢!给个提示和方法就可以了。。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2010-3-31 11:30:12 | 只看该作者
你是想检查提示信息是否正确是么?其实没什么必要写个函数。在需要获得提示信息的地方做个判断就行了。
要写函数就要先明确好传递什么参数进去,在我看来,传递一个种类和一个信息内容即可,种类用来区分具体的提示信息,比如种类为银行帐号或税号,然后把获取到的提示信息传递到函数里。函数内部用select case判断种类,根据不同的种类确定正确的提示信息,然后去把传递进来的提示信息和正确的提示信息做比对,最后返回结果即可。
不知道是否是你想要的
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2010-3-31 11:37:04 | 只看该作者
我要写的这个函数,主要还是要获得提示信息,因为每个项目都有它们的提示信息,但是只是提示信息的内容不同,所在的窗口都是同一个类,所以就是要通过在每输入一个数据项,就调用这个函数,去获取函数里面该项目的提示信息。至于你说的,给函数设置两个参数,一个就是种类,也就是如银行账号或者税号之类的,第二个就是返回的结果,不过,我是第一次写函数,对基本语法还是知道一点,就是刚开始在用的时候,如何返回值不知道要如何展开,还望指教!
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2010-3-31 11:39:55 | 只看该作者
我不明白你把提示信息传入到脚本中然后干什么呢,一般不就是把提示信息打印出来或者写到日志文件中吗
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2010-3-31 11:43:16 | 只看该作者
我要获得的提示信息,主要还是和系统的提示信息进行判断,并在datatable里设置一个列表示是否通过,如果测试结果和期望结果一致,即提示信息一样的话,就给这个列pass,否则failed。这个是我获取提示信息的目的。但是因为表格中数据列比较多,提示信息有的是类似的,所以就通过建立函数,把所有的提示信息都集中在一个函数里面。再通过每次插入一条记录,去调用这个函数,来获取提示信息并进行判断。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2010-3-31 11:44:28 | 只看该作者
给你各函数吧,是用描述性编程写的,先是获得窗口的所有的类型为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:接收子对象数组的变量,返回值是满足条件的子对象的个数
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2010-3-31 11:48:33 | 只看该作者
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是弹出对话框对象,使用描述性编程编写
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2010-3-31 11:52:22 | 只看该作者

回复 8# 的帖子

谢谢楼上的哥们,不过我现在还没有开始学描述性编程啊?这个要先研究一下。。。
函数我是写好了,只是不知道返回值要怎么写?因为我要设置的弹出窗口信息已经可以给它值了。
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2010-3-31 11:54:16 | 只看该作者

回复 9# 的帖子

十分感谢你的帖子,不过在下还没有开始学习描述性编程,需要后面好好的研究。。。只是希望普通一点的方法。。。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2010-3-31 12:09:46 | 只看该作者
原帖由 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
函数结束

程序里你可以直接去调用函数。根据返回值的正确与否去做下一步处理。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2010-3-31 12:10:16 | 只看该作者
鼓励下SHOTSTAR 很热心的一位网友
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2010-3-31 12:11:33 | 只看该作者

回复 13# 的帖子

嘿嘿,谢谢斑竹。
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2010-3-31 13:32:09 | 只看该作者
非常感谢shotstar先生的帮助!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-9 10:09 , Processed in 0.077813 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表