Dictionary Object in QTP. A complete guide.

Updated On Jul 8, 2014 by

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

What is 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.

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.

What are the other places where it can be used?

Alex Dinu has written a good article where he found the usefulness of dictionary  object. Microsoft has another nice article on where Dictionary Object can be used.

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

Welcome new readers: Download the Free eBook!

Ankur JainI am Ankur Jain, the owner of LearnQTP and founder of a software organization. This site is run, maintained and updated by me and my team. Feel free to take a look around, you may want to start with What is QTP? 

You can connect with me on my Google+ page. 

Please enter your first name and email address below to instantly download the eBook on Optimizing QTP Scripts. In future, we will make sure you get new tips & tricks on QTP delivered direct to your email box.



Share This:

26 Comments

  1. Shivaji Rao

    Can we create dictionary objects array??

  2. Uma Mahesh

    Good article Ankur, Thank you for the post.

    do we have any option to arrange an array in ascending or descending, deleting duplicates

    Please help regarding this.

    Regards
    Uma Mahesh

  3. Hi Ankur,

    I want to compare 2 text files using QTP. Also it should be line by line comparison.
    Could you please help me on the same?

    Thanks & Regards

  4. udham Singh

    where exacatly we use dictioanry objects in frame work and moreover i never use Actions I always prefer functions so can anyone give me the real scenario where we use dictionary objects?If possible kindly explain me in relation with framework?

  5. Scott Genevish

    Kiran: http://bit.ly/QJW6YA

    -Scott

  6. Kiran Lamdande

    Please Tell Me Hot to Retrieve (Return) Keys And Items From Dictionary Object. I Want to print all values of Keys and Items using Print or Msgbox

  7. Scott Genevish

    Removing duplicates is easier with the .Item method rather than messing with .Exists. Just call:

    myDict.Item(“keyname”) = “value”

    If the keyname does not exist, it will be added, otherwise the value will be updated.

  8. SACHIN

    I AM HAVING PROBLEM,
    IS IT POSSIBLE TO STORE COLLECTION INTO DICTIONARY
    IF YES THEN,WHAT IS PROCEDURE FOR STORING COLLECTION IN TO DICTIONARY AND RETRIEVING IT

  9. shruti

    good one

  10. Ujas Doshi

    Hi All,

    I have used dictionary object to remove duplicates in an array. I ll paste the code here. I hope it helps.

    here, I have 2 arrays, TC() and Status()

    TC contains test case IDs and Status contains their respective status. Of course, a TC ID can be repeated multiple time having multiple statuses like “Test Passed” or “Test Failed”.

    My objective was to create a file that has the final status. If all the statuses for a test case is “Test passed”, it passes. Else, it is failed.

    The following function converts the array to a dictionary object and removes the duplicated and also consolidates the status holding only the final status.

    Thus, it is ready to be pasted to an excel file and sent to the manager.

    Public Function converToDictionary( TC, Status)
    Dim dict, j, k
    k = Ubound(TC)
    msgbox k
    Set dict = CreateObject(“Scripting.Dictionary”)
    For j = 0 to k
    If dict.Exists(TC(j)) then
    If dict(TC(j)) = “Test Passed” then
    dict.Remove(TC(j))
    dict.add TC(j), Status(j)
    End If
    Else
    dict.add TC(j), Status(j)
    End If
    ‘strMsg = strMsg & TC(j)& ” : “& dict.Item(TC(j)) & vbcr
    Next
    Set converToDictionary = dict
    End Function

  11. kiran kumar

    hi,

    How do companies go for selecting the framework, what factors do they consider seleting a framework.

  12. Manoj

    Hi Friends,
    Please suggest How to select Automation framework? Which factors we need to consider while seleting Automation framework?

  13. Sandeep Khopade

    Does it decrese performance of system ?

  14. Fidel Raj

    Please ignore my above comment. Analyzed a little bit and found out that arrays can be used for sharing data between Actions.

    Instead of using ProgID as “Scripting.Dictionary”, use ProgID as “System.Components.ArrayList”.

    This will work only if you have .Net Framework installed on your comp.

  15. Fidel

    I dont think you can get similar functionality (in terms of sharing values between action) using arrays.

  16. Scott Genevish

    Getting all keys/values is a bit cleaner with a For Each loop:

    Instead of:
    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

    Try:
    For Each key in dict.Keys
    msgbox key & ” : ” & dict(key)
    Next

    • Ankur

      @Scott: Agreed. In fact while working on arrays this looks cleaner, just a matter of habit.

  17. Ashfaq Dhanakwala

    Hi,
    Ankur Suppose on a particular PC I create the reserved
    Object as specified by u.

    Suppose I try to Run the script on Some other PC Where this object is not created wheter my script will run? I doubt require comments from u

  18. Hi Ravi,

    You get a Dictionary object in return.

    Set myDictionary = GetDataAndReturnDictionary (…)
    msgbox myDictionary(“myDataBaseField”)

  19. Ravi

    Stefan, Thats a good concept to use. But I doubt on how to receive the return values from that function. Do I need to create an object of type dictionary and get the values from it.

  20. sujan

    will the bitmap checkpoint returns any value ie if the result is pass then it should return one value else it should return other value

  21. Rotsa_lilmode

    The article by Alex is very nice and informative. But I can’t image he used the .Add method for all 300k items. Could someone explain what method is used because his examples show it as a hard coded method.

  22. Thats a good concept Ankur…

  23. In case you want to extend the capabilities of Dictionary object the below article demonstrates the same

    http://knowledgeinbox.com/articles/vbscript/extending-dictionary-object/

  24. Ankur

    Good one Stefan. That’s another nice use.

  25. Hi,

    Here is an example of creating a Dictionary out of a DB record set: http://abouttesting.blogspot.com/2008/01/create-dictionary-object-from-record.html

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>