51Testing软件测试论坛

标题: 求助:怎样获取WinlistView中的对象呢? [打印本页]

作者: 小新弦子    时间: 2011-3-3 09:07
标题: 求助:怎样获取WinlistView中的对象呢?
[attach]71716[/attach]QTP将其识别为一个WinlistView对象。点击CEO或设计的区别只是点击的坐标的位置不同。有什么方法获取"CEO"或"设计"吗?让后我可以根据循环的次数确定其坐标,然后点击。大侠们,多多指教。。。
作者: 819longjiayan    时间: 2011-3-3 09:45
没太明白你的意思。。。你这个是表格吗?如果是表格,可以使用获取表格中值的childitem方法。。还有一个getcelldata方法取值
作者: 小新弦子    时间: 2011-3-3 10:35
回复 2# 819longjiayan


    不是表格。。就是QTP将“名称”,"CEO"等整个识别为一个Winlistview,我想在想通过某个方法得到第一行的CEO中的“CEO”第二行的“设计”,通过什么方法才能得到这些值呢?
作者: shingo0109    时间: 2011-3-3 10:43
LZ是想通过得到这些名称, 然后来进行选择操作么? 还是说只是取名称
作者: 小新弦子    时间: 2011-3-3 11:07
回复 4# shingo0109


    对,就是获取名称,获取名称后我就可以通过字符串比较,然后决定下面的操作。。
作者: shingo0109    时间: 2011-3-3 14:03
LZ看看这个帖子吧, http://bbs.51testing.com/viewthr ... ghlight=winlistview
作者: 小新弦子    时间: 2011-3-3 14:36
回复 6# shingo0109


    我看到了。。还是不知道该怎么解决这个问题。。。你能明白他写的意思吗?望指教。。
作者: 17800455    时间: 2011-3-3 14:41
你录制一下,看一下qtp智能,是怎么取的。 

难道qtp录制不了吗。
作者: shingo0109    时间: 2011-3-3 14:58
本帖最后由 shingo0109 于 2011-3-3 15:00 编辑

LZ参考以下代码中的函数试试, 因为我这边用任务管理器试了下,跑到这步“ Columns(iColumn) = Obj.GetColumnHeader(iColumn) "老是报“未指定的错误”的错误, 我也不清楚原因了.

ReDim Columns(10)
Set Obj = Window("搜狗音乐盒").WinListView("SysListView32")
cColumns = Obj.ColumnCount()
For iColumn = 0 To cColumns - 1
Columns(iColumn) = Obj.GetColumnHeader(iColumn)
Next
cItems = Obj.GetItemsCount

For iItems = 0 To cItems - 1
str ="第 "&iItems+1&" 首歌曲属性列表"& vbCr
For iColumn =0 To cColumns - 1
   str = str &Columns(iColumn)&" = "& Obj.GetSubItem(iItems ,Columns(iColumn)) & vbCr
Next
Msgbox str
Next
Set Obj = nothing
作者: 小新弦子    时间: 2011-3-3 15:22
回复 8# 17800455


    是的。。点击CEO或设计唯一的区别就是点的位置不同,即坐标不同。所以我想通过循环,在循环中得到某一行的text值,如果跟我有的值相同,根据循环的次数,判断位置,就去点击相应地位置。
作者: 小新弦子    时间: 2011-3-3 15:23
回复 9# shingo0109


    我也是。所以还是不知该怎么办??
作者: shingo0109    时间: 2011-3-3 16:20
帮顶了, 等待高手答案~~
作者: june.diny    时间: 2011-3-3 16:40
查看HELP,winlistview对象有多种方法可用。
按照你描述的,可以试下以Get开头的那几个方法:GetItem,GetItemProperty,GetSubItem等等。。
作者: 小新弦子    时间: 2011-3-3 17:26
回复 13# june.diny

我知道,可是我不知道用哪个方法。。看帮助我对方法的具体作用还是不清楚。。不知道该怎么用,调了半天,还是不对。。关键是对方法的作用不清楚。。你要清楚地话帮忙想下吧。。就是通过winlistview的自身的方法实现对某一项text值的获取。
作者: shingo0109    时间: 2011-3-3 17:28
回复 13# june.diny


我这边用任务管理器试了下你说的那些方法, 如GetItem, GetColumnHeader,GetSubItem, 为啥总是报错啊?
但我用GetItemsCount和ColumnCount这2个是可以输出值的

楼上知道原因么?
作者: june.diny    时间: 2011-3-3 17:45
本帖最后由 june.diny 于 2011-3-3 17:55 编辑

[attach]71745[/attach]
借楼上的话题,以任务管理器为例:
ItemName = Dialog(..).WinListView(..).GetItem(2)

ItemName 就是要获取的值

注:GetItem括号里面的值是index,从0开始。。。
作者: june.diny    时间: 2011-3-3 17:53
回复 15# shingo0109

我试了下都可以的,要不你重启下试试
作者: liujinkui    时间: 2011-3-3 23:31
With Dialog("Windows Task").WinListView("SysListView32")
     For i = 0 To 5
             sSub = "Image Name"
             sReport = sReport + .GetSubItem(i, "Image Name") & vbTab
             sReport = sReport + .GetSubItem(i, "PID") & vbTab
             sReport = sReport + .GetSubItem(i, "CPU") & vbTab
             sReport = sReport + .GetSubItem(i, "CPU Time") & vbTab
             sReport = sReport + .GetSubItem(i, "Mem Usage")
             sReport = sReport + vbCr
        Next

         sReport = sReport + .GetSubItem("QTPro.exe", 0) & vbTab
         sReport = sReport + .GetSubItem("QTPro.exe", 1) & vbTab
         sReport = sReport + .GetSubItem("QTPro.exe", 2) & vbTab
         sReport = sReport + .GetSubItem("QTPro.exe", 3) & vbTab
         sReport = sReport + .GetSubItem("QTPro.exe", 4)
         sReport = sReport + vbCr

    End With
    Reporter.ReportEvent micDone, "Task Manager", sReport

End Sub
作者: 小新弦子    时间: 2011-3-4 11:25
回复 16# june.diny
你知道为啥Columns(iColumn) = Obj.GetColumnHeader(iColumn) "老是报“未指定的错误”的原因吗?
作者: shingo0109    时间: 2011-3-4 12:48
回复 19# 小新弦子


我也是报这个错误啊。。不知是啥原因
作者: june.diny    时间: 2011-3-4 13:23
估计又是对象重构的问题,脚本贴出来看看呢
作者: 小新弦子    时间: 2011-3-4 13:44
回复 16# june.diny


    大虾是在英文下运行的,试下在简体运行吧,我运行失败。。提示[attach]71766[/attach]。。
作者: 小新弦子    时间: 2011-3-4 13:48
回复 21# june.diny

Sub GetSubItem_Example()

With Dialog("Windows 任务管理器").WinListView("SysListView32")
     For i = 0 To 5
             sSub = "映像名称"
             sReport = sReport + .GetSubItem(i, "映像名称") & vbTab
             sReport = sReport + .GetSubItem(i, "用户名") & vbTab
             sReport = sReport + .GetSubItem(i, "会话 ID") & vbTab
             sReport = sReport + .GetSubItem(i, "CPU") & vbTab
           
             sReport = sReport + vbCr
                         msgbox sReport
    ItemName = .GetItem(i)

     msgbox ItemName
        Next



         sReport = sReport + .GetSubItem("QTPro.exe", 0) & vbTab
         sReport = sReport + .GetSubItem("QTPro.exe", 1) & vbTab
         sReport = sReport + .GetSubItem("QTPro.exe", 2) & vbTab
         sReport = sReport + .GetSubItem("QTPro.exe", 3) & vbTab
      
         sReport = sReport + vbCr
   
    End With
    Reporter.ReportEvent micDone, "Task Manager", sReport

End Sub
GetSubItem_Example()
简体的任务管理器,运行时提示参数不正确。。咋回事。。
作者: 小新弦子    时间: 2011-3-4 14:01
回复 21# june.diny

Dialog("人员权限管理").WinObject("当前角色:_2").Click 110,10
        roleName=DataTable("角色", dtLocalSheet)
        arrRoleName = Split(roleName, "_")
'        返回一个数组

'    ReDim Columns(10)
        Set obj =dialog("人员权限管理").WinListView("所有角色列表")
     '获取列数
        cColumns = Obj.ColumnCount()
'                将列名保存
        For iColumn = 0 To cColumns - 1
         Columns(iColumn) = Obj.GetColumnHeader(iColumn) 运行到这出错,下面的代码就运行不了了
        Next
'                获取行数
        cItems = Obj.GetItemsCount
'                对每一行获得其属性
'   For iItems = 0 To cItems - 1
        For iColumn =0 To cColumns - 1
           str = Obj.GetSubItem(iItems ,Columns(iColumn))
           Msgbox str
          For i = 0 To UBound(arrRoleName)
             If str=arrRoleName(i) Then
            Dialog("人员权限管理").WinButton(">").Click
                    End If
         Next
     Next
这是代码。。就是仿着那个酷狗音乐盒那个写的。。
作者: liujinkui    时间: 2011-3-7 09:17
回复 24# 小新弦子


有可能跟**版的关系,或是HP QTP10.0的一个BUG
我今天在8.2上运行一点问题没有。
作者: 小新弦子    时间: 2011-3-7 13:06
回复 25# liujinkui
恩。哎。。。今天装了一堆补丁。。好像还是不行。。。。先放放吧。。
作者: 小新弦子    时间: 2011-3-10 16:41
现在问题解决了。额啥也没动。现在winlistview的select,expand的方法都可以用了。搞不清啥原因,不过能实现我要的功能了。
作者: shingo0109    时间: 2011-3-10 17:20
回复 27# 小新弦子


    额。。。。我的还是不行, 还是报未指定的错误
作者: 小新弦子    时间: 2011-3-21 10:56
回复 28# shingo0109


    我的也是不行,只是我要处理的那个应用在用QTP录制时,可以使用select方法了,原来不可以,这样就可以使用select方法做判断了,而不用那么发杂了。。




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