51Testing软件测试论坛

标题: 如何从cb的第三方控件Tmemo中获取字符串(或文本内容) [打印本页]

作者: liuhuascanf    时间: 2007-7-10 19:16
标题: 如何从cb的第三方控件Tmemo中获取字符串(或文本内容)
获取tmemo这个控件中的内容我一直都没有搞定,通过了不同的方式
obj_get_text();
obj_get_info();
。。。。

见插图,灰色部分“资料校验:该号码不存在或者已被占用”,和窗体下面的白色部分的内容都是在tmemo控件中
请问这种控件该如何获取
或者有没有其他方式获取里面的值?
麻烦各位高人给个解答,不胜感谢!

插图见附件

[attach]28954[/attach]
作者: liuhuascanf    时间: 2007-7-11 09:28
自己顶下先,怎么没人来回答呢?
这个问题对高手来说很难么?
作者: dionysus    时间: 2007-7-11 11:44
lz先用gui spy查看一下这个弹出框的属性,感觉应该是win_get_text之类的函数可以
作者: liuhuascanf    时间: 2007-7-11 14:46
{
class: object,
MSW_class: TMemo,
location: 0
}

昨天忘说了,是obj对象,靠win_get_text是取不出来的
作者: lantianwei    时间: 2007-7-12 12:31
估计是取不出来了
作者: liuhuascanf    时间: 2007-7-12 19:54
肯定有办法的,如果这些字符串都取不出来,mi顺带着hp一起公司关掉算了!
作者: liuhuascanf    时间: 2007-7-14 00:56
小研究了下,自己写了个函数,通过把字符串读入记事本,把问题搞定了
1.定义一个test:a,目录 "D:\\wr\\a",
2.a中新增gui文件 a.gui,被learn的对象有"系统通知","记事本"的窗体
3.定义函数 tmemo_get_text(out text,guiFile),函数如下:

public function tmemo_get_text(out text,guiFile){

        GUI_close_all();
        GUI_load("D:\\wr\\a\\a.gui"); #Load the GUI file
       
        if(win_exists("系统通知")==E_OK){
                if(obj_exists("TMemo_1")==E_OK){
                        win_activate("系统通知");
                        set_window("系统通知");                       
                        obj_type ("TMemo_1","<kDown_E><kDown_E><kHome_E><kS_End_E><kCtrl_L-c>"); #仅需获取最后一行内容
                       
                        invoke_application("notepad.exe","","C:\\WINDOWS\\system32\\",SW_SHOW);
                        win_activate ("无标题 - 记事本");
                        set_window ("无标题 - 记事本", 1);
                        obj_type ("Edit","<kCtrl_L-v>");
                        edit_get_text("Edit",text);
                        obj_type ("Edit","<kCtrl_L-z><kAlt_L-kF4>");
                       
                        win_activate("系统通知");
                        set_window("系统通知");               
                }
                else{
                        text="There's no such control named Tmemo_1 !";
                        report_msg(text);
                }
        }
       
        else{
                text="There's no such window which you need !";
                report_msg(text);
        }
       
        GUI_close_all();
        GUI_load(guiFile);
};

在b 的test中调用:
GUI_close_all();
GUI_file=getvar("testname")&"\\b.gui";
GUI_load(GUI_file);

call "d:\\wr\\a"();
win_activate("系统通知");
set_window("系统通知");       

tmemo_get_text(text,GUI_file);
report_msg(text);       

从而获取了tmemo中的字符串,欢迎各位高手帮忙改进函数实现方式,小弟是新手,目前只会用这种比较老土的方法
作者: dionysus    时间: 2007-7-14 15:39
obj_type ("TMemo_1","<kDown_E><kDown_E><kHome_E><kS_End_E><kCtrl_L-c>"); #仅需获取最后一行内容
这一行前面部分的键盘操作是什么意思?后面是一个复制的快捷键
另:强烈支持lz的这种自我解决问题的方法,自己编写函数以适应产品特性,加精!
作者: liuhuascanf    时间: 2007-7-14 20:45
哈哈哈,难得发一篇帖子就拿了精华,激动ing!感谢版主!
obj_type ("TMemo_1","<kDown_E><kDown_E><kHome_E><kS_End_E><kCtrl_L-c>");
这一行代码主要是针对我们自己的产品设计的,就我们的产品中,TMemo_1内部的提示信息有且只有3行
<kDown_E><kDown_E>表示将光标定位到TMemo_1上时候,将光标再往下移动2行,以保证取到的值肯定是最后一行
<kHome_E>表示将光标定位到行首home键,<kS_End_E>就是shift+end键,这两个键组合就是把这一行内容全部取到,最后复制下就ok了!
hoho,再次感谢版主,我想以后会有更多的精华贴出现的sdlkfj5
作者: lantianwei    时间: 2007-7-16 09:14
学习了。。。。佩服
作者: kolecat    时间: 2007-7-16 11:23
想法挺新颖,不错




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