shiwomyw 发表于 2006-9-7 10:57:45

关于函数obj_find_text()???

obj_find_text ( object, string, result_array [, search_area[, string_def ] ] );在对象里返回字符串的位置;
具体用在什么情况下?怎么用?看完注释后不太明白,能举一个例子说明一下吗?

生如火花 发表于 2006-9-7 11:15:57

在屏幕上截一个区域的字符放到变量里

shiwomyw 发表于 2006-9-7 12:33:10

#参数定义,调用脚本的参数在脚本属性中已经设定,故这里只是用作说明
#static objName;        #对象名称
#static strFlag;                    #要查询内容的对应标记字符
#static nUp;                                #向上移动次数
#static nDown;          #向下移动次数
#static nLeft;                        #向左移动次数
#static nRight;                        #向右移动次数
#返回要查询内容的对应标记字符的单元格的左上角和右下角坐标
        obj_find_text(objName,strFlag,coord_array,TRUE);
#将鼠标点击要查询内容的对应标记字符
        obj_mouse_click (objName, coord_array, coord_array, LEFT);
#按照设定,用键盘移动焦点到所需查询的字符的单元格

        #上移
        for (FUp = 0; FUp < nUp; FUp++)
                obj_type (objName,"<kUp_E>");
        #下移
        for (FDown = 0; FDown < nDown; FDown++)
                obj_type (objName,"<kDown_E>");
        #左移
        for (FLeft = 0; FLeft < nLeft; FLeft++)
                obj_type (objName,"<kLeft_E>");
        #右移
        for (FRight = 0; FRight < nRight; FRight++)
                obj_type (objName,"<kRight_E>");
       

#复制要查询的字符       
        obj_type (objName,"<kCtrl_L-kAlt_L-kc>");

        。。。。。。。。。。。。。。。(后面的省略)

        我现在在看别人写的脚本,在另一个脚本中调用了这个脚本,并传了参数,如下
rc1 = call_close "e:\\\\测试\\\\001" ("说明信息","AA",0,0,0,1);
我现在不明白的是:rc1 = call_close "e:\\\\测试\\\\001" ("说明信息","AA",0,0,0,1);中("说明信息","AA",0,0,0,1)这些信息都传到指定脚本中的哪个变量?是传给我给出绿色标记的函数吗?
还有为什么调用一个脚本还可以传参数?
第一行注释,红色标记的是什么意思?

[ 本帖最后由 shiwomyw 于 2006-9-7 12:40 编辑 ]

shiwomyw 发表于 2006-9-11 09:11:33

我的贴子不要沉下去,问题还没解决呢?

kolecat 发表于 2006-9-11 17:48:44

你贴的代码中并没有看到 rc1 的影子啊

shiwomyw 发表于 2006-9-11 18:01:10

我贴的代码是一个被调用的脚本(比如命名为001),不涉及rc1,
rc1 = call_close "e:\\\\测试\\\\001" ("说明信息","AA",0,0,0,1);这句代码是主脚本中的,调用了001,可是传的参数我弄不明白??

kolecat 发表于 2006-9-11 19:14:31

我觉得有可能是 传递的是 注释中 objName   strFlagnUpnDown   nLeftnRight   这六个参数, 因为从个数和类型上看是匹配的。但是为什么是三个0和一个1我就不知道了。如果是0的话,那循环语句不就执行不起来了?

shiwomyw 发表于 2006-9-11 22:03:34

kolecat,你好!传的参数的意义我明白,就像你说的一样它是在一个object中找到一个标志位然后再向上向下向左向右移动光标,(0,0,0,1)代表的只向右移动光标一次。
我不明白,这些参数传到我所给出的代码,都传给了谁,个数都对不上,对应关系也对不上,我看不懂。
如果传给obj_find_text(objName,strFlag,coord_array,TRUE);,这里只有四个参数,而rc1 = call_close "e:\\\\测试\\\\001" ("说明信息","AA",0,0,0,1);传的是六个参数,不明白??

kolecat 发表于 2006-9-12 11:25:35

call_close 的 定义是 invokes a test from within a script and close the testwhen the test is completed   
原型是 call_close   test_name ();

我觉得对应的参数是 "e:\\\\测试\\\\001"对应 test_name ;   " 说明信息"对应 objName参数 ;"AA"对应strFlag参数 ; 剩下 四个0,0,0,1 分别对应了nUp/nDown/nLeft/nRight 四个参数;

我的理解是你的脚本中 cal_close语句传递的6个参数 是传递给 "e:\\\\测试\\\\001" 这个 test的,是给整个test调用的, 并不是传给 obj_find_text函数的(虽然obj_find_text函数也用到了objName 和strFlag这两个参数),所以两者之间参数数目是对不上的,就是你说的一个是4个参数,一个是6个参数问题。

不知道我有没有理解错你的问题

shiwomyw 发表于 2006-9-12 13:38:51

kolecat!我明白你说的意思 了,现在问你一个问题,为什么我可以把这6个参数传给test整个脚本,而这个脚本不是一个函数,参数关系是如何对应的?我对编程了解的比较少,在我印象中只对函数可以传参数的??

shiwomyw 发表于 2006-9-21 13:51:41

最近又把这段脚本仔细看了一下,大概明白了。

#脚本001#
#static objName;        #对象名称
#static strFlag;                    #要查询内容的对应标记字符
#static nUp;                                #向上移动次数
#static nDown;          #向下移动次数
#static nLeft;                        #向左移动次数
#static nRight;                        #向右移动次数
#返回要查询内容的对应标记字符的单元格的左上角和右下角坐标
        obj_find_text(objName,strFlag,coord_array,TRUE);
#将鼠标点击要查询内容的对应标记字符
        obj_mouse_click (objName, coord_array, coord_array, LEFT);
#按照设定,用键盘移动焦点到所需查询的字符的单元格

        #上移
        for (FUp = 0; FUp < nUp; FUp++)
                obj_type (objName,"<kUp_E>");
        #下移
        for (FDown = 0; FDown < nDown; FDown++)
                obj_type (objName,"<kDown_E>");
        #左移
        for (FLeft = 0; FLeft < nLeft; FLeft++)
                obj_type (objName,"<kLeft_E>");
        #右移
        for (FRight = 0; FRight < nRight; FRight++)
                obj_type (objName,"<kRight_E>");
       

#复制要查询的字符       
        obj_type (objName,"<kCtrl_L-kAlt_L-kc>");
#打开记事本       
        system ("notepad");
        win_restore ( "Notepad" );
        type("<kCtrl_L-kv>");
        set_window("Notepad", 1);
        obj_get_text("Notepad_Edit", text);        # "notepad"
        win_close("Notepad");
       
#记事本_1
    win_activate ("记事本");
    set_window ("记事本", 0);
    button_press ("记事本_否(N)");

    treturn text;

#脚本001结束#

rc1 = call_close "e:\\\\测试\\\\001" ("说明信息","AA",0,0,0,1);

关键在'treturntext ',返回给主调用脚本的文本内容;我试过了如果换成‘ return text ’就通不过。
哪位能把 treturn 和return 的区别介绍一下吗?

kolecat 发表于 2006-9-21 16:33:04

嗯,这个嘛,包括你上次问我的问题, 都可以在 Mercury WinRunner User's Guide 里面找到。在programming with TSL 部分的 calling tests 章。

我个人理解就是 TSL言语并不像我们通常学习的C语言之内的那样,虽然是类似C语言,但是TSL也有自己的特有的一些东西,比如说 winrunner自带的资料原文中就是用 callstatement , 而不是 call function 。 所以我们在使用过程并不用太在意是不是只有函数才能接受参数之类问题,是不是符合我们以往我们所学的知识。只要能满足我们的应用就可以了。

treturn 帮助中是这样写的:
    thetreturnstatement terminates execution of the called test and returns control to the calling test .

treturn是 用来返回 call 语句返回值的, 而return不是,前者多出来一个"t"前缀我想是用来专门标识该返回的是一个test 的返回值。 所以你用 return代替 是 treturn是不可行的

shiwomyw 发表于 2006-9-21 16:40:23

非常感谢!kolecat!看来我还是应该硬着头皮去看英文帮助的。这真是一件不容易的事儿!!!哈哈

kolecat 发表于 2006-9-21 17:24:46

呵呵,我也是开这金山词霸看文章,习惯了就好,good luck!
页: [1]
查看完整版本: 关于函数obj_find_text()???