51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2963|回复: 7
打印 上一主题 下一主题

[原创] for 循环里使用 select case得不到期望的结果

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-2-27 15:27:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的目的是要计算一个网页表格中每种类型数据的记录数,有“有效”,“无效”,“未验证”三种
Browser("xxx").Page("xxx").WebEdit("rbac_password").Set "1"
Browser("xxx").Page("xxx").Image("btn_login").Click
Browser("xxx").Page("xxx").Frame("top").WebElement("m_line").Click
Browser("xxx").Page("xxx").Frame("left").Link("资料查询").Click   ’这里往前的内容都可以忽略,是登录之类的先置步骤

Dim row   
row=Browser("xxx").Page("xxx").Frame("right").WebTable("姓名").RowCount
msgbox row  '这里返回的行有18行
Dim celldata ’这个用来存储每个表格getcelldata返回的值
Dim i,j,k ’用来计算每种类型的数据的记录数
For i=2 to row
   celldata=Browser("xxx").Page("xxx").Frame("right").WebTable("姓名").GetCellData(i,9)
   msgbox celldata
   Select Case celldata  ’设置了断点1
      Case "有效"  
          i=i+1
          msgbox i
      Case "无效"  j=j+1
                 
      Case "未验证" k=k+1
                 
   End Select                       ‘设置了断点2
Next

msgbox i
msgbox j
msgbox k


在断点1处用F11,发现根本就没有进入select case语句里运行,rowcount返回表格的行为18.但是最后 msgbox的i值竟然为19.
问题1:
为什么都看不到select case里的值被执行,但是i却有值呢?
问题2:
for循环里,select case语句为什么没有得到执行呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2012-2-27 15:27:39 | 只看该作者
哪位大侠帮帮忙,实在搞不明白。先谢谢了
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2012-2-27 15:28:33 | 只看该作者
还有一个疑问,i的值应该小于行数,但是居然得到的值大于行数,这又是为什么呢?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2012-2-27 17:31:48 | 只看该作者
你确认你那个celldata取到值了吗?case中的执行语句最好别放到条件的同行吧
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2012-2-28 09:30:05 | 只看该作者
可以试试
msgbox celldata

case else
回复 支持 反对

使用道具 举报

  • TA的每日心情
    郁闷
    2014-12-19 21:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    6#
    发表于 2012-2-28 09:32:58 | 只看该作者
    在断点1处用F11,发现根本就没有进入select case语句里运行,rowcount返回表格的行为18.但是最后 msgbox的i值竟然为19.
    问题1:
    为什么都看不到select case里的值被执行,但是i却有值呢?
    i有没有值,和selectcase有没有被执行没有必然关系,for循环时,i就有值了啊
    问题2:
    for循环里,select case语句为什么没有得到执行呢?
    可能celldata的返回类型不对,用cstr转换下

    你说的msgbox i的值是19,是指倒数第三行的msgbox i吧,这里肯定是19啊,
    你在for循环外面的msgbox只会输出最后一次循环,即i=18,可能最后select case是有效的,所以i就是i+1=19了

    另尽量不要在for 循环里再写i=i+1这样的语句,这样循环将会是跳跃性的,不会是从1到n了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2012-2-28 10:06:30 | 只看该作者
    我找到原因了,原来是celldata返回值左右有空格,用Trim(celldata)后来就没问题了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2012-2-28 10:39:35 | 只看该作者
    关于For循环里i的问题,这应该是个基础知识,弄清楚For循环的具体逻辑原理之后,就知道在本案例中若i不为19那就是bug了
    关于Select Case,你在Select前加断点,然后F11单步调试就知道,不是Select Case没执行,而是所有的Case都不满足期望条件。你也可以在最后加上一个Case Else分支。
    关于为什么之前Case都通不过,若你msgbox之后确定应该符合某个条件,那可以用Trim去掉空字符再比较看看
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 06:31 , Processed in 0.064004 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表