51Testing软件测试论坛

标题: 新人请教:如何对WinTreeView 的一个节点右键点击? [打印本页]

作者: goi    时间: 2007-2-28 17:28
标题: 新人请教:如何对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
1, abs_x 和abs_y 要有具体的值才可以呀。输入它们的具体值后看看;
2,如果不行,换一个函数试试看。
作者: goi    时间: 2007-3-1 10:10
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
错误信息是说对TTreeView下 的item对象不能识别,确认是否真的包含了这个项目对象,
作者: walker1020    时间: 2007-3-1 13:12
不好意思,在#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
标题: 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
标题: QTP的帮助对 GetItemProperty 的参数的说明
Item  Required. 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
因此,建议你先用 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
又仔细看了一下 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
其实 你用类似于下面的代码就得到了树的节点:
item = Window("test_window").WinTreeView("TTreeView").GetItem(0)
再考虑怎么样点击它吧
作者: walker1020    时间: 2007-3-1 13:43
如果GetItemProperty 不能解决问题 ,请看QTP 的帮助里面WinTreeView 对象的其它函数吧。试试 Select 函数。它的具体用法在 帮助里面有。
作者: goi    时间: 2007-3-1 13:49
标题: 非常感谢版主的热心帮助
我在选择Window("rule_window").WinTreeView("TTreeView").的GetItemProperty函数时,后面提示内容是(Item,property),因此我就把abs_x和abs_y作为test1的一个属性来获取了,可能对于node来说这两个属性是没有的

我再尝试一下其他方法,解决之后再贴上来与大家共享
也希望有经验的朋友们也多出出主意,帮助大家共同进步,谢谢!
作者: goi    时间: 2007-3-1 15:41
原帖由 walker1020 于 2007-3-1 13:43 发表
如果GetItemProperty 不能解决问题 ,请看QTP 的帮助里面WinTreeView 对象的其它函数吧。试试 Select 函数。它的具体用法在 帮助里面有。


OK 使用select函数解决了,谢谢大家
作者: jacky9947    时间: 2007-4-20 16:36
受益菲浅啊,谢谢
作者: lin85210    时间: 2008-8-21 19:01
标题: 回复 1# 的帖子
能够选中节点也能够打开右键,那么右键弹出了选择菜单,这个时间我还想用这个弹出的菜单(这个菜单的选项是动态的),而且获取到该窗体属于window。这时该如何做呢?




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