51Testing软件测试论坛

标题: 那个函数可以退出本次for循环,而执行下次循环(不是退出整个循环)?? [打印本页]

作者: zhumingwei    时间: 2007-8-25 11:16
标题: 那个函数可以退出本次for循环,而执行下次循环(不是退出整个循环)??
当前action做了参数化,取得当前datatable中的所有行,然后循环
现在想实现:当实际和预期不一致的时候跳出本次循环,而执行下次循环,想找一个相当于c中的continue的函数.不知道怎么实现
n=datatable.GetSheet("确认").getrowcount
For i=1 to n
datatable.SetCurrentRow(i)
Dim a,b,c
a= datatable("预期结果",dtLocalSheet)
c= datatable("用例编号",dtLocalSheet)
executefile "result.vbs"
Window("主机").Maximize
Window("主机").Type DataTable("领现金额", dtLocalSheet)'领取金额
RunAction "授权", oneIteration,i
If Window("主机").Check (CheckPoint("确定后的检查")) then  '如实际和预期一致则输出结果,参数化到localsheet中的"预期结果"
        b=a
        Call printout(a,b,c)
else    '实际和预期不一致
        Window("主机").Type micF1 '退出
        'ExitActionIteration  '在此处想退出当前循环而执行下次循环.相当于c中的continue
end if
Window("主机").Type  micReturn'不需要qtp执行此句
Next

[ 本帖最后由 zhumingwei 于 2007-8-25 13:52 编辑 ]
作者: zhumingwei    时间: 2007-8-25 11:20
另外说明:因为要调用其他脚本.而其他脚本也需要参数化,所以使用run中的run on all rows不合适.
如果只有当前脚本可是使用run on all rows是可以的
作者: winfood    时间: 2007-8-25 11:32
没有仔细看你的代码,QTP和VBScript里面没有类似c语言的continue关键字。

其实只要把代码里面的分支结构调整一下就可以实现类似continue的流程控制了。
比如:
for *****{
if (expression)
{
    statement1;
    continue;
}
statement2;

}

在VBScript里面只要:
For ***
If not expression Then
    statement2
End If
statement1

Next

上面的例子可能不太恰当,但是只要合理调整一下程序的结构就可以达到目的。

[ 本帖最后由 winfood 于 2007-8-25 11:34 编辑 ]
作者: sidneylover    时间: 2007-8-25 12:37
没有直接退出for循环的语句

If Window("主机").Check (CheckPoint("确定后的检查")) then  '如实际和预期一致则输出结果,参数化到localsheet中的"预期结果"
        b=a
        Call printout(a,b,c)
else    '实际和预期不一致
        Window("主机").Type micF1 '退出
        'ExitActionIteration  '在此处想退出当前循环而执行下次循环.相当于c中的continue
        你可以在这给i赋值 i = n 那样就跳出循环了
end if
作者: 小孩    时间: 2007-8-25 20:34
Option Explicit
Dim i,j
j=0
For i=0 to 10 step 2 ’i 得值每次增加2
        j=j+1

If  i>5 then exit for  ‘退出循环

next
希望这个可以帮到你 因为 VBS 是没有 continue
作者: gzj_06    时间: 2007-8-26 10:15
把Window("主机").Type  micReturn'不需要qtp执行此句移到else的上面不就可以了吗
  1. n=datatable.GetSheet("确认").getrowcount
  2. For i=1 to n
  3. datatable.SetCurrentRow(i)
  4. Dim a,b,c
  5. a= datatable("预期结果",dtLocalSheet)
  6. c= datatable("用例编号",dtLocalSheet)
  7. executefile "result.vbs"
  8. Window("主机").Maximize
  9. Window("主机").Type DataTable("领现金额", dtLocalSheet)'领取金额
  10. RunAction "授权", oneIteration,i
  11. If Window("主机").Check (CheckPoint("确定后的检查")) then  '如实际和预期一致则输出结果,参数化到localsheet中的"预期结果"
  12.         b=a
  13.         Call printout(a,b,c)
  14.         Window("主机").Type  micReturn
  15. else    '实际和预期不一致
  16.         Window("主机").Type micF1 '退出
  17.         'ExitActionIteration  '在此处想退出当前循环而执行下次循环.相当于c中的continue
  18. end if
  19. Next
复制代码

作者: bobile    时间: 2007-8-26 16:12
continue 就可以控制了呀 或者用一个IF 了
作者: winfood    时间: 2007-8-26 22:11
标题: 回复 #7 bobile 的帖子
QTP里面有continue关键字吗?
作者: gzj_06    时间: 2007-8-26 22:27
原帖由 winfood 于 2007-8-26 22:11 发表
QTP里面有continue关键字吗?
continue关键字是有的,但与循环就一点关系都没有了
作者: winfood    时间: 2007-8-26 23:08
标题: 回复 #9 gzj_06 的帖子
QTP里面的continue不是关键字(key word),而是内部MercuryTimer对象的一个方法(method)。
钻牛角尖了sdlkfj5




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