51Testing软件测试论坛

标题: for 循环里使用 select case得不到期望的结果 [打印本页]

作者: swallowhe    时间: 2012-2-27 15:27
标题: for 循环里使用 select case得不到期望的结果
我的目的是要计算一个网页表格中每种类型数据的记录数,有“有效”,“无效”,“未验证”三种
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语句为什么没有得到执行呢?
作者: swallowhe    时间: 2012-2-27 15:27
哪位大侠帮帮忙,实在搞不明白。先谢谢了
作者: swallowhe    时间: 2012-2-27 15:28
还有一个疑问,i的值应该小于行数,但是居然得到的值大于行数,这又是为什么呢?
作者: 026300    时间: 2012-2-27 17:31
你确认你那个celldata取到值了吗?case中的执行语句最好别放到条件的同行吧
作者: davy_chen    时间: 2012-2-28 09:30
可以试试
msgbox celldata

case else
作者: iamfeiyu1009    时间: 2012-2-28 09:32
在断点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了
作者: swallowhe    时间: 2012-2-28 10:06
我找到原因了,原来是celldata返回值左右有空格,用Trim(celldata)后来就没问题了
作者: hsjzfling    时间: 2012-2-28 10:39
关于For循环里i的问题,这应该是个基础知识,弄清楚For循环的具体逻辑原理之后,就知道在本案例中若i不为19那就是bug了
关于Select Case,你在Select前加断点,然后F11单步调试就知道,不是Select Case没执行,而是所有的Case都不满足期望条件。你也可以在最后加上一个Case Else分支。
关于为什么之前Case都通不过,若你msgbox之后确定应该符合某个条件,那可以用Trim去掉空字符再比较看看




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