51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

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

[原创] 常用QTP函数合集

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-1-10 22:54:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当中有对SAFFRON框架的增加改造,有一些自己常用的方法或函数,使用时请注意有相互调用,出错不怪我……
在SAFFRON基础上不知道是否能够构造出更加强大、更便于开发和管理的框架函数库呢?

  1. '*******************************************************************************************************************************
  2. '设计说明:关闭所有打开的IE
  3. '程序输入:
  4. '程序输出:
  5. '设计人员:LIUYI027
  6. '设计时间:2011-01-08
  7. '调用举例:CloseBrowsers
  8. '*******************************************************************************************************************************
  9. Public Sub CloseAllBrowser
  10. Set Wshshell  = CreateObject("Wscript.Shell")
  11. Set DialogObject = Description.Create()
  12. DialogObject("micclass").Value = "Dialog"
  13. Set Windows32Dialog = Desktop.ChildObjects(DialogObject)
  14. dlNum = Windows32Dialog.Count - 1
  15. For v = 0 to dlNum
  16.   Windows32Dialog(v).Close
  17. Next
  18. Set Windows32Dialog = Nothing
  19. Set theBrowser = Browser("micclass:=Browser", "index:=0")
  20. While theBrowser.Exist(0)
  21.   theBrowser.Close
  22.   '有些系统页面可能在关闭的时候会有提示对话框出现
  23.   waitNx = 1
  24.   Do While waitNx < 5
  25.    Set Windows32Dialog = Desktop.ChildObjects(DialogObject)
  26.    dlNum = Windows32Dialog.Count - 1
  27.    For v = 0 to dlNum
  28.     dlText = Windows32Dialog(v).GetROProperty("regexpwndtitle")
  29.     Wshshell.AppActivate(dlText)
  30.     Wait(1)
  31.     Wshshell.SendKeys "{ENTER}"
  32.    Next
  33.    Set Windows32Dialog = Nothing
  34.    waitNx = waitNx + 1
  35.   Loop  
  36.   Report Pass,"使用CloseAllOpenedBrowsers函数页面关闭成功","当前页面关闭成功!"
  37. Wend
  38. Set theBrowser = Nothing
  39. Set DialogObject = Nothing
  40. Set Wshshell = Nothing
  41. End Sub
  42. '*******************************************************************************************************************************
  43. '设计说明:最大化IE浏览器
  44. '程序输入:无
  45. '程序输出:无
  46. '设计人员:LIUYI027
  47. '设计时间:2011-01-08
  48. '调用举例:MaximizeBrowser
  49. '*******************************************************************************************************************************
  50. Sub MaximizeBrowser
  51. Set BrowserObject = Description.Create()
  52. BrowserObject("NativeClass").Value = "IEFrame"
  53. Set WindowsBrowser = Desktop.ChildObjects(BrowserObject)
  54. brNum =  WindowsBrowser.Count - 1
  55. For i = 0 To brNum
  56.   ieVersion = WindowsBrowser(i).GetROProperty("version")
  57.   wndTitle = WindowsBrowser(i).GetROProperty("title")
  58.   Set ObjectBrowser = Browser("micclass:=Browser", "index:="&i)
  59.   If  Instr(ieVersion,6) > 0 Then
  60.    Window("regexpwndclass:=IEFrame","index:=0","text:="&wndTitle&".*").Maximize
  61.   Else
  62.    WindowsBrowser(i).Maximize
  63.   End If
  64.   Set ObjectBrowser = Nothing
  65. Next
  66. Set WindowsBrowser = Nothing
  67. Set BrowserObject = Nothing
  68. End Sub
  69. '*******************************************************************************************************************************
  70. '设计说明:初始化所有打开的Browser页面,不厌设计复杂只为稳定高效
  71. '程序输入:无
  72. '程序输出:初始化成功或者失败
  73. '设计人员:LIUYI027
  74. '设计时间:2011-01-08
  75. '调用举例:BrowserSync
  76. '*******************************************************************************************************************************
  77. Public Function SyncronizeBrowser()
  78. Set MyBrowser = Browser("micclass:=Browser", "index:=0")
  79. If  MyBrowser.Exist(0) Then
  80.   MyBrowser.Sync  
  81.   Do Until MyBrowser.GetROProperty("url") <> "" And MyBrowser.GetROProperty("name") <> ""
  82.    Delay 50
  83.   Loop
  84. Else
  85.   Set MyBrowser = Nothing
  86.   SyncronizeBrowser = False
  87.   Report Warning ,"初始化页面失败","页面初始化失败,需要重新操作!"
  88.   Exit Function
  89. End If
  90. Set MyBrowser = Nothing
  91. SyncronizeBrowser = True
  92. End Function
  93. '*******************************************************************************************************************************
  94. '设计说明:打开指定的地址,并且初始化页面,特别说明:对于地址栏出现一次性sessionid的网页不可用该函数
  95. '程序输入:url地址
  96. '程序输出:初始化成功或者失败
  97. '设计人员:LIUYI027
  98. '设计时间:2011-01-08
  99. '调用举例:print SyncronizeSepecifiedURL("www.baidu.com")
  100. '*******************************************************************************************************************************
  101. Public Function NavigateBrowser(para_myuri)
  102. CloseAllBrowser
  103. Set IEBrowser = CreateObject("InternetExplorer.Application")
  104. IEBrowser.Visible = True
  105. IEBrowser.Navigate para_myuri
  106. Set ObjectBrowser = Browser("micclass:=Browser", "index:=0")
  107. Do Until SyncronizeBrowser() = True
  108.   Wait(1)
  109. Loop
  110. actualurl = ObjectBrowser.GetROProperty("url")
  111. '下面这个判断主要是为了解决初始化地址跳转问题,如果URL发生变化会导致对象属性发生变化从而导致运行错误。
  112. If  actualurl <> para_myuri Then
  113.   ObjectBrowser.Close
  114.   Set IEBrowser = Nothing
  115.   Set IEBrowser = CreateObject("InternetExplorer.Application")
  116.   IEBrowser.Visible = True
  117.   IEBrowser.Navigate actualurl
  118.   If  Not SyncronizeBrowser() Then
  119.    Report Warning,"使用NavigateBrowser函数IE初始化失败","打开指定页面【"&myuri&"】在初始化的时候失败!"
  120.    Set MyBrowser = Nothing
  121.    Set IEBrowser = Nothing
  122.    Exit Function
  123.   End If
  124. End If
  125. Set ObjectBrowser = Nothing
  126. Set IEBrowser = Nothing
  127. Report Pass,"使用NavigateBrowser函数IE初始化成功","打开指定页面【"&para_myuri&"】并且初始化成功!"
  128. NavigateBrowser = True
  129. End Function
  130. '*******************************************************************************************************************************
  131. '设计说明:处理弹出对话框,主要用于弹出的可预知性能够得到控制的地方,未知弹出需引用其他函数处理
  132. '程序输入:选择对话框操作:是/否/确认/取消/确定等等,是否需要向结果中添加提示信息的报告
  133. '程序输出:结果报告
  134. '设计人员:LIUYI027
  135. '设计时间:2011-01-08
  136. '调用举例:HandleDialog "确认","Y"
  137. '*******************************************************************************************************************************
  138. Public Function HandleDialog(regexpName,needAlertInfo)
  139. If  Trim(regexpName) = "" Then
  140.   regexpName = "无需匹配的按钮!"
  141. End If
  142. Set Wshshell = CreateObject("Wscript.Shell")
  143. Set DialogObject = Description.Create()
  144. DialogObject("micclass").Value = "Dialog"
  145. Set WindowsDialog = Desktop.ChildObjects(DialogObject)
  146. dlNum = WindowsDialog.Count - 1

  147. If dlNum < 0 Then
  148.   Set WindowsDialog = Nothing
  149.   Set DialogObject = Nothing
  150.   Report micDone,"没有任何弹出框","不需要进行对话框的处理!"
  151.   Exit Function
  152. End If
  153. For inx = 0 to dlNum
  154.   If  needAlertInfo = "Y" Or needAlertInfo = True Then
  155.    Set StaticObject = Description.Create()
  156.    StaticObject("micclass").Value = "Static"
  157.    Set WindowsStatic = WindowsDialog(inx).ChildObjects(StaticObject)
  158.    stNum = WindowsStatic.Count
  159.    disMessage = WindowsStatic(stNum - 1).GetROProperty("text")
  160.    Report micDone,"获取网页对话框信息成功:",disMessage
  161.    Set WindowsStatic = Nothing
  162.    Set StaticObject = Nothing
  163.   End If
  164.   dialogTitle = WindowsDialog(inx).GetROProperty("text")
  165.   Set WinButtonObject = Description.Create()
  166.   WinButtonObject("micclass").Value = "WinButton"
  167.   Set WindowsButton = WindowsDialog(inx).ChildObjects(WinButtonObject)
  168.   wbNum = WindowsButton.Count - 1
  169.   For binx = 0 to wbNum
  170.    btName = WindowsButton(binx).GetROProperty("text")
  171.    If  Instr(btName,regexpName) > 0 Then
  172.     WindowsButton(binx).Click
  173.     Report Pass,"函数HandleDialog点击指定按钮成功","按照指定的按钮名称【"&regexpName&"】查找并点击按钮成功!"
  174.     Exit For
  175.    End If
  176.    If  binx = wbNum And Instr(btName,regexpName) = 0 Then
  177.     Wshshell.AppActivate(dialogTitle)
  178.     Wait(0)
  179.     Wshshell.SendKeys "{ENTER}"
  180.     Report micWarning,"函数HandleDialog点击按钮","没有匹配到指定按钮,对已经弹出的对话框直接使用默认操作!"
  181.    End If
  182.   Next
  183.   Set WindowsButton = Nothing
  184.   Set WinButtonObject = Nothing
  185. Next
  186. Set WindowsDialog = Nothing
  187. Set DialogObject = Nothing
  188. Set Wshshell = Nothing
  189. End Function
  190. '*******************************************************************************************************************************
  191. '设计说明:SAFFRON框架引用以及部分改造,函数分流之后的部分
  192. '程序输入:参见各个函数
  193. '程序输出:
  194. '设计人员:
  195. '设计时间:2011-01-08
  196. '调用举例:
  197. '*******************************************************************************************************************************
  198. Public Function GenerateDescription (classString,isModleWindow)
  199. classNx = IndexOf(classArray, classString)
  200. If  classNx >= 0 Then
  201.   '增加对模态窗口的支持
  202.   If  isModleWindow = "Y" Or isModleWindow = True Then
  203.    descString = "Window("&Quote("nativeclass:=Internet Explorer_TridentDlgFrame")&")."
  204.   Else
  205.    descString = classArray(0)&"("&Quote(descArray(0))&")."
  206.   End If  
  207.   If  classNx >= 1 Then
  208.    descString = descString + classArray(1)&"("&Quote(descArray(1))&")."
  209.    If  2 >= classNx Then
  210.     If  hasFrameValue <> "" Then
  211.      descString = descString + classArray(2)&"("&Quote(descArray(2))&","&Quote("name:="&hasFrameValue)&")."
  212.     End If
  213.    End If
  214.   End If
  215. End If
  216. GenerateDescription = descString
  217. End Function
  218. '************************************************************************************************************************
  219. Public Function GenerateObjectDescription (objClassName, otherAtt)
  220. objNx = IndexOf(objectArray, objClassName)
  221. objNameString = ""
  222. If  objNx <> -1 Then
  223.   objNameString = objClassName&"("&Quote(objectDescArray(objNx))&","&Quote(otherAtt)&","&Quote("index:=0")&")."
  224. End If
  225. GenerateobjectDescription = objNameString
  226. End Function
  227. ……
  228. ……
  229. ……
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2011-1-11 10:33:55 | 只看该作者
顶!
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2011-1-11 10:42:28 | 只看该作者
哈哈,真是想什么来什么,谢谢啦!
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2011-1-11 13:30:56 | 只看该作者
本帖最后由 wugecat 于 2011-1-11 13:51 编辑

是不是太复杂了我也写了类似方法不过都很短。。。
  1. [code]'关闭IE
复制代码

Function IEClose()
SystemUtil.CloseProcessByName "iexplore.exe"
End Function [/code]
还有比如SelectFromList方法为什么不直接用QTP的select呢??比如我想实现select #1你的方法就实现不了
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2011-1-11 16:47:29 | 只看该作者
谢谢楼主分享,
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2011-1-11 20:15:58 | 只看该作者
是不是太复杂了我也写了类似方法不过都很短。。。
Function IEClose()
SystemUtil.CloseProcessByName  ...
wugecat 发表于 2011-1-11 13:30



可以啊,函数不是有么?不过你觉得这样的测试效果能达到么?

Public Sub KillProcess(prcessName)
        If         Len(prcessName) < 3 Then
                Report Warning,"使用函数KillProcess输入进程名称过短","过短的进程名称可能会匹配到多个进程,操作将非常危险,请停止操作!"
                Exit Sub
        End If
        Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
        Set Processes = objWMIService.ExecQuery("select * from Win32_Process")
       
        For Each Process In Processes
                If         InStr(UCase(Process.Name),UCase(prcessName)) > 0 Then
                        SystemUtil.CloseProcessByName(Process.Name)
                        Report Done,"系统出现"&UCase(prcessName)&"进程异常","该进程已经使用函数KillProcess强行关闭!"
                End If
        Next
        Set Process = Nothing
        Set objWMIService = Nothing
End Sub
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2011-1-12 11:21:47 | 只看该作者
怎么下载不了
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2011-1-24 14:52:14 | 只看该作者
谢谢楼主,好东西啊
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2011-1-24 20:54:11 | 只看该作者
谢谢楼主分享
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2011-4-1 16:01:41 | 只看该作者
谢谢楼主!!
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2011-4-1 16:01:51 | 只看该作者
谢谢楼主!!
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2011-4-6 12:46:26 | 只看该作者
谢谢啦,呵呵,正想以后走自动化测试的道路呢
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2011-5-16 10:39:05 | 只看该作者
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2011-5-17 08:18:49 | 只看该作者

null

不错,saffron本身是个不错的框架,提高了编写的速度,但是对象层没有分离,维护还是个问题,而且真正用在项目中很多地方还需要二次改造。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-7-13 14:04
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]测试排长

    15#
    发表于 2011-5-17 11:41:17 | 只看该作者
    顶楼上的。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-25 12:11 , Processed in 0.084766 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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