WinRunner中进行数字比较
sdlkfj7
脚本语言如下:
x=1942.8;
y=1942.80;
if (x==y)
发现判断结果总是假,哪位高手知道为什么?怎么解决呢? 本来就不相等啊!小数点位数都不一样 我得到的判断结果是真, 没有出现你说的情况.
请问你IF 语句后面的判断结果是什么?
WinRunner中进行数字比较
麻烦看下脚本,使用的是flight4a程序原脚本如下:
table10 = "lesson10.xls";
rc = ddt_open(table10, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
pause("Cannot open table.");
ddt_get_row_count(table10,table10_RowCount);
for(table10_Row = 1; table10_Row <= table10_RowCount; table10_Row ++)
{
ddt_set_row(table10,table10_Row);
# Flight Reservation
set_window ("Flight Reservation", 3);z
menu_select_item ("File;Open Order...");
# Open Order
set_window ("Open Order", 1);
button_set ("Order No.", ON);
edit_set ("Edit", ddt_val(table10,"order_num"));
button_press ("OK");
wait(1);
# Flight Reservation
set_window ("Flight Reservation", 5);
edit_get_text("Tickets:",tickets);
edit_get_text("Price:",price);
edit_get_text("Total:",total);
price = substr(price,2);
total = substr(total,2);
wait(1);
x = price*tickets;
if (x==total) #运行时,x是1942.8,而total是1942.80,所以判断结果总为假,执行else。但在数字上看是相等的啊
tl_step("total",0,"total is right,"tickets"乘以"price"总计"total"");
else
tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total“");
}
ddt_close(table10);
[ 本帖最后由 ch_800806 于 2006-10-12 15:53 编辑 ] 你用的是什么版本的,我的是7.6的,我试了试也没问题,判断结果为真,没问题
你的脚本里 tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total“");
}这是多余的吧
[ 本帖最后由 piao_604 于 2006-10-12 15:14 编辑 ] 你可以用index或者match函数来做!!!
WinRunner中进行数字比较
不好意思的确是多了一个反括号( })对于下面语句,
我希望它执行的是 tl_step("total",0,"total is right,"tickets"乘以"price"总计"total"");而不是tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total“");
我估计你执行的是tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total“");
可以看下我执行的结果(在附件中),另外我有的是8.2的版本
if (x==total) #运行时,x是1942.8,而total是1942.80,所以判断结果总为假,执行else。但在数字上看是相等的啊
tl_step("total",0,"total is right,"tickets"乘以"price"总计"total"");
else
tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total“"); 你出现上书结果,我想x和totaly应该不是1942.8和1942.80,
所以我想你可以用
pause(x); pause(tatal);
查看 X 和 tatal 的具体值.
WinRunner中进行数字比较
已测试,x是1942.8 total是1942.80另外,你写的 pause(tatal);应该是 pause(total);吧?
原帖由 小李美刀 于 2006-10-12 17:21 发表
你出现上书结果,我想x和totaly应该不是1942.8和1942.80,
所以我想你可以用
pause(x); pause(tatal);
查看 X 和 tatal 的具体值. 确实没有问题,请看我的脚本与结果,结果见附件!继续关注,希望能弄明白!sdlkfj2
脚本如下:
# Flight Reservation
win_restore ("Flight Reservation");
set_window ("Flight Reservation", 2);
menu_select_item ("File;New Order");
menu_select_item ("File;Open Order...");
# Open Order
set_window ("Open Order", 1);
button_set ("Order No.", ON);
edit_set ("Edit", "3");
button_press ("OK");
# Flight Reservation
set_window ("Flight Reservation", 3);
menu_select_item ("File;Fax Order...");
# Fax Order No. 3
set_window ("Fax Order No. 3", 6);
edit_get_text("# Tickets:",tickets);
edit_get_text("Ticket Price:",price);
edit_get_text("Total:",total);
m=tickets*price;
report_msg("m==="&m);
report_msg("total==="&total);
if (m==total)
tl_step("total",0,"total is right");
else
tl_step("total",1,"total is not right");
button_press ("Cancel");
WinRunner中进行数字比较
hi,piao_604你的脚本中Ticketsprice和Total是在Fax order窗口中取的,在我的脚本是在Flight Reservation窗口中取的
两者是有区别的,如图
多了符号"$",所以在我的脚本中先用substr()函数先去掉$,再相乘得到total值是1942.8,而取出来的total值在
去掉$符号后,就是1942.80,两者用==比较不相等,而在数学上应该相等,要不然写这个脚本就没有意义
原帖由 piao_604 于 2006-10-13 09:56 发表
确实没有问题,请看我的脚本与结果,结果见附件!继续关注,希望能弄明白!sdlkfj2
脚本如下:
# Flight Reservation
win_restore ("Flight Reservation");
set_window ("Flight Reservat ... 我觉得和在哪个窗口里取的值没关系,最重要的是if (m==total)这个的判断,m=642.4, total=642.40, 比较结果确实为真,另外即使是按你的方法,我也是执行通过没有问题的,难不成真和版本有关系?sdlkfj2还有一个方法就是全部转换成int, if(int(m)==int(total)),这样应该没问题,就是比较的准确性差了,会把小数点后面的位数都给略了。
WinRunner中进行数字比较
要不把你的msn告诉我,我把脚本和Gui文件传给你。看看是不是winruuner的版本问题我的msn:grgchu@hotmail.com
原帖由 piao_604 于 2006-10-13 14:07 发表
我觉得和在哪个窗口里取的值没关系,最重要的是if (m==total)这个的判断,m=642.4, total=642.40, 比较结果确实为真,另外即使是按你的方法,我也是执行通过没有问题的,难不成真和版本有关系?sdlkfj2还有一个方 ...
WinRunner中进行数字比较
想到以下解决办法,但是对于在我的例子中数字比较时为什么不能用==,而要用compare_text()。搞不懂啊,希望有人知道,告诉我一声table10 = "lesson10.xls";
rc = ddt_open(table10, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
pause("Cannot open table.");
ddt_get_row_count(table10,table10_RowCount);
for(table10_Row = 1; table10_Row <= table10_RowCount; table10_Row ++)
{
ddt_set_row(table10,table10_Row);
# Flight Reservation
set_window ("Flight Reservation", 3);z
menu_select_item ("File;Open Order...");
# Open Order
set_window ("Open Order", 1);
button_set ("Order No.", ON);
edit_set ("Edit", ddt_val(table10,"order_num"));
button_press ("OK");
wait(1);
# Flight Reservation
set_window ("Flight Reservation", 5);
edit_get_text("Tickets:",tickets);
edit_get_text("Price:",price);
edit_get_text("Total:",total);
price = substr(price,2);
total = substr(total,2);
wait(1);
x = price*tickets;
total=total*1;
if (compare_text(x,total))
tl_step("total",0,"total is right,"tickets"乘以"price"总计"total"");
else
tl_step("total",1,"total is wrong,"tickets"乘以"price"总计不是"total"而是"x"");#比较total和x值的不同
}
ddt_close(table10); 1.我用的是V7.6,用if(x==total)是可以运行通过的;
2.compare_text()是按照字符串进行比较的。可以通过的原因是:在执行完 total=total*1;
后,total后面的“ 0 ”已经被截掉了,所以可以通过。
页:
[1]