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 file located in the <UFT One installation folder>CodeSamplesPlus folder.

' ******************************** 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