51Testing软件测试论坛

标题: 高手请进! [打印本页]

作者: lousia    时间: 2004-12-24 16:52
标题: 高手请进!
有一个程序启动时,有一个静态文本,根据情况的不同,静态文本会有三种情况,做不同的事情
1.无任何文本
2.显示"could contact sever"
3.显示" network connectivity lost"
我的要求是,
              如果无显示,无操作.
               如果显示"could contact sever",把文字could contact sever写入report,重新启动程序.
               如果显示"network connectivity lost",把文字network connectivity lost写入report,重新启动程序
请大家来帮忙啊
MSN:lousia_qian@hotmail.com
作者: lousia    时间: 2004-12-26 00:01
Originally posted by lousia at 2004-12-24 04:52 PM:
有一个程序启动时,有一个静态文本,根据情况的不同,静态文本会有三种情况,做不同的事情
1.无任何文本
2.显示"could contact sever"
3.显示" network connectivity lost"
我的要求是,
   ...

研究了一天,终于写了下面程序,可还是不对,这是我第一次不用录制方法在winrunner写程序.不知道哪里错了,给我点建议吧
for(i=1;i<=3;i++)
{
invoke_application("C:\\Program Files\\TelTel\\TelTel.exe","","C:\\Program Files\\TelTel\\",SW_RESTORE);
wait(15);
if(obj_exists(Button_9 ,5)!=E_OK)
{
# No text was found
set_window("TelTel Beta", 1);
obj_get_text("(static)", text);
if(text=="Could not contact server."||text=="Network connectivity lost.")
{
report_msg(i);
report_msg(text);
call "D:\\winrunnerTSLdownload\\test case\\exit"();
}
}
else
{
report_msg(i);
report_msg("success");
call "D:\\winrunnerTSLdownload\\test case\\exit"();
}
}


comment:if(obj_exists(Button_9 ,5)!=E_OK) #如果运行成功,用butten按钮作为判断检查,如果button不存在,检查一个LABLE上的text,根据文字的不同做不同的操作,
做这个程序的意图是:
运行TELTEL.我正常启动 teltel 登陆时remember me  check,tip of the day not check 如果网络情况正常,登陆成功,如果网络不正常,推出程序,重新启动.

TELTEL下载地址: www.teltel.com
请斑竹一定要帮帮我啊.
作者: QA_BAY    时间: 2004-12-26 22:41
由于我实在打不开你的那个TELTEL!
所以只能拿MSN试了一下可以的!
那三种情况你只能自己写条件了!
这个是自己的初步!
供你参考一下!


static app_name="C:\\Program Files\\MSN Messenger\\msnmsgr.exe";
        if(invoke_application(app_name,"","",SW_SHOW)!=0) # 如果程序不存在则退出测试
        {
                report_msg("如果测试的程序不存在,测试退出.");  # 返回一个提示信息
                texit;
# MSN Messenger (BETA)
        set_window ("MSN Messenger (BETA)", 0);
        obj_mouse_click ("DirectUIHWND", 145, 190, LEFT);

# 登录到 .NET Messenger Service - MSN Messenger (BETA)
        set_window ("登录到 .NET Messenger Service - MSN Messenger (BETA)", 9);
        password_edit_set("密码(P):", "lbziwmz");
        button_press ("确定");
    wait(12);
# MSN Messenger (BETA)
        set_window("MSN Messenger (BETA)", 14);
        obj_check_bitmap("DirectUIHWND_1", "Img2", 1);
        set_window ("MSN Messenger (BETA)", 2);
        obj_check_info("DirectUIHWND_1","enabled",1,10);
        rc=obj_mouse_click ("DirectUIHWND_1", 130, 75, LEFT);
        if (rc = E_OK)
                        {
                          report_msg("用户名验证", PASS, "正常登陆");
                          texit;
                                 }
                else
                        {
                           report_msg("用户名验证", FAIL, "不正常登陆");
                           win_close("MSN Messenger (BETA)");
                                                              }
然后再统计有多少成功和不成功
作者: shyfish    时间: 2004-12-27 09:40
你的obj_get_text是录制的吧?从
# No text was found
set_window("TelTel Beta", 1);
obj_get_text("(static)", text);
这三句来看,应该是自动生成的,然后WR自己报说# No text was found,也就是obj_get_text并没有获取到文本,这应该就是问题所在了……
作者: lousia    时间: 2004-12-27 10:35
Originally posted by shyfish at 2004-12-27 09:40 AM:
你的obj_get_text是录制的吧?从
# No text was found
set_window("TelTel Beta", 1);
obj_get_text("(static)", text);
这三句来看,应该是自动生成的,然后WR自己报说# No text was f ...

是用insert-get text-From object/window获得的,你有办法吗?我不知道怎么获得.
作者: QA_BAY    时间: 2004-12-27 11:21
你要看LOGIN之前与之后有什么驱别,这样就可以做到你想要的500次了!
作者: lousia    时间: 2004-12-27 12:09
Originally posted by lousia at 2004-12-27 10:35 AM:

是用insert-get text-From object/window获得的,你有办法吗?我不知道怎么获得.

set_window("TelTel Beta", 1);
obj_get_text("{ class: static_text, MSW_id: 2}", text);
if(text=="Could not contact server."||text=="Network connectivity lost.")
我用这个方法来判断的,可以正常通过,也实现了我要的目的
作者: lousia    时间: 2004-12-27 12:18
Originally posted by QA_BAY at 2004-12-26 10:41 PM:
由于我实在打不开你的那个TELTEL!
所以只能拿MSN试了一下可以的!
那三种情况你只能自己写条件了!
这个是自己的初步!
供你参考一下!


static app_name="C:\\Program Files\\MSN Messenger\\msnmsgr. ...


for(i=1;i<=5;i++)
{
invoke_application("C:\\Program Files\\TelTel\\TelTel.exe","","C:\\Program Files\\TelTel\\",SW_RESTORE);
wait(20);
if(obj_exists("Button_1")==E_OK)#用TELTEL程序上出现一个Button_1来判断登陆成功,,这里可能有问题,因为不管登陆成功不成功,obj_exists("Button_1")==E_OK都是否定的,下面的代码永远执行不了,直接调到ELSE去做了,请大家给点建议
{
report_msg(i);
report_msg("success");
wait(2);
invoke_application("D:\\FXProtect\\FXProtect.exe","","D:\\FXProtect",SW_HIDE););#通过调用FXProtect.exe来关闭TELTEL的进程来关闭程序.

wait(5);
}
else
{
set_window("TelTel Beta", 1);
obj_get_text("{ class: static_text, MSW_id: 2}", text);
if(text=="Could not contact server."||text=="Network connectivity lost.")
{
report_msg(i);
report_msg(text);
wait(2);
invoke_application("D:\\FXProtect\\FXProtect.exe","","D:\\FXProtect",SW_HIDE);#通过调用FXProtect.exe来关闭TELTEL的进程来关闭程序.
wait(3);
}
}


}
写了上诉程序,如果出现Could not contact server和Network connectivity lost
能判断出这两种情况了
QA_BAY一定要给点建议啊,你说的
obj_check_bitmap("Online Status", "Img2", 1);
obj_check_info("Online Status","enabled",1,10);
        rc=obj_mouse_click("Online Status", "5", "51", LEFT);
        if (rc = E_OK)
这两条语句我还用不来.obj_check_info("Online Status","enabled",1,10);
        rc=obj_mouse_click("Online Status", "5", "51", LEFT);
作者: lousia    时间: 2004-12-27 12:25
Originally posted by QA_BAY at 2004-12-27 11:21 AM:
你要看LOGIN之前与之后有什么驱别,这样就可以做到你想要的500次了!

我是区别了啊,登陆成功的话,通过屏幕上出现一个Buttom_1.
                  如果Buttom_1,不存在,检查一个文本上写的东西,
作者: QA_BAY    时间: 2004-12-27 12:58
if(obj_exists("Button_1"==E_OK)#用TELTEL程序上出现一个Button_1来判断登陆成功,,这里可能有问题,因为不管登陆成功不成功,obj_exists("Button_1"==E_OK都是否定的,下面的代码永远执行不了,直接调到ELSE去做了,请大家给点建议

刚才下载了TELTEL,还是不行,不知道怎么搞的!
LOING很慢,还有显示network connectivily lost


现在你知道错在哪里的话,那就改一下试试!
If (button_get_info("Button_1","enabled",val)!=E_OK)
        if (val!=0)
   report_msg("i");
   report_msg("success");
   wait(2);
   invoke_application("D:\\FXProtect\\FXProtect.exe","","D:\\FXProtect",SW_HIDE)
button_get_info(返回按钮属性的值)在insert ---funciton---from fuction generator里面.

[ Last edited by QA_BAY on 2004-12-27 at 13:01 ]
作者: shyfish    时间: 2004-12-27 17:54
你的obj_exists("Button_1"==E_OK)这个Button_1是虚拟的按钮吗?如果是,那么无论这个按钮是否存在,obj_exists("Button_1"==E_OK)返回的都是FALSE,即没有找到。如果不是虚拟的,那么这句语句应该是可以正常工作的
作者: lousia    时间: 2004-12-28 01:06
Originally posted by shyfish at 2004-12-27 05:54 PM:
你的obj_exists("Button_1"==E_OK)这个Button_1是虚拟的按钮吗?如果是,那么无论这个按钮是否存在,obj_exists("Button_1"==E_OK)返回的都是FALSE,即没有找到。如果不是虚拟的,那么这句语 ...

我看了一下,确实是这个问题,同一个button每次启动后,名字都会变,一会button_1,一会button_11,一会button_4的,我的窗口上有好几个Button因该怎么处理呢?
于是我用if(obj_exists("{class: push_button,MSW_id: 1002}")!=E_OK)来判断,它还是找不到,我该怎么处理呢?同样性质的问题,我用set_window("TelTel Beta", 1);
obj_get_text("{ class: static_text, MSW_id: 2}", text);
if(text=="Could not contact server."||text=="Network connectivity lost.")
能正常判断,我想可能是static_text的原因,但是这个Button,怎么来判断呢?
作者: QA_BAY    时间: 2004-12-28 08:17
如果是BUTTON,那应该可以把MSW_ID去掉,
你可以这样,在EDIT MAP GUI 里面看一下BOTTON这个的属性!看一下有没有MSW_ID.如果有就要到GUI CONFIGURATION那里去掉!
这就MSW_ID就不会变来变去的啦!
作者: shyfish    时间: 2004-12-28 09:23
呵呵,如果显示为button_1或button_11并在变化的就说明它能够正确识别成按钮,而你也没有把它做成虚拟控件了。而不成功的原因是它的ID一直在变了,自然每次都找不到了,用楼上版主的方法吧,如果不行再加一个location的属性看一下可不可以
作者: lousia    时间: 2004-12-28 10:48
Originally posted by lousia at 2004-12-24 04:52 PM:
有一个程序启动时,有一个静态文本,根据情况的不同,静态文本会有三种情况,做不同的事情
1.无任何文本
2.显示"could contact sever"
3.显示" network connectivity lost"
我的要求是,
   ...

这个问题最终还是解决了,我找到了一个登陆成功的Tip of the day窗口来判断.
if(win_exists("Tip of the day")==E_OK) 问题解决了,老板要的结果得到了.
作者: QA_BAY    时间: 2004-12-28 11:32
问题解决,非常开心!
工资不会给老板扣掉是不是应该拿出一部分出来请大家吃饭呢?哈哈哈
作者: lousia    时间: 2004-12-28 12:12
Originally posted by QA_BAY at 2004-12-28 11:33 AM:
问题解决,非常开心!
工资不会给老板扣掉是不是应该拿出一部分出来请大家吃饭呢?哈哈哈

好啊,你哪天来上海和我说一下.
作者: lousia    时间: 2004-12-28 12:56
Originally posted by QA_BAY at 2004-12-28 08:17 AM:
如果是BUTTON,那应该可以把MSW_ID去掉,
你可以这样,在EDIT MAP GUI 里面看一下BOTTON这个的属性!看一下有没有MSW_ID.如果有就要到GUI CONFIGURATION那里去掉!
这就MSW_ID就不会变来变去的啦!

我是这样修改的,但还是不能判断.
用GUI Spy看出Dial 按钮具有{class: object,MSW_id:MSW_class: Button}
选择Tools->GUI Map Configuration->object->configuration修改把MSW_id去掉后变成{class: object,MSW_class: Button,location: 10},
然后用if (obj_exists("Button_10")==E_OK) 去判别还是不能判断啊???

D:\\pic.jpg
作者: QA_BAY    时间: 2004-12-28 17:34
你要重新录制一下脚本,由于你那个属性的改变不是永久的,
你所做的只是在没有关闭WR之前有效,如果关闭了就无效了,
所以你要做长久的,
就是在起动脚本(LIB)里加两行TSL.
在论坛里有,你找一下吧.

[ Last edited by QA_BAY on 2004-12-28 at 17:36 ]
作者: shyfish    时间: 2004-12-28 17:36
看你的GUI里面那些Button都是object,而不是push_button(图标和class都说明它是object),怎么不是push_button呢?我试过Button(非虚拟的)和static text都可以用obj_exists作出正确的判断
作者: lousia    时间: 2004-12-29 15:03
很奇怪啊:
描述:刚开始learn时同一个BUTTON的属性是{class: object,MSW_id:MSW_class: Button} 通过GUI Map Configuration 把MSW_id去掉后,重新learn,button 的属性变成{class:push_button:location:10  ...}
  我的问题是:1.怎么class从object 变到 push_button了呢?
                  2.同一个button,MSW_id的变化就能说明这个Button是虚拟控件吗?
                  3.如果是虚拟控件是不是不能用obj_exist函数?

PS:Teltel程序是用VC++编写的
作者: shyfish    时间: 2004-12-29 16:46
呵呵,是很奇怪,没碰到过。不过WR增加一些属性倒是很正常的,因为要区别各个控件
1。不知道
2。不能,不是。它都能认出来了,怎么会是虚拟的,虚拟的是自己虚的
3。是,至少我试过的虚拟按钮是这样的,WR主动说obj_exists不支持虚拟控件
作者: lousia    时间: 2004-12-30 16:39
谢谢,
大家再给点建议吧
作者: QA_BAY    时间: 2004-12-30 21:47
Originally posted by lousia at 2004-12-29 03:03 PM:
很奇怪啊:
描述:刚开始learn时同一个BUTTON的属性是{class: object,MSW_id:MSW_class: Button} 通过GUI Map Configuration 把MSW_id去掉后,重新learn,button 的属性变成{class:push_button:location:10  ...}
...

1.你可以试着将OBJECT改成push_button,(你要改一个按钮的属性应该很容易的
就在GUI CONFIGURATION那里改就行啦,)到GUI CONFIGURATION那里去改,
然后COPY前两行到起到脚本里.
当WR一起动时,就把它当成push_button来认,看这种行不行!试一下!
2.不行啦,虚拟控件是自己做的!(建议看说明书第二版)
3.基本像shyfish所说的那样,其它的你可以自己试,(学WR就是这么的幸苦的):d:d:d:d:d:d:d
作者: lousia    时间: 2005-1-6 14:40
谢谢拉。我试试
作者: fei.ge    时间: 2006-12-6 15:18
很完美的解决了一个问题。
向斑竹致敬!




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