51Testing软件测试论坛

标题: winrunner无法截得位图的验证点 [打印本页]

作者: dionysus    时间: 2006-11-19 12:11
标题: winrunner无法截得位图的验证点
录制程序插入检测bitmap的验证点,代码:obj_check_bitmap("Insert Done...", "Img5", 1);
回放的时候WR停止在这里并报出:
Bitmap verification failed.
Error: No expected image

Image name: "Img5:1"
Object name: "Insert Done..."
在GUI中有“Insert Done...”这个对象,报错应该是没有找到预期结果的位图,这是什么原因造成的呢?如果插入验证点正常的话,这个位图应该在WR中的哪里可以看到?谢谢
PS:这个脚本是被另一个脚本调用的,单独执行这个脚本时有时可以回放通过,有时回放失败。但通过调用回放却总是失败。困惑
作者: shiwomyw    时间: 2006-11-19 15:45
1.WR中预期结果的位图放在脚本所在目录下的'exp'文件下。
2.如果单独运行这个脚本可以成功,那说明所要检查的位图是存在的。被调用不成功,是不是因为你的脚本中储如定位窗口的语句,没有,或给的等待时间不够长,比如“set_window("xxx",5)”,可以试试把5改成10。
楼上的,试试吧,不知道能不能解决问题。。。。。
作者: dionysus    时间: 2006-11-19 17:53
谢谢楼上的回复,我在脚本的exp文件夹下找到了这些图片,并且在检查语句前加入了wait语句设置较长的时间用来等待,但是仍然提示没有找到预期图片,很奇怪
作者: wuzhuayu    时间: 2006-11-19 21:11
lz误解了shiwomyw 的意思吧。加上wait语句肯定不行,她是说让加set_window啊。wait的话,winrunner是做等待操作的啊,并不会去寻找窗口啊。
作者: gp_jl    时间: 2006-11-19 22:04
将 obj_check_bitmap("Insert Done...", "Img5", 1); 修改为  obj_check_bitmap("Insert Done...", "Img5", 100); 试试
作者: dionysus    时间: 2006-11-20 10:13
今天又试验了一下,发现问题所在了。我试验的程序就是WR8.2里自带的例子程序flight4a,先把我的脚本贴出来大家看一下吧:
主脚本:main
GUI_close_all();
if(GUI_load(".\\flight gui.gui")!=0)
{
report_msg("gui load error");
}
else
{
report_msg("gui load ok");
}

if(invoke_application("D:\\Program Files\\Mercury Interactive\\WinRunner\\samples\\flight\\app\\flight4a.exe","","",SW_SHOW)!=0)
{
report_msg("app start error");
}
else
{
report_msg("app start ok");
}
call ".\\flight"();
被调用的脚本:flight
# Login
set_window ("Login", 8);
edit_set ("Agent Name:", "mercury");
password_edit_set("Password:", "kzptnyoslzjsaz");
button_press ("OK");

# Flight Reservation
set_window ("Flight Reservation", 7);
edit_set ("Date of Flight:", "11/25/06");
list_select_item ("Fly From:", "Denver");  # Item Number 0;
list_select_item ("Fly To:", "Los Angeles");  # Item Number 2;
obj_mouse_click ("FLIGHT", 34, 25, LEFT);
# Flights Table
set_window ("Flights Table", 2);
list_select_item ("Flight", "4725   DEN   07:45 AM   LAX   08:43 AM   USA   $127.20"); # Item Number 1;
button_press ("OK");
# Flight Reservation
set_window ("Flight Reservation", 5);
edit_set ("Name:", "yangmh");
edit_set ("Tickets:", "2");
button_press ("Insert Order");

obj_check_bitmap("Insert Done...", "Img1", 100);
当我录制完这段程序后回放仍然提示找不到预期图片,check等待时间也设置的足够长。后来我查看截图在文件夹里保存的路径,发现main和flight两个脚本文件夹下都有exp\flight文件夹,但是只有flight的exp\flight下面有img1,于是我想是不是因为程序在这里检查去main\exp\flight下搜索了呢?我把img1复制到main\exp\flight\下再次运行脚本通过。
问题算是解决了,但我不知道为什么在执行flight脚本的时候程序不是找该脚本下的exp文件夹,反而去找主脚本的exp,是不是我应该载哪里设置一下?
作者: picture    时间: 2006-11-20 11:44
标题: 不知道这样理解对不对
你是用main去调用flight的是吧,那应该说脚本在执行的时候还是在操作MAIN这个文件里的东西的,也就是说,只要你执行obj_check_bitmap()这个函数,里面的IMG图它是去到自己的EXP下去找的,至于flight下有IMG那是因为你是在创建FLIGHT的时候插入的图片检查点,所以那个图片的文件在FLIGHT下,要是你在主程序里自己手动插入一个图片检查点,那产生的IMG文件肯定在自己的EXP里,你可以试一下
作者: dionysus    时间: 2006-11-20 14:09
找到方法可以解决了,其实挺简单,就是在子脚本中插入验证点后,在主脚本用updata模式回放一遍,这时子脚本exp下的图片就自动复制到主脚本的exp下了。以后回放就不会有错了。
作者: gp_jl    时间: 2006-11-20 23:02
标题: 回复 #6 dionysus 的帖子
我使用的是 WR V7.6。
按照你的代码我跑了一下没有发现问题,在main和flight的exp文件夹中都有 img1。我的步骤是:
1。先录制 flight 脚本,调通;
2。编写 main 脚本;
3。回放,通过。
作者: dionysus    时间: 2006-11-21 09:07
原帖由 gp_jl 于 2006-11-20 23:02 发表
我使用的是 WR V7.6。
按照你的代码我跑了一下没有发现问题,在main和flight的exp文件夹中都有 img1。我的步骤是:
1。先录制 flight 脚本,调通;
2。编写 main 脚本;
3。回放,通过。

我按照你说的顺序使用8.2做了一下,仍然提示没有找到预期图片,不管我在flight脚本中插入验证点后使用什么模式回放,img图片都不能自动复制到main的exp下,只有在main脚本使用updata回放才可以。比较奇怪的
作者: ruben78    时间: 2006-11-21 17:17
是啊...我曾经也遇到类似问题,但是我的处理方法:是将Flight脚本中的img图片拷到main的exp下,今天感谢dionysus 我又学到了一种方法.
作者: shiwomyw    时间: 2006-11-22 14:12
在看论坛的贴子时发现了另一个解决的办法,在settings->general options->run下把“run in batch mode”勾选上,运行就可以通过。这样如果在主脚本中所调用的脚本有检查点等,都 不 会在当前主脚本下找,而去被调用的脚本中找。
作者: ruben78    时间: 2006-11-22 14:26
yea...终于的找到我要的方法,谢谢shiwomyw 提供的解决方法
作者: cybercop    时间: 2006-11-30 14:39
原帖由 shiwomyw 于 2006-11-22 14:12 发表
在看论坛的贴子时发现了另一个解决的办法,在settings->general options->run下把“run in batch mode”勾选上,运行就可以通过。这样如果在主脚本中所调用的脚本有检查点等,都 不 会在当前主脚本下找, ...

这个方法对于我这样的新手帮助太大了,而且也解决了相对路径和绝对路径的问题。太好的方法。新手必学,呵呵。




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