51Testing软件测试论坛

标题: 觉得 QTP 的 Exist 方法不好用的人进来,有解决方案了(只适合高手) [打印本页]

作者: intothehit    时间: 2007-3-2 11:58
标题: 觉得 QTP 的 Exist 方法不好用的人进来,有解决方案了(只适合高手)
大家在用 QTP 的时候是不是感觉用 Exist 方法在判断窗体是否存在时运行很慢,因为需要等待若干秒,这种情况感觉很不爽,昨天在整理 sincky 教的脚本时突然发现了一个好用的函数就是 FindWindow,这个函数的原型如下

HWND FindWindow(  LPCTSTR lpClassName, // class name
                              LPCTSTR lpWindowName // window name);

第一个参数是窗口的类名,第二个参数是窗口的标题名称,通常我们都知道窗口的标题,即第二个参数,但是不知道第一个参数,但是我发现了一个很好用的工具就是 SPY++,用它可以获得窗口的类名

如果找到所想要的窗口,此函数的返回值是该窗口的句柄,否则返回 0
于是我们只要判断此函数的返回值是否等于 0 就行了,在 QTP 中只要加入一下代码,就可以调用该函数了

Extern.Declare micHwnd,"FindWindow","user32","",micString,micString

这样执行效率高多了,这里我只是提供了一种想法,也亲手测试过了,如果高手觉得不好,请指明,谢谢

[ 本帖最后由 intothehit 于 2007-3-2 16:13 编辑 ]
作者: ebuluo    时间: 2007-3-2 13:02
支持一下
作者: xiaonan    时间: 2007-3-2 17:41
恩,支持一下.
作者: hiyizhiyu    时间: 2007-3-2 17:47
多谢分享
up
作者: SueR    时间: 2007-3-3 05:05
测web的时候exist不好用怎么办?
作者: Jimmyshao    时间: 2007-3-4 16:40
这个是判断窗体,button怎么办?
作者: michaelyung    时间: 2007-3-5 11:17
QTP 的spy也可以看到class name的。和Spy++的效果一样
作者: intothehit    时间: 2007-3-5 11:35
原帖由 michaelyung 于 2007-3-5 11:17 发表
QTP 的spy也可以看到class name的。和Spy++的效果一样


这个我也考虑过,但是毕竟调用的是 WIN api,所以还是用 MS 的工具比较保险
作者: loho1968    时间: 2007-3-5 13:17
原帖由 intothehit 于 2007-3-5 11:35 发表


这个我也考虑过,但是毕竟调用的是 WIN api,所以还是用 MS 的工具比较保险


如果同类窗口,又同名呢?
作者: 重新开赌    时间: 2007-3-5 14:07
这个帖子适合高手,未免免为其难
作者: intothehit    时间: 2007-3-5 15:54
原帖由 重新开赌 于 2007-3-5 14:07 发表
这个帖子适合高手,未免免为其难


我已经不止一次地听到这种意见了,提这种意见的人说明他还是个测试新手,你没看到大家提了很多问题吗,这说明调用 Windows api 是带有隐患的(如果你不知道是什么隐患的话,说明你还是个菜鸟)且具有局限性的,函数虽然简单,但是只有经验丰富的人才能把握好尺度(什么时候该用,什么时候不用),对于初学者和对编程理解不深以及缺少测试经验的人来说还是不用为妙

[ 本帖最后由 intothehit 于 2007-3-5 16:20 编辑 ]
作者: HenryKing    时间: 2007-3-6 17:38
exist慢?
当你要判断的object不存在时,它会等待,等待时间由一个同步时间(testing->run里面,默认好像是20s)控制,觉得慢可以调整这个时间。
当然,要考虑其他语句对这个时间的要求。
作者: xiaoningln    时间: 2007-3-8 13:23
sdlkfj2
作者: intothehit    时间: 2007-3-8 19:01
原帖由 HenryKing 于 2007-3-6 17:38 发表
exist慢?
当你要判断的object不存在时,它会等待,等待时间由一个同步时间(testing->run里面,默认好像是20s)控制,觉得慢可以调整这个时间。
当然,要考虑其他语句对这个时间的要求。



我用的是 QTP 9.0 ,没找到你说的这个选项,请指明
作者: 重新开赌    时间: 2007-3-9 17:14
原帖由 intothehit 于 2007-3-5 15:54 发表


我已经不止一次地听到这种意见了,提这种意见的人说明他还是个测试新手,你没看到大家提了很多问题吗,这说明调用 Windows api 是带有隐患的(如果你不知道是什么隐患的话,说明你还是个菜鸟)且具有局限性 ...



呵呵,你对API掌握了解多少?高手从来不说自己是高手,懂么?我虽然不是高手,但是就怎么VB Script简单调用windows api 函数,也叫高手,你未必太小看测试人员,要么就是太高估自己了。
作者: intothehit    时间: 2007-3-9 19:10
原帖由 重新开赌 于 2007-3-9 17:14 发表



呵呵,你对API掌握了解多少?高手从来不说自己是高手,懂么?我虽然不是高手,但是就怎么VB Script简单调用windows api 函数,也叫高手,你未必太小看测试人员,要么就是太高估自己了。



你咋不明白我的意思呢,我不是说会掉用 API 就是高手,我是说在自动化测试中使用 API 是有风险的,初学者或经验不多的人使用的话会给测试脚本本身带来缺陷,至少我是发现了一些.
PS:请你提一些有建设性的意见,不要老是捣乱
作者: studping    时间: 2007-4-16 23:24
.................说实话,感觉你这样还没EXIST好用。。
EXIST就判断对象不存在的时候慢点但绝对放心可用。。。
作者: 刀客    时间: 2007-4-17 09:09
给Exist加个等待参数不就可以拉吗
作者: danmy    时间: 2007-4-17 12:02
exist 可是设置等待时间的阿~~ 默认的等待时间在qtp中也可以设置的。不过楼主的方法也值得学习
作者: 厍仕杰    时间: 2007-4-17 12:40
这个世界没有高手和新手 只要你喜欢
作者: messi    时间: 2007-4-17 13:12
吼吼
作者: dcyan    时间: 2007-4-22 14:06
是quicktest professional help里面写错了吧,说Exist(2)带的参数是毫秒级的,于是两秒我们应该写成Exist(2000)
其实参数是秒级的,如果我们设了2000,就会等2000秒,设成2就不慢了,2秒找不到对象就自动执行下面一步了
作者: caigua    时间: 2007-4-24 10:28
Exist(n)里的n就是秒级的,你要不想等可以设成Exist(0)
没有觉得慢过
作者: kakamissyou    时间: 2009-10-15 20:52
标题: 有点水平,但感觉比较能忽悠的那种。
原帖由 intothehit 于 2007-3-9 19:10 发表



你咋不明白我的意思呢,我不是说会掉用 API 就是高手,我是说在自动化测试中使用 API 是有风险的,初学者或经验不多的人使用的话会给测试脚本本身带来缺陷,至少我是发现了一些.
PS:请你提一些有建设性的意见,不要 ...


有点水平,但感觉比较能忽悠的那种。
作者: lijinshui    时间: 2009-10-16 14:38
我也觉得QTP里面带的Exist方法有点笨笨的
作者: gjay1688    时间: 2009-10-16 16:51
尽量使用软件自身提供的比较好,不好用的时候自己来写
作者: dabeixiong    时间: 2009-10-16 22:57
-.-! 倒是见过这种方法,但是没普及起来...技术上来讲不错,但是自动化本来成本就高~整的这么多花里胡哨的东西不好维护啊~

而且兄弟们我说咱搞技术的没那么多是是非非吧~好好的帖子搞成是非贴了...无语
作者: heqingbluesky    时间: 2009-10-19 10:55
这个帖子也提供了一种解决方法,方法多了,可以选择合适自己的一种。

学习了。




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