lijinshui 发表于 2009-5-16 12:32:55

关于解决分辨率变化的简单的笨办法

记得我曾经问过,现在再一次发起

脚本做好以后,一旦分辨率改变以后,很多关于坐标的操作都出错了,因为坐标已经改变了,不知道大家有没有碰到过,或者已经解决了,请大家给个建议
最后我有一个简单的笨办法,个人来讲不太满意,以后再贴出来,先听听大家的意见:handshake

[ 本帖最后由 lijinshui 于 2009-5-16 12:34 编辑 ]

lantianwei 发表于 2009-5-16 15:09:03

用WINDOWS API函数实现最高效,可以用这两个函数EnumDisplaySettings ,ChangeDisplaySettings

jadeyu712 发表于 2009-5-16 15:11:24

版主很强,但是不知道具体的情况。

lijinshui 发表于 2009-5-16 17:01:43

原帖由 lantianwei 于 2009-5-16 15:09 发表 http://bbs.51testing.com/images/common/back.gif
用WINDOWS API函数实现最高效,可以用这两个函数EnumDisplaySettings ,ChangeDisplaySettings
恳请斑竹给个简单的小例子呗,感谢感谢:handshake

lijinshui 发表于 2009-5-16 17:15:42

我其实不是想调节分辨率,只是我的脚本运行环境是可以变化的,比如我编写脚本里面的分辨率是1024X724,点击了一个坐标(250,456)可以打开一个窗口,,脚本运行的机器分辨率是1600X1200的话点击坐标(250,456),可能就不可以打开那个窗口了,有没有一个函数可以换算坐标,比如 在分辨率是1024X724的坐标(250,456),乘一个系数后就可以得到分辨率是1600X1200的相应的坐标值

shanxi 发表于 2009-5-16 19:49:58

原帖由 lijinshui 于 2009-5-16 17:15 发表 http://bbs.51testing.com/images/common/back.gif
我其实不是想调节分辨率,只是我的脚本运行环境是可以变化的,比如我编写脚本里面的分辨率是1024X724,点击了一个坐标(250,456)可以打开一个窗口,,脚本运行的机器分辨率是1600X1200的话点击坐标(250,456),可能就不可 ...

每次脚本运行之前的初始化过程,设置分辨率为统一。
如果QTP/VBS/WMI没有封装相应的函数,引用windows api实现。
分辨率仅仅是自动化过程中很微不足道的一点,并不需要投入太多的精力去换算。

ls_721521 发表于 2009-5-16 20:13:40

为什么要用低级录制呢?我感觉只有万不得已才用坐标的。。。
但如果非要用坐标录制还不如不做自动化,说明这个系统不适合自动化或者这个自动化工具不适合这个系统。

lantianwei 发表于 2009-5-16 20:39:59

回复 4# 的帖子

我说的只是种思路,实现这个功能主要用到2点:通过API函数编写一个DLL(功能源码网上一大片,要做的就是将其改写成DLL形式的);将该DLL导入到QTP中,然后就可以调用了。我这里没有QTP的环境,要不就帮你写个了。但按照这种思路,肯定就能实现这种功能。:)

lantianwei 发表于 2009-5-16 20:45:49

回复 5# 的帖子

用动态获得坐标应该会解决这一问题

shanxi 发表于 2009-5-18 14:24:31

原帖由 ls_721521 于 2009-5-16 20:13 发表 http://bbs.51testing.com/images/common/back.gif
为什么要用低级录制呢?我感觉只有万不得已才用坐标的。。。
但如果非要用坐标录制还不如不做自动化,说明这个系统不适合自动化或者这个自动化工具不适合这个系统。

用坐标似乎很常见吧。比如鼠标单击事件,如果你不用低级录制,你用QTP的其它录制,它录制下来的结果就不会有坐标吗?

wuei9090 发表于 2009-5-18 14:27:30

原帖由 ls_721521 于 2009-5-16 20:13 发表 http://bbs.51testing.com/images/common/back.gif
为什么要用低级录制呢?我感觉只有万不得已才用坐标的。。。
但如果非要用坐标录制还不如不做自动化,说明这个系统不适合自动化或者这个自动化工具不适合这个系统。


确实感觉用坐标录制很低级
这样的话可以考虑换工具或者这部分不做自动化了

wuei9090 发表于 2009-5-18 14:28:23

原帖由 shanxi 于 2009-5-18 14:24 发表 http://bbs.51testing.com/images/common/back.gif


用坐标似乎很常见吧。比如鼠标单击事件,如果你不用低级录制,你用QTP的其它录制,它录制下来的结果就不会有坐标吗?


单击事件可以看具体点击哪个对象然后该对象.click   如果这个对象都不识别。。确实不太适合了

shanxi 发表于 2009-5-18 14:47:15

原帖由 wuei9090 于 2009-5-18 14:28 发表 http://bbs.51testing.com/images/common/back.gif



单击事件可以看具体点击哪个对象然后该对象.click   如果这个对象都不识别。。确实不太适合了

明白你说描述的,你这样录制回放时,必定是需要查找该控件,找到后才能自动化它。局限性也存在于此。
实际有些操作,比如Drag & Drop 是非得需要坐标来回放的。

fei.ge 发表于 2009-5-18 14:48:35

持续关注此贴

ziheng198688 发表于 2009-6-8 14:59:52

原帖由 lantianwei 于 2009-5-16 20:45 发表 http://bbs.51testing.com/images/common/back.gif
用动态获得坐标应该会解决这一问题
我也感觉动态获得坐标是不错的方法

dreamever 发表于 2009-6-8 15:15:59

原帖由 ziheng198688 于 2009-6-8 14:59 发表 http://bbs.51testing.com/images/common/back.gif

我也感觉动态获得坐标是不错的方法
同意。
我目前的做法是,在操作一个测试对象前,首先对这个对象的坐标进行判断,看是否在屏幕范围内,如果不在,则调整滚动条(我的测试界面中只处理滚动条即可),直到测试对象出现为止,然后再执行相关的操作。

onlonely 发表于 2009-6-9 08:45:20

用GetROProperty获取对象的相对坐标再单击了.如下面这个函数就是我用来对那些识别效果不是很好的对象编写的函数.
'*******************************************************************
'函数说明:针对WEB类的页面对于特别的无法完全识别,但是能识别部分属性的做单击操作
'参数1:NotKnow_Object:不能完全识别的对象
'返回值:无
'*******************************************************************
Function Click_NotKnow(NotKnow_Object)
Do
If NotKnow_Object.exist Then
   NotKnow_Object.FireEvent "onfocus"
   wait 1
   NotKnow_Object_x=NotKnow_Object.GetROProperty("x")
   NotKnow_Object_y=NotKnow_Object.GetROProperty("y")
   Window("regexpwndtitle:=Microsoft Internet Explorer").WinObject("regexpwndclass:=Internet Explorer_Server").Click NotKnow_Object_x,NotKnow_Object_y
   wait 1
   Exit Function
End If
Loop
End Function

meiguishijun 发表于 2009-6-9 10:27:58

:( :( :( 高手好多啊。得努力。
页: [1]
查看完整版本: 关于解决分辨率变化的简单的笨办法