Useful Web Table Functions

Following are functions that may be useful when working on Web Tables. The following examples can be found in the WebTableUsefullFunctions.vbs and WebTableUsefullFunctions.py files located in the <Installdir>\CodeSamplesPlus folder.

VBScript sample

Copy code
' ******************************** Function Library *********************************

' Registering both functions
RegisterUserFunc "WebTable", "ObjectsByMicClass", "ObjectsByMicClass"
RegisterUserFunc "WebTable", "ItemByKeyColumn", "ItemByKeyColumn"

' Function: ObjectsByMicClass
' Description: Returns a collection of objects. All the objects in a
' WebTable that have the specified MicClass
' Return Value: A collection of objects
' Arguments:
' Obj - Test Object (WebTable)
' micClass - The micClass of the objects to retrieve
'---------------------------------------------------------------------------------------------------------
Function ObjectsByMicClass(Obj, micClass)
    Set Table = Obj
    ' Create a collection object to hold the items
    Set objCollection = CreateObject("Scripting.Dictionary")
    ' Go over all the cells in the table, and look for objects with the specified micClass
    For row=1 to Table.RowCount
        ColumnCount=Table.ColumnCount(row)
        For col=1 to ColumnCount
            For ItemIndex=0 to Table.ChildItemCount(row, col, micClass)-1
                Set childItem=Nothing
                Set childItem = Table.ChildItem(row, col, micClass, ItemIndex)
                If Not childItem is Nothing Then
                    ' If the cell contains a micClass object, add it to the collection
                    ItemKey = objCollection.Count + 1
                    objCollection.Add ItemKey, childItem
                End if
            Next
        
    
    Set ObjectsbyMicClass = objCollection
End Function


' Function: ItemByKeyColumn
' Description: Returns an item from a column, based on the value of a
' key column
' Return Value: Object
' Arguments:
' Obj - Test Object (WebTable)
' KeyColumnIndex - Index of the KeyColumn
' KeyColumnValue - Value to search for in the key column
' KeyItemIndex - Index of the value in the key column (if there is
' more than one). If 0, the first item will be used.
' TargetColumnIndex - Column from which to retrieve the target item
' micClass - The micClass of the target item
' TargetItemIndex - Index of the target item to retrieve (if there is
' more than one). If 0, the first item will be used.
' ----------------------------------------------------------------------------------------------------
Function ItemByKeyColumn(Obj, KeyColumnIndex, KeyColumnValue, KeyItemIndex, TargetColumnIndex, micClass, TargetItemIndex)
    Set Table = Obj
    rowCount = Table.RowCount
    ' If TargetItemIndex was not specified, use 1 as default
    If TargetItemIndex < 1 Then
        TargetItemIndex = 1
    End If
    ' If KeyColumnIndex was not specified, use 1 as default
    If KeyItemIndex < 1 Then
        KeyItemIndex = 1
    End If

    ' Look for KeyColumnValue in the key column to determine from which
    ' row to retrieve the target item
    Row = 0
    foundIndex = 0
    While Row <= RowCount And foundIndex < KeyItemIndex
        Row = Row + 1
        CellData = Table.GetCellData(Row, KeyColumnIndex)
        If CellData = KeyColumnValue Then
            foundIndex = foundIndex + 1
        End If
    Wend
    If foundIndex < KeyItemIndex Then
        Exit Function
End If

    ' Now that we know the row, retrieve the item (according to its micClass)
    ' from the target column.
    ChildItemsCount = Table.ChildItemCount(Row, TargetColumnIndex, micClass)
    If ChildItemsCount >=1 And ChildItemsCount >= TargetItemIndex Then
    Set GetItemByKeyColumn = Table.ChildItem(Row, TargetColumnIndex, micClass, TargetItemIndex-1)
    End If
End Function

' ******************* Examples that use these functions ******************************

' Using the ItemByKeyColumn function
Set obj = Browser("Table with objects").Page("Itinerary: Booking site").WebTable("Acapulco to Zurich").ItemByKeyColumn(1,"FLIGHT",2,3,"WebElement",1)
msgbox obj.GetROProperty("innerhtml")

' Using the ObjectsByMicClass function
Set collection = Browser("Browser").Page("Page").WebTable("Table").ObjectsByMicClass("WebCheckBox")
For i=1 to collection.count
    If collection(i).GetROProperty("checked") Then
        collection(i).Set "OFF"
    Else
        collection(i).Set "ON"
    End If
Next

Python sample

Copy code
# Registering both functions
RegisterUserFunc("WebTable", "ObjectsByMicClass", "ObjectsByMicClass")


def ObjectsByMicClass():
    BeginRowStr = "1904956"
    rowCount = Browser("Test Table | Practice").Page("Test Table | Practice").WebTable("ID").RowCount()
    for i in range(2, rowCount + 1):
        cellData = Browser("Test Table | Practice").Page("Test Table | Practice").WebTable("ID").GetCellData(i, 1)
        if cellData == BeginRowStr:
            colCount = Browser("Test Table | Practice").Page("Test Table | Practice").WebTable("ID").ColumnCount(i)
            for j in range(2, colCount):
                cellData = Browser("Test Table | Practice").Page("Test Table | Practice").WebTable("ID").GetCellData(i, j)
                print(cellData)
                if cellData == "Course Name":
                    cellLink = Browser("Test Table | Practice").Page("Test Table | Practice").WebTable("ID").ChildItem(i, j, "Link", 0)
                    wait(5)
                    cellLink.Click()
                    break
            break


collection = Browser("Test Table | Practice").Page("Test Table | Practice").WebTable("ID").ObjectsByMicClass("MyTable")
for i in range(1, 5):
    collection(i).GetROProperty("checked")