QTP编程小知识

来源:互联网 发布:python 时间序列模型 编辑:程序博客网 时间:2024/06/07 23:10
QTP编码小知识:本文转自http://lyg5623.blog.163.com/blog/static/53274011200891911126654/【QTP编码小知识 一】 在这里先给大家看看一下代码: if browser("百度一下").page("百度一下").webbutton("百度一下").exist(0) and _ browser("百度一下").page("百度一下").webbutton("百度一下").object.disabled and _ browser("百度一下").page("百度一下").webbutton("百度一下").object.visible then browser("百度一下").page("百度一下").webbutton("百度一下").click end if 自然,如果学过编程的人,会觉得,恩,这样写很正常,但是没有怎么学过的人,他或者会写成这样 if browser("百度一下").page("百度一下").webbutton("百度一下").exist(0) then if browser("百度一下").page("百度一下").webbutton("百度一下").object.disabled then if browser("百度一下").page("百度一下").webbutton("百度一下").object.visible then browser("百度一下").page("百度一下").webbutton("百度一下").click end if end if end if 你学习过了编程,知道了,如果and的条件,如果有一个否,哪么就全部为否,自然是这个是逻辑条件的问题,你有学过,所以 你写成2个and的方法去简略代码。但问题往往发生在这里,就和变魔术一样,大人看不出,但小孩就可以看出里面的问题,因为大人 的思想会被自己所谓的经验所左右。 这段代码的错误地方发生在那里,估计读到这里的人大部分已经猜到了,错误会发生在第1片中的2 3行!!你会问为什么?这应 该没错菜对的呀?不存在它就条不进行点击了么?但不存在时候,其实QTP会去判断and的其他2个条件,因为webbutton的不存在,导致 了object不能使用,所以在这里会出现报错的情况。 首先说下QTP它在 逻辑判断这块的处理,有人说,如果and其中第一个条件是假的,哪么判断就直接跳出去了,对,没错,这个 是针对某些语言而言,但是QTP自己在使用VBS中,自己又加了点手脚,或者是VBS自己本身就存在这样的问题。 这些也都是在实际编码过程中会发现的问题,大家慢慢积累,让自己的代码出现更少的BUG,哈哈,感觉好像在做白盒测试。 【QTP 编码小知识 二】大家看看下面代码,代码是运行在谷歌的主页面,如果大家要试的话,大家同样也可以试试这代码的运行结果。 Dim LinkDes Set LinkDes=description.Create() LinkDes("html tag").value="A" Set LinkObj=browser("Google").Page("Google").ChildObjects(LinkDes) For i=0 to LinkObj.count LinkObj(i).click browser("Google").Back Next 代码运行完后,你会发现,原来在循环第2次连接点击的时候,抛出了一个“General run error”。这个是为什么会这样?之前也同样有论坛的朋友问到这样的问题,所以今天就在这里提到。 问题是出在了对第一个连接点击后,做了返回操作所导致的,在第一次back的时候,LinkObj对象就已经丢失了,失效了。所以你在做第2次操作的时候,LinkObj(i)就已经找不到了,因此它会出错。 正确的方法,这个也是我目前想到的,或者还有其它达人能做更好的方法出来。 Dim LinkDes Set LinkDes=description.Create() LinkDes("html tag").value="A" Set LinkObj=browser("Google").Page("Google").ChildObjects(LinkDes) For i=0 to LinkObj.count Set LinkObj=browser("Google").Page("Google").ChildObjects(LinkDes) LinkObj(i).click browser("Google").Back Next 【QTP编码小知识 三 IE内存释放】 【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中最强的一个,它几乎可以模拟所有的你想要的操作,至于真的有多强大,你下载小编给你们的文档看看它的所谓参数就知道。 好了,打开任务管理器,瞧瞧结果,别乐坏了。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq超市金币满了怎么办 旋转轮胎2车翻了怎么办 轮胎里面卡进小石子应该怎么办 手游吃鸡模拟器已经到达上限怎么办 逆战场手游模拟器黑屏怎么办 欧洲卡车2翻车了怎么办 卧式注塑机锁模久了打不开怎么办 欧洲卡车2困了怎么办 欧卡2没油了怎么办 欧卡2车卡住了怎么办 欧卡2车子卡住了怎么办 做题手感变差怎么办 吃鸡游戏掉帧怎么办 买了俄区游戏怎么办 战地1子弹用完了怎么办 1kb彩信点开了怎么办 玩地球末日卡顿怎么办 电脑显示不亮了怎么办 电脑玩游戏显卡停止运行怎么办 ie浏览器打开就停止工作怎么办 蝙蝠侠阿甘骑士卡顿怎么办 捷豹钥匙没电了怎么办 车钥匙没电 汽车报警怎么办 东西卡在门锁里怎么办 锁芯里面有东西怎么办 有东西卡在锁里怎么办 锁里面卡了牙签怎么办 塑料卡在锁里怎么办 门锁被牙签堵了怎么办 锁子里面卡东西怎么办 东西卡在锁里怎么办 开车门碰到旁边车门怎么办 美团退款后 物品怎么办 倒车影像是反的怎么办 荒野行动cp版玩着玩着关机怎么办 王者荣耀点击开始游戏就闪退怎么办 电脑遥控游玩ps4画面抖动怎么办 ps4特典不能用了怎么办 苹果x出现的分屏怎么办 电脑注册表文件丢失或损坏怎么办 cad绘图反应很慢怎么办