Iterating through items in a tree control using the GetTestData method

This topic provides an example of using HCL OneTest UI's GetTestData method to programmatically access the values on the branches of a tree control.

The following example tests against the Classics Java application:

#Region " Script Header "
' Functional Test Script
' author Administrator
Imports Microsoft.VisualBasic
Imports Rational.Test.Ft
Imports Rational.Test.Ft.Object.Interfaces
Imports Rational.Test.Ft.Object.Interfaces.SAP
Imports Rational.Test.Ft.Object.Interfaces.Siebel
Imports Rational.Test.Ft.Script
Imports Rational.Test.Ft.Value
Imports Rational.Test.Ft.Vp
#End Region

Public Class GetTreeDataExample 
    Inherits GetTreeDataExampleHelper

    'Script Name   : GetTreeDataExample
    'Generated     : Jul 17, 2006 3:25:22 PM
    'Description   : Functional Test Script
    'Original Host : Windows XP x86 5.1 build 2600 Service Pack 2 

    'since  2006/07/17
    'author Administrator

    Public Function TestMain(ByVal args() As Object)
        ' Turn off Log Viewer for this example
        SetOption(IOptionName.BRING_UP_LOGVIEWER, False)

        'Start Classics Java Application
        StartApp("ClassicsJavaA")

        ' Wait for tree to appear
        Tree2().WaitForExistence()

        ' Display available test data types available from tree
        System.Console.WriteLine(String.Format("Available Tree Data Types: {0}", Tree2().GetTestDataTypes()))

        ' Declare variables for tree
        Dim CdTree As ITestDataTree
        Dim CdTreeNodes As ITestDataTreeNodes
        Dim CdTreeNode() As ITestDataTreeNode

        ' Variables to hold tree data
        CdTree = Tree2().GetTestData("tree")
        CdTreeNodes = CdTree.GetTreeNodes()
        CdTreeNode = CdTreeNodes.GetRootNodes()


        ' Print out total number of nodes
        System.Console.WriteLine("Tree Total Node Count: " + CdTreeNodes.GetNodeCount())
        System.Console.WriteLine("Tree Root Node Count : " + CdTreeNodes.GetRootNodeCount())

        ' Iterate through tree branches; this is a recursive method.

        Dim I As Integer

        For I = 0 To CdTreeNode.Length - 1
            ShowTree(CdTreeNode(I), 0)
        Next I

        ' Shut down Classics Java Application
        ClassicsJava(ANY, MAY_EXIT).Close()
    End Function

    Public Sub ShowTree(ByVal Node As ITestDataTreeNode, ByVal _
        Indent As Integer)
        ' Recursive method to print out tree nodes with proper
        ' indenting.

        ' Determine number of tabs to use - to properly indent tree
        Dim TabCount As Integer
        IIf(Indent < Tabs.Length(), TabCount = Indent, TabCount = Tabs.Length())

        ' Print out node name + number of children
        System.Console.WriteLine(Tabs.Substring(0, TabCount) + Node.GetNode() + " (" + Node.GetChildCount() + " Children)")

        ' Determine if node has children; recursively call this same
        ' method to print out child nodes.
        Dim Children() As ITestDataTreeNode = Node.GetChildren()
        Dim ChildCount As Integer

        IIf(ChildCount <> 0, ChildCount = Children.Length, ChildCount = 0)

        Dim I As Integer

        For I = 0 To ChildCount - 1
            ShowTree(Children(I), Indent + 1)
        Next I
    End Sub

    ' String of tabs used to indent tree view
    Const Tabs As String = _
    "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"

End Class


On the first screen of this application is a Java Swing JTree component, which lists five composers. The next level down lists CDs available for the selected composer. The code in this sample extracts the values from all of the branches of the tree and displays them in the console window.

The first step to extracting the data is to use the GetTestData method to extract the data from the control. This is done with the following syntax:


     Dim CdTree As ITestDataTree
     CdTree = Tree2().GetTestData("tree")

The next step is to create an array that contains all of the nodes on the tree. This is done as follows:


     Dim CdTreeNodes As ITestDataTreeNodes
     Dim CdTreeNode As ITestDataTreeNode()
 
     CdTreeNodes = CdTree.GetTreeNodes()
     CdTreeNode = CdTreeNodes.GetRootNodes()

Note that this is a two-step process. First, you must use the GetTreeNodes method to return a TreeNodes object. Then you can call the GetRootNodes method to extract an array of the root nodes for the tree.

With the tree nodes in hand, you can use recursion to walk though each node to determine its value and the number of direct children it contains. This is done in the recursive method ShowTree. A recursive method is a method that calls itself, and is an efficient way to walk through a tree structure. To extract the value of the node, the GetNode method is used. To extract the number of children contained by the node, the GetChildCount method is used. In the example, this is done with the following code:


     System.Console.WriteLine(Tabs.Substring(0, TabCount) + Node.GetNode() + " (" + Node.GetChildCount() + " Children)")

Note the additional coding provided in the custom ShowTree method is to enable a formatted printing using tabs to indicate the indentation of the tree.