cabrite 发表于 2011-7-13 17:57:56

qtp利用datatable做参数化,遇到重复打开多个ie的问题

做一个应用系统查询功能的测试,查询 条件需要多次输入,所以利用datatable做参数化
基本操作就是登陆系统,打开查询模块,然后输入查询条件,查询

现在的情况是,查询完一次,datatable循环,然后又打开一个新的ie,登陆系统,输入查询条件,查询。。。

17800455 发表于 2011-7-14 09:18:01

那是因为你做的参数化是循环整个action的。 建议你代码获取datatable中的值。
不要用qtp自身的。
举例:
rowcount = datatable.getrowcount
for i = 0 to rowcount -1
    name = datatable.rawvalue("name","Global")
    datatable.setnextrow
next

17800455 发表于 2011-7-14 09:18:12

那是因为你做的参数化是循环整个action的。 建议你代码获取datatable中的值。
不要用qtp自身的。
举例:
rowcount = datatable.getrowcount
for i = 0 to rowcount -1
    name = datatable.rawvalue("name","Global")
    datatable.setnextrow
next

cabrite 发表于 2011-7-14 09:40:23

回复 2# 17800455
这是我的代码,应该加在哪里

RunAction "Action1 [打开报盘登记]", oneIteration
wait(5)
Browser("Browser").Page("Page").Frame("content").WebEdit("stockofferSearch1:stockofferSe").Set DataTable("gongys", dtLocalSheet)
wait(5)

Browser("Browser").Page("Page").Frame("content").WebButton("查询").Click
wait(5)

cabrite 发表于 2011-7-14 16:09:04

ie不再打开多个了,但是又遇到问题了


打开页面
Dim rowcount
rowcount = datatable.getrowcount
for i = 1 to rowcount
    aaa =datatable.rawvalue("gongys","chaxun")
Browser(~~~).Set aaa (aaa,为要输入的查询条件,从datatable里取)
查询
判断查询结果
   datatable.setnextrow
next


运行这个脚本,脚本会无限循环下去啊

blanket 发表于 2011-7-14 16:25:05

datatable.("表的名"称).setnextrow

wwq2008 发表于 2011-7-14 17:10:39

结果全是第一行的数据吧!!

cabrite 发表于 2011-7-14 18:05:29

本帖最后由 cabrite 于 2011-7-14 18:17 编辑

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RunAction "Action1 [打开报盘登记]", oneIteration
wait(2)
Dim rowcount,aaa
rowcount = datatable.getrowcount
For iRow = 1 to rowcount
      datatable.SetCurrentRow iRow
      aaa =datatable.rawvalue("gongys","chaxun")
Browser("Browser").Page("Page").Frame("content").WebEdit("stockofferSearch1:stockofferSe").Set aaa
Browser("Browser").Page("Page").Frame("content").WebButton("查询").Click
wait(2)
Dim row
row=Browser("Browser").Page("Page").Frame("content").WebTable("操作").GetROProperty("rows")
IfBrowser("Browser").Page("Page").Frame("content").Check(CheckPoint("content")) Or row = 1 Then
    reporter.ReportEvent micPass,"查询功能可用","查询功能可用"
    else
    reporter.ReportEvent micFail,"查询功能存在问题","查询功能存在问题"
End If
Browser("Browser").Page("Page").Frame("content").WebButton("重置").Click
Next
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

上面是我又改的,现在的情况是,datatable里有3条数据,但是脚本运行起来之后,首先打开一个ie,走完这三条数据;然后又打开一个新IE,继续走完这三条数据。当action call properties是run one iteration only时,总共打开了3个ie,当action call properties是run on all rows时,总共打开了9个ie

脚本中gongys和chaxun分别对应如下图

cabrite 发表于 2011-7-14 18:12:31

这个倒不是回复 7# wwq2008

阳光下的橙子 发表于 2011-7-15 12:09:34

RunAction "Action1 [打开报盘登记]", oneIteration是一次调用,
你本身action Run也是一次调用

阳光下的橙子 发表于 2011-7-15 12:13:55

回复 8# cabrite
run one iteration,只把你这个action跑一次,因为你设计了一个调用,这个调用会把你当前的行数全部跑完,所以是X3次

然后run on all row,是根据datatable的行数决定你这个action要跑几次,所以是3X3=9行,楼主都是高级站友了,不应该为这种基础问题犯糊涂啊,哈哈

cabrite 发表于 2011-7-15 13:29:56

RunAction "Action1 [打开报盘登记]", oneIteration

这个只是一个之前编写好的公共脚本,做的操作是:打开ie,登陆系统,打开查询页面

应该不会影响到下面的脚本运行吧

回复 11# 阳光下的橙子

阳光下的橙子 发表于 2011-7-15 13:50:00

Dim rowcount,aaa
rowcount = datatable.getrowcount
For iRow = 1 to rowcount
      datatable.SetCurrentRow iRow
      aaa =datatable.rawvalue("gongys","chaxun")
Browser("Browser").Page("Page").Frame("content").WebEdit("stockofferSearch1:stockofferSe").Set aaa
Browser("Browser").Page("Page").Frame("content").WebButton("查询").Click
wait(2)
Dim row
row=Browser("Browser").Page("Page").Frame("content").WebTable("操作").GetROProperty("rows")
IfBrowser("Browser").Page("Page").Frame("content").Check(CheckPoint("content")) Or row = 1 Then
    reporter.ReportEvent micPass,"查询功能可用","查询功能可用"
    else
    reporter.ReportEvent micFail,"查询功能存在问题","查询功能存在问题"
End If
Browser("Browser").Page("Page").Frame("content").WebButton("重置").Click
Next

你想想看,你这套循环都做了什么事情,呵呵

cabrite 发表于 2011-7-15 14:40:01

===================================

Browser("Browser").Page("Page").Sync
Browser("Browser").Navigate "http://192.168.1.105"
Browser("Browser").Page("资源管理系统").WebEdit("login:j_id3").Set "admin"
Browser("Browser").Page("资源管理系统").WebEdit("login:j_id5").SetSecure "admin"
Browser("Browser").Page("资源管理系统").Image("login:j_id13").Click 2,2
Browser("Browser").Page("Page_2").Frame("header").Link("系统管理").Click
Browser("Browser").Page("Page_2").Frame("leftmenu").Image("plusbottom").Click
Browser("Browser").Page("Page_2").Frame("leftmenu").Image("plus").Click
Browser("Browser").Page("Page_2").Frame("leftmenu").Image("plus_2").Click
Browser("Browser").Page("Page_2").Frame("leftmenu").Link("报盘登记").Click
wait(5)
Dim rowcount
rowcount = datatable.GetRowCount
For i = 1 to rowcount
      datatable.SetCurrentRow i
      aaa = datatable.RawValue("gongys","chaxun")
Browser("Browser").Page("Page_2").Frame("content").WebEdit("stockofferSearch1:stockofferSe").Set aaa
Browser("Browser").Page("Page_2").Frame("content").Check CheckPoint("content")
Browser("Browser").Page("Page_2").Frame("content").WebButton("查询").Click
Dim row
row=browser("Browser").Page("Page_2").Frame("content_2").WebTable("操作").GetROProperty("rows")
If Browser("Browser").Page("Page_2").Frame("content").Check (CheckPoint("content")) or row=1 Then
      reporter.ReportEvent micPass,"查询功能可用","查询功能可用"
      else
      reporter.ReportEvent micFail,"查询功能存在问题","查询功能存在问题"
End If
Browser("Browser").Page("Page_2").Frame("content").WebButton("重置").Click
Next
===================================

又有新问题了,如上脚本,这个脚本运行起来只运行到蓝色字体部分,然后就结束了,弹出result,真崩溃

cabrite 发表于 2011-7-15 14:43:05

从datatable里取出查询条件,输入查询框,查询,检查查出的结果,再取下一条datatable里的数据,继续循环查询、验证

对不对。。。。



回复 13# 阳光下的橙子

阳光下的橙子 发表于 2011-7-15 15:11:45

回复 15# cabrite


    没错,你在这个循环里,已经把你datatable里的所有数据跑了一篇了,然后你的action,按照你datatable的行数,每行跑一个循环,现在你明白了吗?
假设你脚本是个农夫,脚本的内容是让他去检查datatable,datatable有3行,他就要喝3瓶水,结果这个脚本跑一次,他就要喝3瓶水,然后脚本又设置成,datatable有几行,就要跑几次,所以就变成了3X3,喝了9瓶水,如果你datatable有4行,就要跑16次了,你可以试试

阳光下的橙子 发表于 2011-7-15 15:12:12

这样解释,你还不明白,我就要去撞豆腐了,呵呵

cabrite 发表于 2011-7-15 15:47:57

明白了,咋修改,去掉for循环?
我试过,datatable有几行数据,它就弹出几个ie,很崩溃。。。。
回复 16# 阳光下的橙子

阳光下的橙子 发表于 2011-7-15 17:04:13

回复 18# cabrite


    弹出多IE的问题很好解决,你在action的开头加一句
Systemutil.CloseProcessByName "iexplore.exe"
这句能把当前所有的IE全部关掉,然后你再
Systemutil.Run "iexplore.exe","www.xxxxxx.com"
打开你想要测试的网页

循环的话,你就别用For循环了,直接用datatable控制脚本的循环好了,反正行数也不多

阳光下的橙子 发表于 2011-7-15 17:06:18

再有问题,你加我MSN把,wox1983@hotmail.com
页: [1] 2
查看完整版本: qtp利用datatable做参数化,遇到重复打开多个ie的问题