51Testing软件测试论坛

标题: 【已解决】QTP录制过程中遇到的问题 [打印本页]

作者: chenkunlong    时间: 2010-2-1 15:33
标题: 【已解决】QTP录制过程中遇到的问题
在录制一个客服端的软件,在主页面上有个选项页,实际点击的时候是一个个的按钮,录制时的脚本也是判断为Button,但回放里却无法识别到,用Spy查看时,整个选项面却是一个整体的对像,如图,不知道如何解决,才能识别到里面的按钮(和实际的操作相同)

[ 本帖最后由 yujie6832 于 2010-2-3 15:45 编辑 ]
作者: yujie6832    时间: 2010-2-1 15:49
针对你这句话,我的判断是:
是不是类似于BS架构的FRAME?你的BUTTON是在FRAME下面的,现在你脚本里没有,所以识别不到,应该如:
BROWSERS()。PAGE().FRAME().WEBBUTTON。CLICK
举例FRAME只是个例子
作者: chenkunlong    时间: 2010-2-1 16:03
是CS端的软件,有一个地方我特别不明白,就是用Spy查看的时候,如图1,整个页签是一个整体,无法识别到各个按钮,但实际使用的时候却是一个个按钮,问了开发,也说是按钮,这样我就无法添加对象了~~
作者: yujie6832    时间: 2010-2-1 16:06
先打开QTP再打开软件
作者: chenkunlong    时间: 2010-2-1 16:08
是这样操作的,先开QTP,再开软件
作者: yujie6832    时间: 2010-2-1 16:20
能想办法截个图嘛?你指的那个“整体”
作者: chenkunlong    时间: 2010-2-1 16:23
如图1,用spy查看时,会把整个当做一个整体
作者: yujie6832    时间: 2010-2-1 16:25
再对对准,对准那个BUTTON,我看你的手指没对准
作者: chenkunlong    时间: 2010-2-1 16:29
一样的,下面是两次得到的具体属性图
作者: 浪少    时间: 2010-2-1 16:31
是不是JVS写的啊? 如果是,装个JAVA插件试试,如果能够SPY到单个按钮的属性,可以描述性编程。实在不行,用土办法X Y坐标click
作者: yujie6832    时间: 2010-2-1 16:37
原帖由 浪少 于 2010-2-1 16:31 发表
是不是JVS写的啊? 如果是,装个JAVA插件试试,如果能够SPY到单个按钮的属性,可以描述性编程。实在不行,用土办法X Y坐标click

土方法显然不针对楼主碰到的问题
回复楼主:我先友情帮顶了,呵呵
作者: chenkunlong    时间: 2010-2-1 17:04
原帖由 浪少 于 2010-2-1 16:31 发表
是不是JVS写的啊? 如果是,装个JAVA插件试试,如果能够SPY到单个按钮的属性,可以描述性编程。实在不行,用土办法X Y坐标click


用虚拟对象录制是可以的,但是不好用,也不好维护,所以想解决下,看看常规方法能不能录制,代码是用VB写的,继续等待~~~
作者: yujie6832    时间: 2010-2-1 17:09
原帖由 chenkunlong 于 2010-2-1 17:04 发表


用虚拟对象录制是可以的,但是不好用,也不好维护,所以想解决下,看看常规方法能不能录制,代码是用VB写的,继续等待~~~

恩,虚拟对象不是一个好办法,再顶下,等待高手
作者: chenkunlong    时间: 2010-2-2 09:00
UP UP  UP   UP  继续等待高手来解决~
作者: chenkunlong    时间: 2010-2-2 13:58
  今天没人参与讨论啊~~~高手呢~~~~~~~~
作者: lelecong    时间: 2010-2-2 22:28
从报错信息来看,QTP未能识别该button对象,尝试将button中的window id删除,然后添加text标识,再运行看看~~ QTP新人,不行别拍
作者: chenkunlong    时间: 2010-2-3 11:47
标题: 回复 16# 的帖子
按你的方法试了下,还是不行
作者: zzxxbb112    时间: 2010-2-3 12:26
这种情况我也碰到过,大多数都是在CS中碰到,从你的情况来看,基本是没有什么解决方法的,因为所有控件都被包在一个容器对象中而且非常严实,QTP无法对此容器对象进行解析,因此无法识别子对象。

不过可以试试QTP的隐藏方法:     .ClickOnText  "首页"
作者: zzxxbb112    时间: 2010-2-3 12:28
或者可以尝试下快捷键来解决~~~
作者: yujie6832    时间: 2010-2-3 12:32
原帖由 zzxxbb112 于 2010-2-3 12:26 发表
这种情况我也碰到过,大多数都是在CS中碰到,从你的情况来看,基本是没有什么解决方法的,因为所有控件都被包在一个容器对象中而且非常严实,QTP无法对此容器对象进行解析,因此无法识别子对象。

不过可以试试QTP ...

这个隐藏方法学习了,呵呵~用法:字如其名
作者: lantianwei    时间: 2010-2-3 13:47
标题: 回复 12# 的帖子
VB插件有加载吗??
如果加载了还不行 那么可以自己开发插件 步骤是打开工具条进程 申请虚拟内存 发送WINDOWS消息(该实例可用TB_GETITEMRECT) 然后读取虚拟内存里的特定内容 (这里为按钮的坐标) 释放内存 实现点击
上面的CLICKONTEXT()也是好办法 一般使用不会有问题 但可能在多语言平台下会有点问题 因为利用的是OCR机制 需要字体库支持
还有点相对坐标也行 因为即使变了 改动也很小 所谓简单既是美
作者: zzxxbb112    时间: 2010-2-3 14:48
lantianwei说的没错,的确CLICKONTEXT方法是通过OCR机制来实现点击,个人感觉其实不是很稳定,就算是在字体库都支持的情况下,况且还有可能出现相同的情况,是个没有办法的办法,一般情况不会去使用。。。

还有发送WINDOW消息只是个调用windows API的过程,充其量是一个动态链接库,和插件开发还是两个概念,此方法虽然是个可行的办法,但我觉得没有必要大费周折,看此程序的样子很多地方都需要调API,况且最重要的是,虽然lantianwei版主说的已经很详细了,但我能保证提问者还是没有看懂说了什么,如果提问者办法都试过还是不行,我还是同意lantianwei最后的观点,简单即是美,固定下测试机即可,呵呵~~
作者: chenkunlong    时间: 2010-2-3 14:50
标题: 回复 18# 的帖子
Dialog("***").WinEdit("企业账号:").Set "qhtkftext"
Dialog("***").WinEdit("登录密码:").Type  micTab
Dialog("***").WinEdit("登录密码:").SetSecure "4b691b0991eb006fdf471efc12b8e74b5b852533607f"
Dialog("***").WinButton("登 录(L)").Click
Dialog("***").WinButton("Button").ClickON Text "管理"
Dialog("***").WinButton("Button_2").Click
Dialog("***").Dialog("#32770").WinButton("确定").Clic


如上代码红色处那样改么?会报错哟   Expected statement
作者: zzxxbb112    时间: 2010-2-3 14:52
LS写错了,是clickontext,中间没有空格
作者: chenkunlong    时间: 2010-2-3 14:53
原帖由 lantianwei 于 2010-2-3 13:47 发表
VB插件有加载吗??
如果加载了还不行 那么可以自己开发插件 步骤是打开工具条进程 申请虚拟内存 发送WINDOWS消息(该实例可用TB_GETITEMRECT) 然后读取虚拟内存里的特定内容 (这里为按钮的坐标) 释放内存 实现点击 ...



确实看不懂~~ 刚接触QTP不久,很多东西都不懂,学习ing....版主能给详细说下不?或者有相关材料推荐下也行~~~
作者: yujie6832    时间: 2010-2-3 14:54
既然楼上两位牛人在,那小弟就不献丑了,感叹一句,你们知道的隐藏方法真多,哈哈
得了,我也去下载VS2008,以后开始加强调试脚本,了解更多隐藏BOSS,额,打错了,是隐藏方法
作者: chenkunlong    时间: 2010-2-3 14:56
还是不行~~~~
作者: yujie6832    时间: 2010-2-3 15:00
原帖由 chenkunlong 于 2010-2-3 14:53 发表



确实看不懂~~ 刚接触QTP不久,很多东西都不懂,学习ing....版主能给详细说下不?或者有相关材料推荐下也行~~~

1、调用 WINDOWS API,在QTP中可以通过Extern保留对象来调用,免费给个地址:http://blog.csdn.net/zzxxbb112/archive/2009/12/10/4980858.aspx
2、开发插件叫SDK,百度搜索下,ZZXXBB112出过视频,或者看其他的
3、蓝天伟说的VB有加载吗,是指VB的插件(默认就有)有没有加载,说不定加载了就解决了
4、本人也要露一下,强烈推荐方法:用WSCRIPT.SHELL或DEVICE.REPLAY模拟键盘操作进行你那个东西的操作,前提是:你的这些按钮支持快捷键

看懂了吗?帮你分解阅读下

[ 本帖最后由 yujie6832 于 2010-2-3 15:03 编辑 ]
作者: zzxxbb112    时间: 2010-2-3 15:01
原帖由 chenkunlong 于 2010-2-3 14:56 发表
还是不行~~~~


Dialog对象下尝试下
作者: chenkunlong    时间: 2010-2-3 15:06
谢谢楼上几位的讨论~~~继续学习....不过暂时只能做虚拟对象喽,项目马上要开始了,先用着吧,持续关注~~
作者: chenkunlong    时间: 2010-2-3 15:08
标题: 回复 28# 的帖子
嗯,看懂了  可以用快捷键的

[ 本帖最后由 chenkunlong 于 2010-2-3 15:12 编辑 ]
作者: yujie6832    时间: 2010-2-3 15:11
原帖由 chenkunlong 于 2010-2-3 15:06 发表
谢谢楼上几位的讨论~~~继续学习....不过暂时只能做虚拟对象喽,项目马上要开始了,先用着吧,持续关注~~

别做虚拟对象,真的不咋地~。。。。。。。如果你的那些按钮支持快捷键,请用我提供的最后一条方法,保险牢靠的多,如果不支持快捷键,此贴将会继续。。。
作者: zzxxbb112    时间: 2010-2-3 15:22
原帖由 chenkunlong 于 2010-2-3 15:08 发表
嗯,看懂了  可以用快捷键的


强烈建议用快捷键,呵呵~~~否则移植脚本会很麻烦~~~~
作者: yujie6832    时间: 2010-2-3 15:27
原帖由 chenkunlong 于 2010-2-3 15:08 发表
嗯,看懂了  可以用快捷键的

那还犹豫什么?用啊~
作者: chenkunlong    时间: 2010-2-3 15:33
    终于可以了~~~使用WSCRIPT.SHELL,用快捷键打开想要点击的界面:

Dim wshShell
Set wshShell = CreateObject("Wscript.Shell")
wshShell.SendKeys "{i}"

小结下:1. 思路比方法重要..
              2. 对于脚本这块还有好多要学习的.不懂的东西还很多呢
              3. 多多讨论~~向高人学习~~
              4. 暂时没了.......
作者: yujie6832    时间: 2010-2-3 15:38
恭喜,恭喜,终于可以了,哈哈~思路的确很重要,至少要举一反三,最好能举一反十
作者: lantianwei    时间: 2010-2-3 15:46
标题: 回复 25# 的帖子
给你段代码 能实现点击 但很不完善,如果要用需要自己好好改改。
void TB_Click(HWND hTB, int iIndex)
{
        RECT rt;
        unsigned long pid;
        long res;
        HANDLE process;
        POINT *lP;

        GetWindowThreadProcessId(hTB, &pid);
        process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, pid);
        lP=(POINT*)VirtualAllocEx(process, NULL,1000,MEM_COMMIT, PAGE_READWRITE);
        SendMessage(hTB, TB_GETITEMRECT, iIndex,&lP);
        ReadProcessMemory(process, lP, &rt, sizeof(rt), NULL);
        VirtualFreeEx(process, lP, 0, MEM_RELEASE);
        CloseHandle(hTB);
        SetCursorPos(rt.left,rt.top);
        SendMessage(hTB, WM_LBUTTONDOWN, MK_LBUTTON,MAKELONG(rt.left,rt.top));
        SendMessage(hTB, WM_LBUTTONUP, MK_LBUTTON,MAKELONG(rt.left,rt.top)) ;
}

不过没啥必要自己开发 太复杂了 也有点小难度 特别对代码不敏感的朋友 还是用最简单的好

[ 本帖最后由 lantianwei 于 2010-2-3 15:47 编辑 ]
作者: kickgod    时间: 2010-2-10 12:15
简单既是美!!!!经典,...受用!!




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