Saturday, 24 September 2011

Descriptive Programming In QTP

Assume that we want to perform some operation on the objects which are not present in the object repository.In such kind of situation we can use descriptive programming.

There are two ways to write descriptive programs.
01. By giving the description in the form of string arguments
02. By creating the properties collection object for description

01.By giving the description in the form of string arguments:

This is the most commonly used method.We can directly describe an object in the form of property:=value pairs instead of describing the object name.

The general syntax for this type is TestObject("PropertyName:= PropertyName", "...","PropertyValue:= PropertyValue"). Where TestObject could be WebEdit, WinEdit etc.

Consider the following code. 

<input type = "textbox" name = "txtName" -->
<input type = "radio" name = "txtName" -->

So,the descriptive code for the above samples will be, Browser("aaa").Page("bbb").WebEdit("Name:="txtName","htmi tag:=INPUT").set "quicktestprofessional"
Browser("aaa").Page("bbb").WebRadioGroup("Name:="txtName","htmi tag:=INPUT").set "quicktestprofessional"

We can also distinguish the above two object by using their index. 

Browser("aaa").Page("bbb").WebEdit("Name:="txtName","htmi tag:=INPUT","Index:=0").set "quicktestprofessional"  ---> Represent the webedit object.
Browser("aaa").Page("bbb").WebRadioGroup("Name:="txtName","htmi tag:=INPUT","Index:=1").set "quicktestprofessional" --. Represents the radio button object.

We can determine the property,value pairs by using object spy.

* Navigate Tools > Object Spy
* Once selected select the "Test Object Properties" button
* Spy on the desired object
* From the properties list not down the property values to be used in test.

02. By creating the properties collection object for description

Properties collection also does the same as the property and value pairs. The only difference is it collects all properties of a particular object in an instance of that object.So, the object can be identified by that instance of the object instead of string arguments.

In this method first we need to create the empty description as follows.
Set oDesc = Description.Create

We need to use the properties name, value and regular expressing for an object.The syntax will be oDesc(html tag).value ="INPUT".

When we use a property name for the first time the property is added to the collection and when you use it again the property is modified. By default each property that is defined is a regular expression. 

Consider the following example,
obj_Desc(“html tag”).value= “INPUT”
obj_Desc(“name”).value= “txt.*”.

This would mean an object with html tag as INPUT and name starting with txt. Now actually that “.*” was considered as regular expression. So, if you want the property “name” not to be recognized as a regular expression then you need to set the “regularexpression” property as FALSE.

oDesc(“html tag”).value= “INPUT”
oDescc(“name”).value= “txt.*”
oDesc(“name”).regularexpression= “txt.*”

This is how we create a description. Now below is the way we can use it. Browser(“aaa”).Page(“bbb”).WebEdit(obj_Desc).set “quicktestprofessional”

Assume that we have more than one element in the same page.We can use the index property to differentiate the elements.Assume that we have 2 text boxes on the same page.In that case we can use the index property as follows.

Representing 1st text box:
oDesc("html tag").value ="INPUT"
oDesc("name").value ="txt"
oDesc("index").value ="0" 

Representing 2nd text box:
oDesc("html tag").value ="INPUT"
oDesc("name").value ="txt"
oDesc("index").value ="1" 

We can also use this method to identify the child objects on the same page.Assume that we have n-number of check boxes on the same screen.By using the collection properties we can loop through the n-number of objects. 

Set oCheckBox = Description.Create
oCheckBox("html tag").value ="INPUT"
oCheckBox("type").value ="checkbox"
Dim sCheckBox,aCheckBoxes
Set aCheckBoxes= Browser("aaa").Page("bbb").ChildObjects(oCheckBox)

'Loop through the checkboxes
For each sCheckBox in aCheckBoxes
 sCheckBox.set "ON"

The above code will check all the check boxes present on the page. To get all the child objects we need to specify an object description.

When and Where to use Descriptive programming?

Below are some of the situations when Descriptive Programming can be considered useful:

1. One place where DP can be of significant importance is when you are creating functions in an external file. You can use these function in various actions directly , eliminating the need of adding object(s) in object repository for each action[If you are using per action object repository]

2. The objects in the application are dynamic in nature and need special handling to identify the object. The best example would be of clicking a link which changes according to the user of the application, Ex. “Logout <>”.

3. When object repository is getting huge due to the no. of objects being added. If the size of Object repository increases too much then it decreases the performance of QTP while recognizing a object. [For QTP8.2 and below Mercury recommends that OR size should not be greater than 1.5MB]

4. When you don’t want to use object repository at all. Well the first question would be why not Object repository? Consider the following scenario which would help understand why not Object repository
Scenario 1:
Suppose we have a web application that has not been developed yet.Now QTP for recording the script and adding the objects to repository needs the application to be up, that would mean waiting for the application to be deployed before we can start of with making QTP scripts. But if we know the descriptions of the objects that will be created then we can still start off with the script writing for testing
Scenario 2: Suppose an application has 3 navigation buttons on each and every page. Let the buttons be “Cancel”, “Back” and “Next”. Now recording action on these buttons would add 3 objects per page in the repository. For a 10 page flow this would mean 30 objects which could have been represented just by using 3 objects. So instead of adding these 30 objects to the repository we can just write 3 descriptions for the object and use it on any page.

5. Modification to a test case is needed but the Object repository for the same is Read only or in shared mode i.e. changes may affect other scripts as well.
6. When you want to take action on similar type of object i.e. suppose we have 20 textboxes on the page and there names are in the form txt_1, txt_2, txt_3 and so on. Now adding all 20 the Object repository would not be a good programming approach.


Post a Comment

Back To Top