Today we will see a less talked about and not so often used ‘Dictionary Object‘ in UFT/QTP. Note that, this is not something very QTP specific. Dictionary object was developed by Microsoft and is part of VB Scripting.

What is Dictionary Object?Dictionary Object

In simple terms, Dictionary object is similar to a typical array. The difference between a dictionary object and an array is that there is a unique key associated with every item of dictionary object. This unique key can help you in calling that item as and whenever required.

What is the syntax and how can we use dictionary object?

Shown below is a typical script.

Dim dict ' Create a variable.
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "Company", "HP" ' Adding keys and corresponding items.
dict.Add "Tool", "QuickTest Pro"
dict.Add "Website", "LearnQTP"
dict.Add "Country", "India"

dict is an object of class Scripting.Dictionary.

Company-HP
Tool-QuickTest Pro
Website-LearnQTP
Country-India

are key-item pairs that were added using Add method on dict object.

Other methods available for dictionary object are Exists Method, Items Method, Keys Method, Remove Method, RemoveAll Method

Using Exists Method to check whether the key Country exists?

If dict.Exists("Country") Then
msg = "Specified key exists."
Else
msg = "Specified key doesn't exist."
End If

Using Items and Keys method to retrieve ALL items and keys respectively from inside dictionary object.

i = dict.Items ' Get the items.
k = dict.Keys ' Get the keys.
For x = 0 To dict.Count-1 ' Iterate the array.
msgbox  i(x) & " :" & k(x)
Next

Using Remove method to remove Website – LearnQTP pair from the object.

dict.Remove("Website")

Using Remove all method to clear the dictionary

dict.RemoveAll ' Clear the dictionary.

Count the number of occurrences of a character in a given string

How will you count the total number of occurrences of all characters in a given string?

So, if a string is Community. The output should be C:1, o:1, m:2, u:1, n:1, t:1, y:1
Here is the solution using Dictionary approach

Dim Str, ChkDup,Cnt,d
Set d = CreateObject("Scripting.Dictionary")

Str = "Community"

For i = 1 to Len(Str)
temp = 0
'Check if the key already exists
If d.Exists(mid(Str,i,1)) Then
	temp = d.Item(mid(Str,i,1)) 'Assign item to temp
	temp = CInt(temp) + 1 'Since temp is string convert to integer
	d.Item(mid(Str,i,1)) = temp 'Update the key
else
    d.Add mid(Str,i,1), 1 'if key doesn't exist, add it
End If
Next

sCharacters = d.Keys ' Get the keys.
iOccurrence = d.Items ' Get the items.
For x = 0 To d.Count-1 ' Iterate the array.
msgbox  sCharacters(x) & " :" & iOccurrence(x) 
Next

What are the places where it can be used?

When you want to share data between different actions in a test, dictionary object can be used. To do this you should create a reserved test object for the Dictionary object. Here is a process to set up a reserved dictionary object. [Source]

  1. Open Window’s registry by opening a Run window and entering regedit.
  2. Navigate to HKEY_CURRENT_USERSoftwareMercury InteractiveQuickTest ProfessionalMicTestReservedObjects.
  3. Create a new key (folder) named GlobalDictionary by right-clicking on the ReservedObjects key and selecting New -> Key.
  4. Under the new key, create a String value named ProgID by right-clicking on GlobalDictionary and selecting New -> String Value.
  5. Assign “Scripting.Dictionary” to the new ProgID string value by right-clicking on ProgID and selecting “Modify.”
  6. If QTP window is already open you need to close and restart it.
  7. Now to check whether dictionary object was installed successfully in registry, simple write GlobalDictionary. (don’t forget the dot) and you should see a drop-down containing all methods and properties associated with dictionary object.

QTP Dictionary Object

Why dictionary object and why not array only?

As shown in the example above, dictionary object was used with the index (key) being string. In the case of array, the index can be ONLY numeric. Then of course we have some obvious advantages like referencing a value with a meaningful keys etc.

Over to you. Have you used dictionary object in the past? Why?