mhgzs 发表于 2010-8-26 13:40:36

新手求帮忙 为什么循环执行后出错?

那位高手 有时间 帮帮忙啊 !!!最近看看了QTP 写了个脚本 但是出现了和奇怪的错位!!!哪位高手帮忙解决下 !!!
如果只执行一次(最外面的循环)没有错, 但是循环就报错了,,弄了好久没明白!!!求解 说明:代码中的Parameter("chkname")为QTPro.exe,parameter("rltpath")为一个自己设的路径 E:\result.xls
整个代码如下:

For circ = 0 to 1

systemutil.Run "C:\WINDOWS\system32\taskmgr.exe","","C:\WINDOWS\system32","open"
If dialog("Windows 任务管理器").ExistThen
Dimi ,cntc ,chknam ,roname ,mytime , mydate ,cntl
mytime = time
mydate = date
chknam =Parameter("chkname")
cntl = dialog("Windows 任务管理器").WinListView("SysListView32").GetROProperty("items count")
cntc = dialog("Windows 任务管理器").WinListView("SysListView32").ColumnCount
With dialog("Windows 任务管理器").WinListView("SysListView32")
For i = 0 To cntl - 1
dialog("Windows 任务管理器").WinListView("SysListView32").Select i
roname = dialog("Windows 任务管理器").WinListView("SysListView32").GetSelection
If chknam=roname Then
Dimfso,f
Dim resultnames ,resultvelues ,iname() ,ivelue()
Set fso = CreateObject("scripting.filesystemobject")
Set f = fso.OpenTextFile(parameter("rltpath"),8,true,-2)
ReDim iname(cntc) ,ivelue(cntc)
f.Write vbcrlf & mydate & vbtab
f.Write mytime & vbcrlf
For j = 0 to cntc - 2
iname(j) = .GetColumnHeader(j)
f.Write iname(j)&vbtab
next
iname(cntc-1) = .GetColumnHeader(cntc-1)
f.Write iname(j) & vbcrlf
For j =0 to cntc-1
iname = .GetColumnHeader(j)
ivelue(j) = .GetSubItem(i,iname(j))
f.Write ivelue(j) & vbtab
Next
For j = 0 to cntc -1
If    iname(j) = "内存使用" or   iname(j) = "内存使用" oriname(j) ="高峰内存使用" oriname(j) ="虚拟内存大小" oriname(j) ="页面缓冲池" oriname(j) ="非页面缓冲池" oriname(j) ="内存增量" Then
ivelue(j) = left (cstr ( ivelue(j)), len( ivelue(j))-1)
resultNames =resultNames +iname(j) +" (k) *"
resultVelues =resultVelues+ ivelue(j)+ "*"
elseifiname(j) = "页面错误" oriname(j) ="页面错误增量"oriname(j) ="句柄数" oriname(j) ="线程数" oriname(j) ="USER 对象" oriname(j) ="GDI 对象" oriname(j) = "I/O 读取" oriname(j) ="I/O 写入"oriname(j) ="I/O 其它" oriname(j) ="I/O 读取字节"oriname(j) = "I/O 字节" oriname(j) = "I/O 写入字节" oriname(j) ="”I/O 其他字节"then
resultNames =resultNames +iname(j) +"*"
resultVelues =resultVelues+ ivelue(j)+ "*"
Parameter("resultNames") = resultNames
Parameter("resultVelues") = resultVelues
End If
Next
Exit for
End If
next
End With
Set fso = nothing
Set f = nothing
Ifchkname <> roname Then
reporter.ReportEvent micWarning, "warming","应用程序不存在"
End If
dialog("Windows 任务管理器").Close
End If
wait (2)
Next





http://oa.jxhome.com/mail/zhangjba.nsf/fd94f1019df23fa3482572f700395c9f/d136cd03629966064825778b001cb09a/Body/0.FEC?OpenElement&FieldElemFormat=gif




提示信息见附件

[ 本帖最后由 mhgzs 于 2010-8-26 13:44 编辑 ]

mhgzs 发表于 2010-8-26 13:51:08

自己先顶一个!!

帮忙 不胜感激啊!!

wugecat 发表于 2010-8-26 14:01:40

最后一个wait时间长点试试 比如wait 10

skyzhu 发表于 2010-8-26 14:22:47

试了一下,没出截图中的错误
下面这句,iname之前是数组,直接赋值出错
iname = .GetColumnHeader(j)

后面也发现该错误。。。的确比较妖怪,2个变量值相同,类型相同,但还是报错

不过像这样的扫描纪录用QTP做界面式的本来就不太合适,内存之类的数据都应该能通过系统直接拿到的

[ 本帖最后由 skyzhu 于 2010-8-26 14:52 编辑 ]

TIB 发表于 2010-8-26 21:27:23

非report-style的listview不能用GetColumnHeader

建议通过WMI、dotNetFactory等方式取进程资源

mhgzs 发表于 2010-8-27 14:54:43

原帖由 skyzhu 于 2010-8-26 14:22 发表 http://bbs.51testing.com/images/common/back.gif
试了一下,没出截图中的错误
下面这句,iname之前是数组,直接赋值出错
iname = .GetColumnHeader(j)

后面也发现该错误。。。的确比较妖怪,2个变量值相同,类型相同,但还是报错

不过像这样的扫描纪录用QT ...
求教:怎么从系统 获得 内存之类的数据呢?可不可以写个具体点的方法 谢谢

mhgzs 发表于 2010-8-27 14:55:37

回复 5# 的帖子

WMI、dotNetFactory 这些都不懂 呵呵!!

可以帮忙整一下么?给个类子 谢谢

474241558 发表于 2010-8-27 15:53:48

回复 1# 的帖子

vbs脚本里面一定有关于系统资源方面的对象。在qtp中使用那样的对象。我的思路。

wugecat 发表于 2010-8-27 17:23:58

回复 8# 的帖子

::yiwusuoyou::: 你说的太对了

blizzardlyk 发表于 2010-8-27 20:47:18

可以通过访问WMI,获得所有进程信息,具体详见:
http://blog.csdn.net/blizzardlyk/archive/2010/08/24/5834980.aspx

sterson 发表于 2010-8-28 15:41:43

试一下:
1,将chknam与roname弹出来看一下
msgbox chknam
msgbox roname
2,试一下类型转换
If cstr(chknam)=cstr(roname) Then
页: [1]
查看完整版本: 新手求帮忙 为什么循环执行后出错?