51Testing软件测试论坛

标题: Excel做数据驱动,调用数据时出错 [打印本页]

作者: Dorpnight    时间: 2007-7-19 13:59
标题: Excel做数据驱动,调用数据时出错
我想从excel表里读取数据来实现文本框里的数据更新,可是不知为什么在调用数据的时候老是说我参数错误,请指教!

经调试后错误图片如下:

[ 本帖最后由 Dorpnight 于 2007-7-19 14:47 编辑 ]
作者: Dorpnight    时间: 2007-7-19 14:00
标题: 回复 #1 Dorpnight 的帖子
下面是代码:

Count=1
Datatable.Import("D:\ContentName.xls")
For i=1 To Count
msgbox Count
Browser("").Page("6").WebEdit("contentName").Set DataTable(ContentName,dtLocalSheet)
DataTable.GetSheet("Action1").SetNextRow
Next
作者: rivermen    时间: 2007-7-19 15:21
Set DataTable(ContentName,dtLocalSheet)

变量ContentName 的值不正确
只能是字符串,或者整数的index
如:
DataTable(“第一列”,dtLocalSheet)
DataTable(1,2)

同时import后最好设置个断点,保证xls中的数据真正导入到DataTable中


u may try
作者: Dorpnight    时间: 2007-7-19 15:49
标题: 回复 #3 rivermen 的帖子
Set DataTable("ContentName",dtLocalSheet)
还是同样的错误说找不到ContentName这个列,但是我在result report可以看到数据全部引用了,thanks for rivermen
作者: rivermen    时间: 2007-7-19 16:33
"ContentName" 是不是你Datatable的列名呢?
你把DataTable 导入数据后的情况贴出来
ps:导入后适当wait

[ 本帖最后由 rivermen 于 2007-7-19 16:34 编辑 ]
作者: wuzhuayu    时间: 2007-7-19 17:06
原帖由 Dorpnight 于 2007-7-19 14:00 发表
下面是代码:

Count=1
Datatable.Import("D:\ContentName.xls")
For i=1 To Count
msgbox Count
Browser("").Page("6").WebEdit("contentName").Set DataTable(ContentName,dtLocalSheet)
DataTable.Ge ...


lz的采用这种方式,在excel文件中,QTP是指向第一行的,建议这样试试:
Datatable.Import("D:\ContentName.xls")
Count=DataTable.GetRowCount
For i=1 To Count 'i的值表示QTP查找到Excel的第几行
Browser("").Page("6").WebEdit("contentName").Set DataTable(i,j) 'j的值是ContentName在表中的列数
DataTable.SetNextRow
End For

have a try!
作者: rivermen    时间: 2007-7-19 17:48
标题: 回复 #6 wuzhuayu 的帖子
Description
DataTable default property. Retrieves or sets the value of the cell in the specified parameter and the current row of the run-time Data Table.

Note: This property returns the computed value of the cell. For example, if the cell contains a formula, the method returns True or False.

Syntax
To find the value:

DataTable.Value(ParameterID [, SheetID])

or

DataTable(ParameterID [, SheetID])

To set the value:

DataTable.Value(ParameterID [, SheetID])=NewValue

or

DataTable(ParameterID [, SheetID]) =NewValue



Argument
Type
Description

ParameterID  Variant  Identifies the parameter (column) of the value to be set/retrieved. Index values begin with 1.  
SheetID  Variant  Optional. Identifies the sheet to be returned. The SheetID can be the sheet name, index or dtLocalSheet, or dtGlobalSheet.
If no Sheet is specified, the first sheet in the run-time Data Table is used (the global sheet for tests, or the component sheet for business components). Index values begin with 1.  
NewValue  String  Sets the value for the specified table cell.  


Example
The following example uses the Value property to set the value in the current row of the Destination parameter (column) in the "ActionA" sheet in the run-time Data Table.

DataTable.Value ("Destination", "ActionA")="New York"

The following example uses the Value property to set the value in the current row of the second parameter (column) in the third sheet.

DataTable.Value (2,3)="New York"

Note: You could omit the word Value in the statements above, because Value is the default property for the DataTable object.

The following example uses the default property to set the value in the current row of the Destination parameter (column) in the current (active) local sheet.

DataTable("Destination", dtlocalSheet)="New York"
作者: wuzhuayu    时间: 2007-7-19 17:59
楼上的意思是我搞错了?
作者: wuzhuayu    时间: 2007-7-19 18:07
是搞错了,呵呵。应该是:
Datatable.Import("D:\ContentName.xls")
Count=DataTable.GetRowCount
For i=1 To Count 'i的值表示QTP查找到Excel的第几行
Browser("").Page("6").WebEdit("contentName").Set DataTable(j,1) 'j的值是ContentName在表中的列数
DataTable.SetNextRow
End For
作者: rivermen    时间: 2007-7-19 18:10
标题: 回复 #9 wuzhuayu 的帖子
dataTable(i,j)
DataTable(ParameterID [, SheetID])

前面的 i 代表 哪一个列(参数)
后面的 j 代表 哪一个Sheet (GlobalSheet,LocaSheet)
作者: Dorpnight    时间: 2007-7-20 09:45
标题: 回复 #10 rivermen 的帖子
谢谢楼上各位的热心回复

按照你们的思路我修改了一下脚本,运行成功,下面我把正确的脚本贴上来:
Dim Count
Dim j
Datatable.Import("D:\ContentName.xls")
Count=DataTable.GetRowCount
For i=1 To Count
   'msgbox aa
        Browser("").Page("").WebEdit("contentName").Set DataTable(1,LocaSheet)
DataTable.SetNextRow
Next
作者: Dorpnight    时间: 2007-7-20 10:17
标题: 回复 #11 Dorpnight 的帖子
出现另一个问题,关于这段脚本
按照上面的脚本运行时,发现如果excel表里有10列数据,整个代码就自动迭代运行十次。这也太可怕了,嗬嗬,大概和我的设置有关吧,我先查查看
作者: Dorpnight    时间: 2007-7-20 10:36
标题: 为什么每次循环的时候总是调用第10列的数据啊?
我希望每次循环的时候调用的都是不同列的数据
作者: rivermen    时间: 2007-7-20 10:50
标题: 回复 #13 Dorpnight 的帖子
Browser("").Page("").WebEdit("contentName").Set DataTable(1,LocaSheet)
按照你现在的脚本,你每次都在调用第一列的数据

给你个参考的:
Dim filePath
filePath="c:\login.xls"
datatable.Importsheet  filepath,1,2
' DataTable.ImportSheet(FileName, SheetSource, SheetDest)
' 1为Excel 中的第一张 Sheet
' 2 为 DataTable 中的第二张,暨Action1

''统计DataTable 中的Sheet数
''msgbox datatable.GetSheetCount

''统计Sheet中的数据行数
'msgbox datatable.GetSheet ("Action2").GetRowCount

''跨action使用别人家的dataTable,使用数字标记行,列更加灵活
''datatable.GetSheet ("Action2").SetCurrentRow(3)
''msgbox  DataTable("B",  3)
''msgbox  DataTable("B", ("Action2"))

datatable.LocalSheet.AddParameter "testlog",""
c=datatable.LocalSheet.getrowcount
'msgbox c
datatable.SetCurrentRow 1
For i=1 to c

        systemutil.Run "c:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe"
        Dialog("Login").WinEdit("Agent Name:").Set DataTable("username", dtLocalSheet)
        Dialog("Login").WinEdit("Agent Name:").Type  micTab
        Dialog("Login").WinEdit("Password:").Set DataTable("password", dtLocalSheet)
        Dialog("Login").WinButton("OK").Click

       
        datatable("testlog",dtLocalSheet)="第" & i &"次"

       
        Window("Flight Reservation").WinMenu("Menu").Select "File;Exit"
        datatable.LocalSheet.SetNextRow()
Next

' 导出dataTable 中的第2张Sheet "Action1", 标记从1开始,1 为 Global
datatable.ExportSheet filepath,2

msgbox datatable.GetSheetCount
作者: Dorpnight    时间: 2007-7-23 15:41
标题: 回复 #14 rivermen 的帖子
谢谢rivermen,用你的方法是过了,还是一样只能取一行值,不能循环读取
作者: sincor    时间: 2008-12-10 14:17
原帖由 Dorpnight 于 2007-7-23 15:41 发表
谢谢rivermen,用你的方法是过了,还是一样只能取一行值,不能循环读取

循环读取靠自己写函数  if  for  等等




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