QTP打开WinTree中的指定节点

上一篇 / 下一篇  2013-07-28 02:27:43 / 个人分类:QTP自动化笔记

    有的程序制作菜单目录树时会使用WinTree控件,我们想打开目录树中的某个节点时,该如何去做呢?方法如下:
(1)按照节点目录顺序一级一级的展开节点所在的目录(使用WinTree的Expand方法)
   Expand方法参数有两种类型:一种是目录的名称,一种是目录的序号,由于目录的序号会随当前展开的目录的不同而可能会变化,所以我们可以使用目录的名称作为参数,那么如何知道我们想要的节点的目录名称是什么呢,当我们用spy试图去获取WinTree某个节点时,我们会发现没法定位到该节点,只能定位到WinTree控件范围,不必惊慌,先用spy把WinTree的属性获取到,我们会看见WinTree中有一个属性selection,仔细观察它的属性值,属性值刚好是WinTree中当前焦点所定位到的节点的目录名称,所以利用这个特性去获取我们想要的节点目录名称,比如我们想获取节点A的目录名称,我们先展开节点A的父目录,用鼠标点击选中节点A,然后用SPY去获取此时WinTree的属性,selection属性的属性值就是节点A的目录名称,使用的时候直接copy获取到的selection属性值即可,记住不要自己手写(手写可能会出错,比如漏掉空格等),直接Copy。
    由于我们获取到的节点A的目录名称,如果我们直接打开这个目录时,可能会出错,为什么呢?因为可能我们程序执行的时候节点A是被隐藏的,没有被展开,所有我们必须把节点A的父节点展开,使节点A显示出来,那如何展开呢?仔细观察刚才获取到的节点A的selection属性值,我们会发现,父节点和子节点间是用分号(;)隔开的,所有我们可以利用这一特性,以分号为标记,将selection的属性值拆分成数字,然后利用expand方法循环打开节点A的的上层节点。

(2)展开节点完成后,选择节点(使用WinTree的Select方法)
    需要打开的节点的上层节点均展开,需要选择的节点显示出来后,我们可以利用WinTree的Select方法选择节点了,参数可以使用节点的目录序号或者名称,由于序号可能会变,所以直接使用我们上一步获取到的节点的selection的属性值即可。
 
以下是按照以上思路封装的一个选择节点的函数:
'********************************************************
'功能:选择指定WinTree目录树节点
'参数:obj_WinTree - WinTree对象
'     NodeFullPath - WinTree节点目录树完整路径
'返回值:布尔值(True - 成功打开指定的节点;False - 打开指定节点失败
'调用方法:Ret = Select_WinTreeNode(obj_WinTree,NodeFullPath)
'作者:虎肖至尊
'时间:2013-07-28
'********************************************************
Function Select_WinTreeNode(obj_WinTree,NodeFullPath)
 Dim arr_WinTreeNode,WinTreeNode
 On Error Resume Next
 If Trim(NodeFullPath) <> "" Then
  arr_WinTreeNode = Split(NodeFullPath,";")
  '逐级展开目录树节点
  For i = 0 To Ubound(arr_WinTreeNode)
   If i = 0 Then
    WinTreeNode = arr_WinTreeNode(i)
   Else
    WinTreeNode = WinTreeNode & ";" & arr_WinTreeNode(i)
   End If
   '展开节点
   obj_WinTree.Expand WinTreeNode
   If Err.Number <> 0 Then
    '展开节点失败,退出函数
    Select_WinTreeNode = False
    Reporter.ReportEvent micFail,"展开目录-"&WinTreeNode,"展开目录时报错,错误信息:" & Err.Description
    Err.Clear
    Exit Function
   Else
    Reporter.ReportEvent micPass,"展开目录-"&WinTreeNode,"展开目录成功"
   End If
   
  Next
  
  '选择目录树中的节点
  obj_WinTree.Select NodeFullPath
  Wait 2
  Act_selection = obj_WinTree.GetROProperty("selection")
  '判断是成功选择指定节点
  If Err.Number = 0 Then
   If Act_selection = NodeFullPath Then
    '选择指定节点成功
    Select_WinTreeNode = True
    Reporter.ReportEvent micPass,"打开目录-"& NodeFullPath,"成功打开"
   Else
    Select_WinTreeNode = False
    Reporter.ReportEvent micFail,"打开目录-"& NodeFullPath,"打开失败,预期打开["&NodeFullPath&"],实际打开["&Act_selection&"]"
   Err.Clear
   End If
  Else
   '选择指定节点失败
   Select_WinTreeNode = False
   Reporter.ReportEvent micFail,"打开目录-"& NodeFullPath,"打开目录时报错,错误信息:" & Err.Description
   Err.Clear
  End If
 Else
  Select_WinTreeNode = False
  Reporter.ReportEvent micFail,"Select_WinTreeNode函数NodeFullPath参数检查","NodeFullPath参数值为空"
  Set wsh = CreateObject("Wscript.Shell")
  wsh.Popup "Select_WinTreeNode(obj_WinTree,NodeFullPath)参数NodeFullPath不能空或空字符串",10
  Set wsh = Nothing
 End If
End Function
 
实例:
需求:选择windows资源管理器目录菜单桌面;我的电脑;本地磁盘 (C:);Documents and Settings下的Administrator
前置条件:先手工打开windows资源管理器
 
'描述Window对象
Set WindowDesc = Description.Create()
WindowDesc("regexpwndclass").Value = "ExploreWClass"
'描述WinTree对象
Set WinTreeViewDesc = Description.Create()
WinTreeViewDesc("nativeclass").Value = "SysTreeView32"
 
Set obj_WinTree =  Window(WindowDesc).WinTreeView(WinTreeViewDesc)
NodeFullPath = "桌面;我的电脑;本地磁盘 (C:);Documents and Settings;Administrator"
Call Select_WinTreeNode(obj_WinTree,NodeFullPath)

TAG: QTP qtp WinTree

cms19851001的个人空间 引用 删除 cms19851001   /   2014-04-03 09:50:56
5
 

评分:0

我来说两句

Open Toolbar