monalisali 发表于 2010-9-21 11:14:25

如何使脚本化的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中************************************************

TIB 发表于 2010-9-21 11:26:54

你可能需要用到 DataTable.SetNextRow

具体请查看QTP帮助文档中DataTable对象的使用方法

monalisali 发表于 2010-9-21 12:03:03

奥!? 谢谢奥,去研究下看看

monalisali 发表于 2010-9-21 15:11:06

经过研究,其实只要把54-56行直接注释掉就可以循环了,呵呵,是我自己的一时疏忽。
和SetNextRow没有关系,不过还是要感谢TIB同学的回复,^_^。
页: [1]
查看完整版本: 如何使脚本化的Datatable循环