pls hellp me,不能正确读取数据表中的内容
请大家帮我解决一下下面的问题.我要新增一项资料,把新增资料中要用到的数据放在一个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 SetNextRow 试试看。
[ Last edited by lovetest6 on 2005-6-21 at 14:12 ] 补充一下:
datatable.getsheet("sportCaption").setcurrentrow(i)
这地方没有问题,已经试过了,可以正确指向当前行数
但是取到的是总是第一行的数据。
不知道是不是QTP本身的问题不 不愿意用SetNextRow
就用
DataTable.GetSheet("sportCaption").GetParameter(1).Value
想必不是QTP本身的问题,而是我们的理解不正确:)
呵呵。 应该是因为我们没弄清楚
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 ] 或者把你那个分开写。
datatable.getsheet("sportCaption")
datatable.setcurrentrow(i)
The following example uses the SetCurrentRow method to change the active row to the second row in the MySheet run-time data sheet.
DataTable.GetSheet("MySheet").SetCurrentRow(2)
*******************************************************
Example
The following example uses the SetCurrentRow method to change the active row to the second row in the global run-time Data Table.
DataTable.SetCurrentRow (2)
看到了么?返回的不一样。
[ Last edited by lovetest6 on 2005-6-21 at 15:36 ] 你是放在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 ] 是啊,就脚本实现而言,上面的三种办法可以解决了么? 非常感谢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运行数据表中,而我这里希望的并不是这样。 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 这个好像是QTP的问题.
你不要放到excel表中,而放到本地上做呢?
我试了放到EXECL表中,也是读取第一行,下来就读取不了! 不是说了上面的三种方法么?
都不行么???
不知道怎么讲了,不行就不行吧。
改天有时间,我再看看吧。 Originally posted by QA_BAY at 2005-6-21 06:22 PM:
这个好像是QTP的问题.
你不要放到excel表中,而放到本地上做呢?
我试了放到EXECL表中,也是读取第一行,下来就读取不了!
重新试过了,跟你说的一样,放在本地也存在这样的问题。看来很可能是qtp本身的问题了。 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...
Example
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".
总之,不管你是设置当前第几行,还是移动到下一行。
只要取值的配套使用就行了。这是我的理解,不知道对不对。 Originally posted by lovetest6 at 2005-6-21 06:41 PM:
我不知道是local sheet还是什么,反正在这例中,
提到的是"MySheet".
总之,不管你是设置当前第几行,还是移动到下一行。
只要取值的配套使用就行了。这是我的理解,不知道对不对。
我 ...
我觉不太对.这个好像就是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 ] QA_BAY:
datatable.AddSheet("name")----增加一个字段'name'
很明显,你对这句话的理解试不正确的。
方法的名字明明叫AddSheet,我上面页贴了MI的解释,再好好看看吧。
我也不是很清楚,但是我知道这句话你的解释肯定不对,呵呵:)
明明是加了一个sheet嘛,怎么能说是加了一个字段呢?
面向对象我也不是理解的很多。:)
但是datatable和DTsheet这两个肯定是两个不同的对象嘛:)
[ Last edited by lovetest6 on 2005-6-22 at 12:33 ] 可能是叫法上的问题吧.
我把EXECL表里面新加的SHEET叫做字段.
如果有人看不清楚的可以去查,
但我的脚本运行是没有错的!
谢谢你的提醒!我知道你的意思!
[ Last edited by QA_BAY on 2005-6-22 at 12:52 ] 正是由于你前面的错误理解,所以导致你得不到正确的结果:)
呵呵。
按照你的叫法,SHEET里面的每个column叫什么呢?:) 那你认为我的程序出错了吗?
指出程序错在哪里吧.
注释我可以改过来.
不要咬文嚼字! 把程序再作修改,可以依次取到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]
2