51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 13011|回复: 37
打印 上一主题 下一主题

[原创] 【QTP编码小知识 三 IE内存释放】

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-10-7 14:50:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
【QTP编码小知识 三 IE内存释放】
    由于编码小知识出到第三帖,特此帖送出API手册一份,想要会自动化,还离不开Win32 API。
    先说下小编对关于Web内存的一些小看法,之前已经有讨论过关于IE内存占用居高不下,导致了QTP对Web页面的操作出现种种问题。今天和大家说下简单的内存释放方法。首先我们使用的将浏览器最小化然后再做最大化的操作来实现这个释放工作。很多人知道,IE最小化后,内存占用不到2M,最大化后,会比之前最小化前占的内存更少。
    先看下下面的代码,因为QTP中对Browser没有提供最小化的方法,因此我们需要借助window的中的方法:
    hwnd=borwser("...").getroproperty("hwnd")
    window("hwnd:="&hwnd).Minimize
    wait(1)
    window("hwnd:="&hwnd).Maximize
   
    看完小编的这4句代码,很高兴,哇,就这么简单?!慢着,你丢进QTP里面运行看看。打开任务管理器,注意,你可以把wait的时间调长点,你可以看到,原来内存居然是有增无减?然后愤怒的拿着砖头丢过来。
    至于为什么使用了Minimize的方法后仍然无效,这个小编猜想是因为QTP本身并没有真正意义上的最小化。好了,说了哪么多,先来个真的可以做到释放内存的,再看看下面代码:
   Public Function QTP_Release_Memory(hwnd)
        Extern.Declare micVoid ,"SendMessageA","user32.dll","SendMessageA",micHwnd,micInteger,micInteger,micInteger
        SC_MINIMIZE = &HF020&
        SC_MAXIMIZE = &HF030&
        WM_SYSCOMMAND = &H112
        Extern.SendMessageA hwnd,WM_SYSCOMMAND,SC_MINIMIZE,0
        wait 1
        Extern.SendMessageA hwnd,WM_SYSCOMMAND,SC_MAXIMIZE,0
   End Function
     大家会问,你怎么要用Function呢,小编这人比较环保,东西能重用就重用,大家只要把窗口的句柄丢给Function就可以用了,以后都可以在同个项目中用到,下次有时间和大家说说如何把脚本写得重用性更高些。
     这个主要是使用的是Win32API的方法,用SendMessage的方法去实现了最大化最小化。在这里小编偷偷告诉大家,SendMessage称得上是Win32 API中最强的一个,它几乎可以模拟所有的你想要的操作,至于真的有多强大,你下载小编给你们的文档看看它的所谓参数就知道。
     好了,打开任务管理器,瞧瞧结果,别乐坏了。

[ 本帖最后由 假装不在 于 2008-10-7 14:53 编辑 ]

本帖子中包含更多资源

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

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

使用道具 举报

该用户从未签到

38#
发表于 2011-8-16 10:12:26 | 只看该作者
学习,谢谢分享!
回复 支持 反对

使用道具 举报

该用户从未签到

37#
发表于 2011-8-15 17:47:27 | 只看该作者
学习了,谢谢分享!
回复 支持 反对

使用道具 举报

  • TA的每日心情
    擦汗
    2017-5-23 20:24
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    36#
    发表于 2009-12-29 15:42:39 | 只看该作者
    太强了。。完全想不到
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    35#
    发表于 2009-10-15 10:43:55 | 只看该作者

    测试的水太深--我开始畏惧

    才开始认为 测试没有什么技术含量,渐渐的感觉,需要深入了解的地方太多了。楼主说的调用WinApi我基本上都不知道。呵呵
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-9-28 15:35
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    34#
    发表于 2009-10-9 16:24:50 | 只看该作者

    回复 1# 的帖子

    thanks, study
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    33#
    发表于 2009-10-9 14:19:49 | 只看该作者
    老实说,我希望更详细制定sendmessage用法.
    我发送大写A按键,实际上载程序里面,识别的是小写a

    我发送click X,X坐标,实际在程序里面有小量的误差,(估计是相对坐标的起点认为不一致
    )
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    32#
    发表于 2009-9-30 10:37:14 | 只看该作者
    留个脚印,学习下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    31#
    发表于 2009-9-30 10:23:04 | 只看该作者
    学习了,感谢中!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    30#
    发表于 2008-11-3 14:39:01 | 只看该作者
    Win32 API不熟,还没用过它们。@.@
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    29#
     楼主| 发表于 2008-11-3 12:33:26 | 只看该作者
    原帖由 ahkj 于 2008-10-28 10:41 发表
    QTP可以调用外部DLL的嘛,有什么QTP中实现不了的,写个DLL好了。扩展起来也方便。

    怎么实现都可以,管理问题。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    28#
    发表于 2008-10-28 10:41:37 | 只看该作者
    QTP可以调用外部DLL的嘛,有什么QTP中实现不了的,写个DLL好了。扩展起来也方便。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27#
     楼主| 发表于 2008-10-17 09:10:46 | 只看该作者
    这里的hwnd就是那个IE的句柄。
    句柄就是window对某个窗口或者object的唯一标示。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    26#
    发表于 2008-10-17 00:08:16 | 只看该作者
    要用这个function的时候,是直接写call Function QTP_Release_Memory(hwnd) 就好了么?参数hwnd一般要传什么值进去啊?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25#
    发表于 2008-10-16 22:17:18 | 只看该作者
    顶~~~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24#
     楼主| 发表于 2008-10-16 11:17:09 | 只看该作者
    post和send 这2个是差不多的。不过send的方法除非消息处理完毕,否则该函数不会返回。但post就不一样了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    23#
    发表于 2008-10-16 09:38:32 | 只看该作者
    LZ果然厉害
    还有个问题,不知道楼主在使用QTP的过程中,还有哪些地方会用到win31的API函数?
    我记得有人在自动关闭弹出窗口时曾经用到过,好像是postmessage
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22#
     楼主| 发表于 2008-10-15 14:13:14 | 只看该作者
    Extern.Declare micHwnd,"GetMenu","user32.dll","GetMenu",micHwnd
                    |           |          |                  |          |
                    返回值   方法       DLL         方法     输入值
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    21#
    发表于 2008-10-15 12:06:03 | 只看该作者
    原帖由 heqingbluesky 于 2008-10-13 14:29 发表
    假装不在,

    给我一些例子,如何调用API到QTP中,我在这个方面不是很明白,多多指教。


    对这个也比较感兴趣,或者再举几个例子说说哈
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2008-10-13 14:53:21 | 只看该作者

    2

    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-9-25 09:31 , Processed in 0.105720 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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