程文 发表于 2007-7-9 11:35:08

作参数化后的问题.

edit_get_text("Edit",chang);
if(chang<50)
{
        tl_step("chang",1,"out of range");
}

设的参数化数值为:50,150,120,-50,60


"chang"是针对一个编辑框作的参数化内容.编辑框的值域为50-100.已对这个编辑框做了参数化,当为"if(chang<50)"这样的表达时,可以正确判断参数化里的内容,但是如果是if(chang<50||chang>100)这样表达时,运行后,参数化的数值无论是有效值还是非法值,都会报"out of range"这样的错误.


恳请知道的朋友帮忙解答一下.

dionysus 发表于 2007-7-9 21:17:29

在我的机器上试过,没有出现lz所说的问题,搂住试一下chang=60,应该不会执行if里面的语句的

程文 发表于 2007-7-10 10:14:23

版主实在是个热心人.

我录制的情况是这样的,我是先把一个编辑框的数值做了参数化,然后再把
edit_get_text("Edit",chang);
if(chang<50)
{
      tl_step("chang",1,"out of range");
}
这段代码嵌在了参数化的代码里面运作的.

不知道版主对于这样的东西会怎样操作.


实际情况就是.我要对一个数值编辑框做值域验证.所以我的操作是先将编辑框参数化,然后再将编辑框做值域判断.

dionysus 发表于 2007-7-10 10:26:04

你是将chang做了数据驱动是么?将数值都写到Excel表中,之后每次循环取值并进行判断。
现在手边没有WR,只能回家试验,其他高手给看下?

susanmabj 发表于 2007-7-10 13:11:11

你看看你的change是你设置的值么??

shiwomyw 发表于 2007-7-10 14:24:53

if(chang<50)或if(chang<50||chang>100)都是正确的,不会是表达式的原因.楼主能不能再多给些信息,把整个参数化的脚本都贴出来看看.
这里是不是楼主的笔误: tl_step("chang",1,"out of range"); chang是不需要加引号的,否则在报告中不能把对应的值输入出.

wangyin_1007 发表于 2007-7-10 16:01:53

button_set ("开启", ON);
table = "default.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
        pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{

edit_get_text("Edit",chang);
if(chang<50||chang>100);
tl_step("chang",1,"out of range");

        ddt_set_row(table,table_Row);
                edit_set ("Edit", ddt_val(table,"Edit0"));
       
}
ddt_close(table);
        edit_set_selection ("Edit", 0, 0, 0, 5);


这就是那部分的源码.

shiwomyw 发表于 2007-7-11 13:54:29

这部分如果和源码完全相同,有几处错误.
button_set ("开启", ON);
table = "default.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
      pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{

edit_get_text("Edit",chang);
if(chang<50||chang>100); #后边不应是分号,应是大括号"{"
tl_step("chang",1,"out of range"); #chang,不应该加引号,这里它是一个变量

      ddt_set_row(table,table_Row);
                edit_set ("Edit", ddt_val(table,"Edit0"));
      
}
ddt_close(table);
      edit_set_selection ("Edit", 0, 0, 0, 5);


蓝色部分脚本,最好是放在"ddt_set_row(table,table_Row):edit_set("Edit",ddt_val(table,"Edit0"))"后边.

理解你的意图应该是对编辑框的值域进行判断,这样做好象没有达到目的.是不是应对输入非法数值后,程序会如何处理进行判断.比如输入120,程序会弹出提示,WR应该检查它是否弹出正确提示,可以用图片检查点或文本检查点(提示框的信息).

[ 本帖最后由 shiwomyw 于 2007-7-11 14:07 编辑 ]

wangyin_1007 发表于 2007-7-11 20:05:39

shiwomyw 给的解释现在可以在代码里面跑得通,可是我给的即使是值域以外的值,可照样也没有报错.

shiwomyw 按照你的方法后,也没有达到我想要的结果啊.

dionysus 发表于 2007-7-11 22:50:54

button_set ("开启", ON);
table = "default.xls";
rc = ddt_open(table, DDT_MODE_READ);
if (rc!= E_OK && rc != E_FILE_OPEN)
      pause("Cannot open table.");
ddt_get_row_count(table,table_RowCount);
for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
{

edit_get_text("Edit",chang);
if(chang<50||chang>100)
{
   tl_step("chang",1,"out of range");
}
else
{
      ddt_set_row(table,table_Row);
      edit_set ("Edit", ddt_val(table,"Edit0"));
}      
}
ddt_close(table);
      edit_set_selection ("Edit", 0, 0, 0, 5);

lz要达到的是这种效果么?
注意if的语法

wangyin_1007 发表于 2007-7-12 09:45:02

哎,问题终于解决了.书看了好几遍,可到头来还是没按照书上的参照去弄.

太感谢版主和shi MM两位了.加上前后引号后,基本问题就解决了.

但还是有个小小的问题,想请两位帮忙.我按照版主的做法加了else{}这样的语句后,就会对每一个参数进行验证,如果是值域以外的值,那么我这个被测软件会弹出值域对话框.必须手工点确定后,才能往下执行,我要再怎样处理,就能让它执行得流畅呢?

dionysus 发表于 2007-7-12 22:44:12

“如果是值域以外的值,那么我这个被测软件会弹出值域对话框.必须手工点确定后,才能往下执行”
lz是什么意思?

kolecat 发表于 2007-7-13 10:34:35

楼主的意思是 正确的 输入应该是 50~100之间,这样的话我觉得你的if 表达式的条件写错了,应该是大于小值,并且小于大值吧?
我的改法是if(chang<50||chang>100)----------->if (chang>=50&&chang=<100) 。

因为如果按你的写法 if(chang<50||chang>100), 和你预设的值50,150,120,-50,60,我们可以看一下。
如果输入50, 那么chang<50为假,执行或语句,chang>100,也是为假。整个if为假
如果输入正确值60,那么chang<50为假,执行或语句,chang>100也为假,整个if还是为假。
所以我感觉你得条件表达式写的不对。

不知道我说的对不对,其他人可以论证一下。sdlkfj5
页: [1]
查看完整版本: 作参数化后的问题.