51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

12
返回列表 发新帖
楼主: chenkunlong
打印 上一主题 下一主题

[原创] 【已解决】QTP录制过程中遇到的问题

[复制链接]

该用户从未签到

21#
发表于 2010-2-3 13:47:54 | 只看该作者

回复 12# 的帖子

VB插件有加载吗??
如果加载了还不行 那么可以自己开发插件 步骤是打开工具条进程 申请虚拟内存 发送WINDOWS消息(该实例可用TB_GETITEMRECT) 然后读取虚拟内存里的特定内容 (这里为按钮的坐标) 释放内存 实现点击
上面的CLICKONTEXT()也是好办法 一般使用不会有问题 但可能在多语言平台下会有点问题 因为利用的是OCR机制 需要字体库支持
还有点相对坐标也行 因为即使变了 改动也很小 所谓简单既是美
回复 支持 反对

使用道具 举报

该用户从未签到

22#
发表于 2010-2-3 14:48:43 | 只看该作者
lantianwei说的没错,的确CLICKONTEXT方法是通过OCR机制来实现点击,个人感觉其实不是很稳定,就算是在字体库都支持的情况下,况且还有可能出现相同的情况,是个没有办法的办法,一般情况不会去使用。。。

还有发送WINDOW消息只是个调用windows API的过程,充其量是一个动态链接库,和插件开发还是两个概念,此方法虽然是个可行的办法,但我觉得没有必要大费周折,看此程序的样子很多地方都需要调API,况且最重要的是,虽然lantianwei版主说的已经很详细了,但我能保证提问者还是没有看懂说了什么,如果提问者办法都试过还是不行,我还是同意lantianwei最后的观点,简单即是美,固定下测试机即可,呵呵~~
回复 支持 反对

使用道具 举报

该用户从未签到

23#
 楼主| 发表于 2010-2-3 14:50:56 | 只看该作者

回复 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
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2010-2-3 14:52:57 | 只看该作者
LS写错了,是clickontext,中间没有空格
回复 支持 反对

使用道具 举报

该用户从未签到

25#
 楼主| 发表于 2010-2-3 14:53:38 | 只看该作者
原帖由 lantianwei 于 2010-2-3 13:47 发表
VB插件有加载吗??
如果加载了还不行 那么可以自己开发插件 步骤是打开工具条进程 申请虚拟内存 发送WINDOWS消息(该实例可用TB_GETITEMRECT) 然后读取虚拟内存里的特定内容 (这里为按钮的坐标) 释放内存 实现点击 ...



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

使用道具 举报

该用户从未签到

26#
发表于 2010-2-3 14:54:12 | 只看该作者
既然楼上两位牛人在,那小弟就不献丑了,感叹一句,你们知道的隐藏方法真多,哈哈
得了,我也去下载VS2008,以后开始加强调试脚本,了解更多隐藏BOSS,额,打错了,是隐藏方法
回复 支持 反对

使用道具 举报

该用户从未签到

27#
 楼主| 发表于 2010-2-3 14:56:56 | 只看该作者
还是不行~~~~

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

该用户从未签到

28#
发表于 2010-2-3 15:00:29 | 只看该作者
原帖由 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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

29#
发表于 2010-2-3 15:01:34 | 只看该作者
原帖由 chenkunlong 于 2010-2-3 14:56 发表
还是不行~~~~


Dialog对象下尝试下
回复 支持 反对

使用道具 举报

该用户从未签到

30#
 楼主| 发表于 2010-2-3 15:06:00 | 只看该作者
谢谢楼上几位的讨论~~~继续学习....不过暂时只能做虚拟对象喽,项目马上要开始了,先用着吧,持续关注~~
回复 支持 反对

使用道具 举报

该用户从未签到

31#
 楼主| 发表于 2010-2-3 15:08:33 | 只看该作者

回复 28# 的帖子

嗯,看懂了  可以用快捷键的

[ 本帖最后由 chenkunlong 于 2010-2-3 15:12 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

32#
发表于 2010-2-3 15:11:38 | 只看该作者
原帖由 chenkunlong 于 2010-2-3 15:06 发表
谢谢楼上几位的讨论~~~继续学习....不过暂时只能做虚拟对象喽,项目马上要开始了,先用着吧,持续关注~~

别做虚拟对象,真的不咋地~。。。。。。。如果你的那些按钮支持快捷键,请用我提供的最后一条方法,保险牢靠的多,如果不支持快捷键,此贴将会继续。。。
回复 支持 反对

使用道具 举报

该用户从未签到

33#
发表于 2010-2-3 15:22:55 | 只看该作者
原帖由 chenkunlong 于 2010-2-3 15:08 发表
嗯,看懂了  可以用快捷键的


强烈建议用快捷键,呵呵~~~否则移植脚本会很麻烦~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

34#
发表于 2010-2-3 15:27:06 | 只看该作者
原帖由 chenkunlong 于 2010-2-3 15:08 发表
嗯,看懂了  可以用快捷键的

那还犹豫什么?用啊~
回复 支持 反对

使用道具 举报

该用户从未签到

35#
 楼主| 发表于 2010-2-3 15:33:11 | 只看该作者
    终于可以了~~~使用WSCRIPT.SHELL,用快捷键打开想要点击的界面:

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

小结下:1. 思路比方法重要..
              2. 对于脚本这块还有好多要学习的.不懂的东西还很多呢
              3. 多多讨论~~向高人学习~~
              4. 暂时没了.......
回复 支持 反对

使用道具 举报

该用户从未签到

36#
发表于 2010-2-3 15:38:12 | 只看该作者
恭喜,恭喜,终于可以了,哈哈~思路的确很重要,至少要举一反三,最好能举一反十
回复 支持 反对

使用道具 举报

该用户从未签到

37#
发表于 2010-2-3 15:46:09 | 只看该作者

回复 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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

38#
发表于 2010-2-10 12:15:32 | 只看该作者
简单既是美!!!!经典,...受用!!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-26 22:46 , Processed in 0.076925 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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