google搜索 51Testing站内搜索                    软件测试门户 | 软件测试培 训 | 文章资料精选 | 软件测试论坛 | 软件测试博客 | 测试招聘求职 
打印

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

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
笑对人生,交八方朋友!

TOP

SetNextRow 试试看。

[ Last edited by lovetest6 on 2005-6-21 at 14:12 ]

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

补充一下:
datatable.getsheet("sportCaption").setcurrentrow(i)
这地方没有问题,已经试过了,可以正确指向当前行数
但是取到的是总是第一行的数据。
不知道是不是QTP本身的问题不
笑对人生,交八方朋友!

TOP

不愿意用SetNextRow
就用
DataTable.GetSheet("sportCaption").GetParameter(1).Value

想必不是QTP本身的问题,而是我们的理解不正确:)
呵呵。

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

应该是因为我们没弄清楚
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 ]

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

或者把你那个分开写。

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 ]

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

你是放在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 ]
你装饰了别人的风景,别人点亮了你的梦

TOP

是啊,就脚本实现而言,上面的三种办法可以解决了么?

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

非常感谢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运行数据表中,而我这里希望的并不是这样。
笑对人生,交八方朋友!

TOP

引用:
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
笑对人生,交八方朋友!

TOP

这个好像是QTP的问题.
你不要放到excel表中,而放到本地上做呢?
我试了放到EXECL表中,也是读取第一行,下来就读取不了!

TOP

不是说了上面的三种方法么?
都不行么???

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

改天有时间,我再看看吧。

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

引用:
Originally posted by QA_BAY at 2005-6-21 06:22 PM:
这个好像是QTP的问题.
你不要放到excel表中,而放到本地上做呢?
我试了放到EXECL表中,也是读取第一行,下来就读取不了!
重新试过了,跟你说的一样,放在本地也存在这样的问题。看来很可能是qtp本身的问题了。
笑对人生,交八方朋友!

TOP

引用:
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".

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

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

引用:
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 ]

TOP

QA_BAY:
引用:
datatable.AddSheet("name")----增加一个字段'name'
很明显,你对这句话的理解试不正确的。

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

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

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

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

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

[ Last edited by lovetest6 on 2005-6-22 at 12:33 ]

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

可能是叫法上的问题吧.
我把EXECL表里面新加的SHEET叫做字段.
如果有人看不清楚的可以去查,
但我的脚本运行是没有错的!
谢谢你的提醒!我知道你的意思!

[ Last edited by QA_BAY on 2005-6-22 at 12:52 ]

TOP

正是由于你前面的错误理解,所以导致你得不到正确的结果:)

呵呵。
按照你的叫法,SHEET里面的每个column叫什么呢?:)

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

那你认为我的程序出错了吗?
指出程序错在哪里吧.
注释我可以改过来.
不要咬文嚼字!

TOP

把程序再作修改,可以依次取到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
以上四行数据都可以依次取到!

TOP

 
当前时区 GMT+8, 现在时间是 2008-10-7 23:42Copyright(C)上海博为峰软件技术有限公司 2001-2007 电话:021-64471599-8017
当您在访问网站、论坛及博客过程中遇到问题时可发送email:webmaster@51testing.com或发送论坛短信至管理员风在吹