如何使脚本化的Datatable循环
本帖最后由 monalisali 于 2010-9-21 11:23 编辑大家好:
我在编写一段关于datatable脚本时遇到一个问题,请大家帮我看看错在哪里了。
脚本的原意是在两个“SwfComboBox”中利用随机数任意选择一个搜索条件,然后利用Datatable.LocalSheet.AddParameter 语句在runtime
datatable中分别添加表头以及选择条件的数据。其中,搜索条件的循环次数是由For语句来控制的。 我没有在Keyword view进行过任何关于
datatable的设置,只想完全用脚本来实现datatable的创建,循环等操作。
我的问题:
1) 在For循环内的脚本只进行第一次循环,然后脚本就停止了,即搜索条件只会被执行一次
2) 当不在Keyword view中进行datatable操作时(这样的话当脚本写到关于datatable时,还需要进行相应的录制于datatable的设置,很麻烦
),如何在Expert view中完全用脚本来创建datatable,从而达到参数化某几个控件的目的?
脚本如下,略有点多。其中,For循环为12-57行,两个搜索条件是strkitorgname,strkitorglicense 它们的语句在19-22行
Setmgbox = CreateObject ("WScript.Shell")
SwfWindow("食品安全电子化监管系统--城市运行区").Activate
SwfWindow("食品安全电子化监管系统--城市运行区").SwfWindow("日常监管子系统").Activate
SwfWindow("食品安全电子化监管系统--城市运行区").SwfWindow("日常监管子系统").SwfLabel("选择监管对象").Click
'***************************************在中心厨房Tab中***************************************************
SwfWindow("食品安全电子化监管系统--城市运行区").SwfWindow("监管对象设置").SwfRadioButton("中心厨房").Set
Set thewindow = SwfWindow("食品安全电子化监管系统--城市运行区").SwfWindow("监管对象设置")
Dim subslistcount, yearslistcount
subslistcount = thewindow.SwfComboBox("厨房区县").GetItemsCount
yearslistcount = thewindow.SwfComboBox("厨房许可证发证日期").GetItemsCount
For i = 0 to yearslistcount -1
thewindow.SwfRadioButton("中心厨房").Set
Dim randdata, subsdata, licdatedata
Randomize
randdata =int (((yearslistcount-1) * Rnd) +1)
thewindow.SwfComboBox ("厨房区县").Select randdata
thewindow.SwfComboBox ("厨房许可证发证日期").Select randdata
subsdata = thewindow.SwfComboBox("厨房区县").GetItem (randdata)
licdatedata= thewindow.SwfComboBox("厨房许可证发证日期").GetItem (randdata)
Datatable.LocalSheet.AddParameter "中心厨房区县", subsdata
Datatable.LocalSheet.AddParameter "中心厨房发证日期", licdatedata
mgbox.Popup "此时的I="& i & vbnewline &_
"选择的区县是:"& "" & subsdata & vbnewline &_
"发证的日期是" & "" & licdatedata, 5, " ",1
'thewindow.SwfComboBox("厨房区县").Select "闵行"
thewindow.SwfToolbar("swfname:=bindingNv","swfname
path:=bindingNv;pnlToolbar;organizationSearchControl2;pnlCntKitchen;OrganizationDialog").Press "查询"
Set KitTable = SwfWindow("食品安全电子化监管系统--城市运行区").SwfWindow("监管对象设置").SwfTable
("swfname:=dgvOrganizationList","swfname
path:=dgvOrganizationList;organizationSearchControl2;pnlCntKitchen;OrganizationDialog")
Dim intkitrowcount,randomrow
Dim strkitorgname, strkitorglicense
intkitrowcount =KitTable.RowCount
Randomize
randomrow = int (((intkitrowcount-1) * Rnd)+1)
'KitTable.SelectRow randomrow
KitTable.SelectCellrandomrow, "企业名称"
strkitorgname = KitTable.GetCellProperty (randomrow, "企业名称","Value")
strkitorglicense = KitTable.GetCellProperty(randomrow, "许可证号", "Value")
mgbox.Popup "现在选择的是第" & randomrow & vbnewline &_
"企业名称:"&""&strkitorgname&vbnewline &_
"许可证号码:"& ""&strkitorglicense, 3, " ", 1
thewindow.SwfButton("加入我的监管对象").Click
'***************************************在中心厨房Tab中***************************************************
'************************************在我的监管对象Tab中************************************************
Set MyFav = SwfWindow("食品安全电子化监管系统--城市运行区").SwfWindow("监管对象设置")._
SwfTable("swfname:=dgvOrganizationList","swfname
path:=dgvOrganizationList;organizationSearchControl0;pnlMyFavourate;OrganizationDialog")
thewindow.SwfRadioButton("regexpwndtitle:= 我的监管对象","swfname path:= rdoFavorite;panel1;OrganizationDialog"). Set
GeneralAddedCheck MyFav,strkitorgname,strkitorglicense
thewindow.close
SwfWindow("食品安全电子化监管系统--城市运行区").Activate
SwfWindow("食品安全电子化监管系统--城市运行区").SwfWindow("日常监管子系统").Activate
Next' For i = 0 to yearslistcount -1 结束
Function GeneralAddedCheck(tableobj,orgname,orglicense)
Set dictable = CreateObject ("Scripting.Dictionary")
Dim tablearray(1,0)
Dim genstrkey, gengetname, gengetlicense,rownum,getrowdata
Dim boolcheck
boolcheck = false
rownum = tableobj.RowCount
For i = 0 to rownum -1
gengetname = tableobj.GetCellProperty (i,"企业名称", "Value")
gengetlicense = tableobj.GetCellProperty (i, "许可证号","Value")
tablearray (0,0) = gengetname
tablearray (1,0) = gengetlicense
genstrkey = tablearray (1,0)
dictable.Add genstrkey, tablearray
getrowdata = dictable.Item(genstrkey)
mgbox.Popup "当前选中的是第"& i &"行"&vbnewline&_
"企业名:"& getrowdata(0,0)& vbnewline &_
"许可证号:" & getrowdata(1,0) & vbnewline, 5, "当前数据", 1
If orgname = getrowdata(0,0) and orglicense = getrowdata(1,0) Then
mgbox.Popup "被添加的数据如下" & vbnewline &_
"企业名:" & " " & getrowdata(0,0) & vbnewline &_
"许可证号:" & " " & getrowdata(1,0), 5, "一般化的SearchData方法
", 1
Reporter.ReportEvent micPass, "一般化的SearchData方法_添加到我的监管对象", "成功!!!!"
boolcheck = true
End If
If i = rownum -1 and boolcheck = false Then
mgbox.Pop "失败", 3, " ",1
Reporter.ReportEvent micPass, "一般化的SearchData方法_添加到我的监管对象", "失败囧囧囧囧"
End If
Next
End Function
'************************************在我的监管对象Tab中************************************************
你可能需要用到 DataTable.SetNextRow
具体请查看QTP帮助文档中DataTable对象的使用方法 奥!? 谢谢奥,去研究下看看 经过研究,其实只要把54-56行直接注释掉就可以循环了,呵呵,是我自己的一时疏忽。
和SetNextRow没有关系,不过还是要感谢TIB同学的回复,^_^。
页:
[1]