51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 10904|回复: 39
打印 上一主题 下一主题

pls hellp me,不能正确读取数据表中的内容

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2005-6-21 11:59:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请大家帮我解决一下下面的问题.
我要新增一项资料,把新增资料中要用到的数据放在一个excel表中,然后在运行的时候导入该execl表。然后用一个循环分别读取excel表中的数据。为什么我运行的时候只能读取第一行的数据,后面的数据不能正确读取呢。研究了好久,估计是Browser("::::School Sports Programe").Page("::.SSP System.::").WebEdit("noOfRegister").Set DataTable("noOfRegister", dtsportCaptionSheet) 这地方有问题,但不知道怎么解决。
大伙帮我看看吧。

相关的代码copy如下:

datatable.AddSheet("sportCaption")
datatable.ImportSheet "E:\sportCaption.xls","sportCaption","sportCaption"
Dim i,rowcount
i=0
rowcount=datatable.GetSheet("sportCaption").getrowcount
reporter.ReportEvent 2,"there are "&rowcount,"row in this data table"
Do while i<rowcount
i=i+1
datatable.getsheet("sportCaption").setcurrentrow(i)
Browser("::::School Sports Programe").Page("::::School Sports Programe_2").Image("mnu01").Click
Browser("::::School Sports Programe").Page("::::School Sports Programe_2").WebButton("新增資料").Click
Browser("::::School Sports Programe").Page("::::School Sports Programe_2").WebButton("運動領袖").Click
Browser("::::School Sports Programe").Page("::.SSP System.::").WebList("activityType").Select DataTable("activityType", dtsportCaptionSheet)
Browser("::::School Sports Programe").Page("::.SSP System.::").WebList("activityName").Select DataTable("activityName", dtsportCaptionSheet)
Browser("::::School Sports Programe").Page("::.SSP System.::").WebEdit("startDateString").Set DataTable("startDateString", dtsportCaptionSheet)
Browser("::::School Sports Programe").Page("::.SSP System.::").WebEdit("endDateString").Set DataTable("endDateString", dtsportCaptionSheet)
Browser("::::School Sports Programe").Page("::.SSP System.::").WebEdit("activityDate1").Set DataTable("activityDate1", dtsportCaptionSheet)
Browser("::::School Sports Programe").Page("::.SSP System.::").WebEdit("time1").Set DataTable("time1", dtsportCaptionSheet)
Browser("::::School Sports Programe").Page("::.SSP System.::").WebEdit("noOfRegister").Set DataTable("noOfRegister", dtsportCaptionSheet)
Browser("::::School Sports Programe").Page("::.SSP System.::").WebEdit("venue").Set DataTable("venue", dtsportCaptionSheet)
Browser("::::School Sports Programe").Page("::.SSP System.::").WebEdit("status").Set DataTable("status", dtsportCaptionSheet)
Browser("::::School Sports Programe").Page("::.SSP System.::").WebEdit("remark").Set DataTable("remark", dtsportCaptionSheet)
Browser("::::School Sports Programe").Page("::.SSP System.::").WebButton("儲存").Click
Browser("::::School Sports Programe").Dialog("Microsoft Internet Explorer").WinButton("確定").Click
Browser("::::School Sports Programe").Dialog("Microsoft Internet Explorer").WinButton("確定").Click
Browser("::::School Sports Programe").Page("::.SSP System.::_2").WebEdit("applicationNo").Output CheckPoint("applicationNo_2")
Browser("::::School Sports Programe").Page("::.SSP System.::_2").WebEdit("fee").Output CheckPoint("fee")
'Browser("::::School Sports Programe").Page("::.SSP System.::_2").WebButton("更新資料").Check CheckPoint("更新資料_2")
Browser("::::School Sports Programe").Page("::.SSP System.::_2").WebButton("離開")
Loop
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2005-6-21 13:58:32 | 只看该作者
SetNextRow 试试看。

[ Last edited by lovetest6 on 2005-6-21 at 14:12 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2005-6-21 14:08:07 | 只看该作者
补充一下:
datatable.getsheet("sportCaption").setcurrentrow(i)
这地方没有问题,已经试过了,可以正确指向当前行数
但是取到的是总是第一行的数据。
不知道是不是QTP本身的问题不
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2005-6-21 14:53:43 | 只看该作者
不愿意用SetNextRow
就用
DataTable.GetSheet("sportCaption").GetParameter(1).Value

想必不是QTP本身的问题,而是我们的理解不正确:)
呵呵。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2005-6-21 14:56:05 | 只看该作者
应该是因为我们没弄清楚
DataTable.Value(ParameterID [, SheetID]) 和
DataTable.GetSheet("sportCaption").GetParameter(1).Value

的区别。

btw:楼主的写法实际上是一种省略写法,省略了DataTable.value中的value


有明白的,给讲讲啊:)呵呵。

[ Last edited by lovetest6 on 2005-6-21 at 15:03 ]
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2005-6-21 15:33:43 | 只看该作者
或者把你那个分开写。

datatable.getsheet("sportCaption")
datatable.setcurrentrow(i)


  1. The following example uses the SetCurrentRow method to change the active row to the second row in the MySheet run-time data sheet.

  2. DataTable.GetSheet("MySheet").SetCurrentRow(2)

  3. *******************************************************
  4. Example
  5. The following example uses the SetCurrentRow method to change the active row to the second row in the global run-time Data Table.

  6. DataTable.SetCurrentRow (2)
复制代码


看到了么?返回的不一样。

[ Last edited by lovetest6 on 2005-6-21 at 15:36 ]
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2005-6-21 17:41:02 | 只看该作者
你是放在gobal中还是local sheet中?我看你的脚本显示,似乎是local sheet
如果是local sheet中,需要在action上单击右键,action call properties
选择run on all rows。

[ Last edited by lovetest6 on 2005-6-21 at 18:41 ]
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2005-6-21 17:42:27 | 只看该作者
是啊,就脚本实现而言,上面的三种办法可以解决了么?
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2005-6-21 17:58:00 | 只看该作者
非常感谢Lovetest6对
DataTable.SetCurrentRow (2)
DataTable.GetSheet("MySheet").SetCurrentRow(2)
详细解释,我已经明白他们之间的区别。
我现在的问题是:运行脚本的时候,设置的当前行是第二行、第三行。。。(说明一下:经验证,设置的行数语句是有效的),但读取到的仍然是第一行的數據。

Lovetest6, 提供了三种解决办法:
1)        将SetCurrentRow改为SetNextRow,这两种方法的效果是一样的,但读取到的数据不正确
2)        DataTable.GetSheet("sportCaption").GetParameter(1).Value 这是获取sportCaption sheet 中第一个参数的值 我这里可以正确得到某个参数的值,只不过本应该获取的是第二行的某个参数值,得到的是第一行该参数的值
3)        将datatable.getsheet("sportCaption")
datatable.setcurrentrow(i)  分开写
a)        datatable.getsheet("sportCaption") //不清楚这行有什么作用
b)        datatable.setcurrentrow(i) // 这是将当前行设置为第i行在global运行数据表中,而我这里希望的并不是这样。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2005-6-21 18:13:05 | 只看该作者
Originally posted by michelle_happy at 2005-6-21 05:41 PM:
你是放在gobal中还是local sheet中?我看你的脚本显示,似乎是local sheet
如果是local sheet中,需要在action上单击右键,action call properties
选择run on all rows。

选择的是local sheet,已经选择了run on all rows
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2005-6-21 18:22:27 | 只看该作者
这个好像是QTP的问题.
你不要放到excel表中,而放到本地上做呢?
我试了放到EXECL表中,也是读取第一行,下来就读取不了!
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2005-6-21 18:34:48 | 只看该作者
不是说了上面的三种方法么?
都不行么???

不知道怎么讲了,不行就不行吧。

改天有时间,我再看看吧。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2005-6-21 18:39:03 | 只看该作者
Originally posted by QA_BAY at 2005-6-21 06:22 PM:
这个好像是QTP的问题.
你不要放到excel表中,而放到本地上做呢?
我试了放到EXECL表中,也是读取第一行,下来就读取不了!

重新试过了,跟你说的一样,放在本地也存在这样的问题。看来很可能是qtp本身的问题了。
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2005-6-21 18:41:34 | 只看该作者
Originally posted by michelle_happy at 2005-6-21 05:41 PM:
你是放在gobal中还是local sheet中?我看你的脚本显示,似乎是local sheet
如果是local sheet中,需要在action上单击右键,action call properties
选择run on all rows。

[ Last edited by lovetest6 on  ...


  1. Example
  2. The following example uses the AddSheet method to create the new sheet, "MySheet" in the run-time Data Table and then adds a parameter to the new sheet.
复制代码


我不知道是local sheet还是什么,反正在这例中,
提到的是"MySheet".

总之,不管你是设置当前第几行,还是移动到下一行。
只要取值的配套使用就行了。这是我的理解,不知道对不对。
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2005-6-22 10:26:46 | 只看该作者
Originally posted by lovetest6 at 2005-6-21 06:41 PM:



  1. 我不知道是local sheet还是什么,反正在这例中,
  2. 提到的是"MySheet".

  3. 总之,不管你是设置当前第几行,还是移动到下一行。
  4. 只要取值的配套使用就行了。这是我的理解,不知道对不对。
复制代码


我 ...

我觉不太对.这个好像就是QTP的问题!
我试了一个简单的例子,
自带的飞机订单来说吧.

for i=1 to 4
Window("Flight Reservation").Activate
Window("Flight Reservation").WinButton("Button").Click
Window("Flight Reservation").WinObject("Date of Flight:").Type "062305"
Window("Flight Reservation").WinComboBox("Fly From:").Select "Frankfurt"
Window("Flight Reservation").WinComboBox("Fly To:").Select "London"
Window("Flight Reservation").WinButton("FLIGHT").Click
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
datatable.AddSheet("name")----增加一个SHEET
datatable.ImportSheet "C:\name.xls" ,1,Global-----从EXECL表中导进NAME字段里面的数据,有4行
Window("Flight Reservation").WinEdit("Name:").Set DataTable("name", dtGlobalSheet)
datatable.SetNextRow-------加这一行,是想看一下有没有取到下一行的数据,结果没有
Window("Flight Reservation").WinEdit("Tickets:").SetSelection 0,1
Window("Flight Reservation").WinEdit("Tickets:").Set "2"
Window("Flight Reservation").WinRadioButton("Business").Set
Window("Flight Reservation").WinButton("Insert Order").Click
next
运行结果都是读取第一行的数据,取不了其它行的数据.
所以这可能是QTP的问题或者其它方面的问题!

[ Last edited by QA_BAY on 2005-6-22 at 14:01 ]
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2005-6-22 12:28:36 | 只看该作者
QA_BAY:

datatable.AddSheet("name")----增加一个字段'name'

很明显,你对这句话的理解试不正确的。

方法的名字明明叫AddSheet,我上面页贴了MI的解释,再好好看看吧。

我也不是很清楚,但是我知道这句话你的解释肯定不对,呵呵:)

明明是加了一个sheet嘛,怎么能说是加了一个字段呢?

面向对象我也不是理解的很多。:)

但是datatable和DTsheet这两个肯定是两个不同的对象嘛:)

[ Last edited by lovetest6 on 2005-6-22 at 12:33 ]
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2005-6-22 12:46:35 | 只看该作者
可能是叫法上的问题吧.
我把EXECL表里面新加的SHEET叫做字段.
如果有人看不清楚的可以去查,
但我的脚本运行是没有错的!
谢谢你的提醒!我知道你的意思!

[ Last edited by QA_BAY on 2005-6-22 at 12:52 ]
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2005-6-22 12:55:44 | 只看该作者
正是由于你前面的错误理解,所以导致你得不到正确的结果:)

呵呵。
按照你的叫法,SHEET里面的每个column叫什么呢?:)
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2005-6-22 12:59:53 | 只看该作者
那你认为我的程序出错了吗?
指出程序错在哪里吧.
注释我可以改过来.
不要咬文嚼字!
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2005-6-22 13:43:38 | 只看该作者
把程序再作修改,可以依次取到EXECL表里面的数据!
name
kkkk
llllll
ppppppp
eeeeee

我们将sheet1改名为Global

datatable.AddSheet("name")-----加一个SHEET
datatable.ImportSheet "C:\name.xls" ,1,Global------从外部导进4个数据
Dim i,rowcount '定义两个变量
i=0
rowcount=datatable.getrowcount
Do while i<rowcount
i=i+1
msgbox rowcount
reporter.ReportEvent 2,"统计NAME总行数 "&rowcount

Window("Flight Reservation").Activate
Window("Flight Reservation").WinButton("Button").Click
Window("Flight Reservation").WinObject("Date of Flight:").Type "062305"
Window("Flight Reservation").WinComboBox("Fly From:").Select "Denver"
Window("Flight Reservation").WinComboBox("Fly To:").Select "London"
Window("Flight Reservation").WinButton("FLIGHT").Click
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
datatable.setcurrentrow(i)
Window("Flight Reservation").WinEdit("Name:").Set DataTable("name", dtGlobalSheet)

Window("Flight Reservation").WinEdit("Tickets:").SetSelection 0,1
Window("Flight Reservation").WinEdit("Tickets:").Set "2"
Window("Flight Reservation").WinRadioButton("Business").Set
Window("Flight Reservation").WinButton("Insert Order").Click
loop
以上四行数据都可以依次取到!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-26 05:40 , Processed in 0.087834 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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