goi 发表于 2007-2-28 17:28:30

新人请教:如何对WinTreeView 的一个节点右键点击?

小弟刚开始学习QTP测试C/S程序,遇到一个难题
我在WinTreeView 控件中选择了一个节点,想右键点击它打开右键菜单,但是现在我不知道这个节点的坐标

例如,
Window("test_window").WinTreeView("TTreeView").type "test1"
Window("test_window").WinTreeView("TTreeView").Click x, y, micRightBtn
这个x,y无法得到,不加坐标又不能点到正确的位置

于是我使用下面的代码:
Window("test_window").WinTreeView("TTreeView").type "test1"
Dim x,y
x=Window("test_window").WinTreeView("TTreeView").GetItemProperty("test1",abs_x)
y=Window("test_window").WinTreeView("TTreeView").GetItemProperty("test1",abs_y)
Window("test_window").WinTreeView("TTreeView").Click x, y, micRightBtn

但是运行到 dim下面一行就停止了,报告中的错误信息为:
Cannot identify the specified item of the TTreeView object. Confirm that the specified item is included in the object's item collection

因为我的WinTreeView有多层,我使用type命令直接定位到需要的节点,我怀疑是不是我GetItemProperty的参数不对?

请知道的朋友指点一下应该怎么做,谢谢!

walker1020 发表于 2007-3-1 09:14:21

1, abs_x 和abs_y 要有具体的值才可以呀。输入它们的具体值后看看;
2,如果不行,换一个函数试试看。

goi 发表于 2007-3-1 10:10:40

1, abs_x 和abs_y 要有具体的值才可以呀。输入它们的具体值后看看;

请问这个是什么意思呀,我用x=Window("test_window").WinTreeView("TTreeView").GetItemProperty("test1",abs_x)不就是想得到abs_x的值吗

2,如果不行,换一个函数试试看。
除了这个函数,还有什么方法可以点到这个节点?(节点的位置每次都不固定,但是名字是固定的test1)

另外,我这个函数的使用格式对不对,参数是不是这样写的?

谢谢!!

xiaonan 发表于 2007-3-1 11:06:52

错误信息是说对TTreeView下 的item对象不能识别,确认是否真的包含了这个项目对象,

walker1020 发表于 2007-3-1 13:12:32

不好意思,在#2发表留言时没有仔细去看GetItemProperty 这个函数的用法,只是根据以往的经验写了我的建议。
    看了goi在#3的留言,又看了帮助里对 GetItemProperty 这个函数的说明和例子后,才发现goi写的代码中GetItemProperty 函数的用法不对。

QTP的帮助对GetItemProperty 的Description 是
Returns the current value of a property for a node in the tree-view.
其语法是
   object.GetItemProperty (Item, Property)

walker1020 发表于 2007-3-1 13:13:40

QTP 提供的GetItemProperty Method (WinTreeView)示例

Sub GetItemProperty_Example()
'The following example uses the GetItemProperty method to go to report
'each node's name to the Results as it iterates over it.

sReport = ""
cTabs = -1
sPath = Dialog("Common Controls").WinTreeView("SysTreeView32").GetItem(0)
While sPath <> ""
    sTabs = ""
    For iTab = 0 To cTabs
      sTabs = sTabs & "-->"
    Next
    sReport = sReport & sTabs & Dialog("Common Controls").WinTreeView("SysTreeView32").GetITemProperty(sPath, "Text") & vbCr
    If Dialog("Common Controls").WinTreeView("SysTreeView32").GetITemProperty(sPath, "HasChildre n") Then
      Dialog("Common Controls").WinTreeView("SysTreeView32").Expand (sPath)
      sPath = Dialog("Common Controls").WinTreeView("SysTreeView32").GetITemProperty(sPath, "FirstChild")
      cTabs = cTabs + 1
    ElseIf Dialog("Common Controls").WinTreeView("SysTreeView32").GetITemProperty(sPath, "NextSibling") <> "" Then
   sPath = Dialog("Common Controls").WinTreeView("SysTreeView32").GetITemProperty(sPath, "NextSibling")
    Else
      sPath = Dialog("Common Controls").WinTreeView("SysTreeView32").GetITemProperty(sPath, "Parent")
      Dialog("Common Controls").WinTreeView("SysTreeView32").Collapse (sPath)
      cTabs = cTabs - 1
      sPath = Dialog("Common Controls").WinTreeView("SysTreeView32").GetITemProperty(sPath, "NextSibling ")
    End If
Wend
MsgBox sReport

End Sub

walker1020 发表于 2007-3-1 13:21:10

QTP的帮助对 GetItemProperty 的参数的说明

ItemRequired. A Variant value. The item name (with quotes) or numeric index (without quotes) can denote the item. The first item in a tree is numbered 0.

Item是必输项,表示变量的值。item 的名字(带有双引号)或数字索引号(不带双引号)都可以表示一个item 。一个树tree 的第一项的索引号是 0,也就是树的标号从0 开始。

walker1020 发表于 2007-3-1 13:27:05

因此,建议你先用 GetItem 函数得到WinTreeView("TTreeView") 的需要的Item,然后再使用此 GetItemProperty 函数。注意:abs_x 和abs_y 要有双引号。

代码大体如下:
item = Window("test_window").WinTreeView("TTreeView").GetItem(0)
Dim x,y
x=Window("test_window").WinTreeView("TTreeView").GetItemProperty(item ,"abs_x")
y=Window("test_window").WinTreeView("TTreeView").GetItemProperty(item,"abs_y")

[ 本帖最后由 walker1020 于 2007-3-1 13:29 编辑 ]

walker1020 发表于 2007-3-1 13:34:26

又仔细看了一下 QTP的帮助里面对 GetItemProperty Method (WinTreeView)的Property 参数的说明,发现 Property 的可选值里面 根本就没有abs_x 和abs_y !只有一个 表示 whether the tree node item's check box is selected 的 state属性值。
剩下的问题由你来解决吧。sdlkfj2

walker1020 发表于 2007-3-1 13:36:16

其实 你用类似于下面的代码就得到了树的节点:
item = Window("test_window").WinTreeView("TTreeView").GetItem(0)
再考虑怎么样点击它吧

walker1020 发表于 2007-3-1 13:43:18

如果GetItemProperty 不能解决问题 ,请看QTP 的帮助里面WinTreeView 对象的其它函数吧。试试 Select 函数。它的具体用法在 帮助里面有。

goi 发表于 2007-3-1 13:49:56

非常感谢版主的热心帮助

我在选择Window("rule_window").WinTreeView("TTreeView").的GetItemProperty函数时,后面提示内容是(Item,property),因此我就把abs_x和abs_y作为test1的一个属性来获取了,可能对于node来说这两个属性是没有的

我再尝试一下其他方法,解决之后再贴上来与大家共享
也希望有经验的朋友们也多出出主意,帮助大家共同进步,谢谢!

goi 发表于 2007-3-1 15:41:39

原帖由 walker1020 于 2007-3-1 13:43 发表
如果GetItemProperty 不能解决问题 ,请看QTP 的帮助里面WinTreeView 对象的其它函数吧。试试 Select 函数。它的具体用法在 帮助里面有。

OK 使用select函数解决了,谢谢大家

jacky9947 发表于 2007-4-20 16:36:33

受益菲浅啊,谢谢

lin85210 发表于 2008-8-21 19:01:06

回复 1# 的帖子

能够选中节点也能够打开右键,那么右键弹出了选择菜单,这个时间我还想用这个弹出的菜单(这个菜单的选项是动态的),而且获取到该窗体属于window。这时该如何做呢?
页: [1]
查看完整版本: 新人请教:如何对WinTreeView 的一个节点右键点击?