How to enhance Tests with Descriptive Programming in QTP
A) Interact with Test Objects not stored in the Object Repository
You can also instruct QTP to perform methods on objects without referring to the Object Repository, without referring to the object�s logical name. To do this, you provide QTP with a list of properties and values that QTP can use to identify the object or objects on which you want to perform a method.
Such a programmatic description can be very useful if you want to perform an operation on an object that is not stored in the object repository. You can also use programmatic descriptions in order to perform the same operation on several objects with certain identical properties, or in order to perform an operation on an object whose properties match a description that you determine dynamically during the test run.
There are two types of programmatic descriptions.
1) You can either list the set of properties and values that describe the object directly in a test statement,
2) or you can add a collection of properties and values to a description object, and then enter the description object name in the statement.
Entering Programmatic Description Directly into Test Statements:
You can describe an object directly in a test statement by specifying property:=value pairs describing the object instead of specifying an object�s logical name.
The general syntax is:
TestObject(“PropertyName1:=ProperyValue1”, “…” , “PropertyNameX:=ProperyValueX”)
TestObject�the test object class.
PropertyName:=PropertyValue�the test object property and its value.
Each property:=value pair should be separated by commas and quotation marks.
For Example:
Window(“Text:=Myfile.txt – Notepad”).Move 50, 50
If you want to use the same programmatic description several times in one test, you may want to assign the object you create to a variable.
For Example:
Set MyWin = Window(“Text:=Myfile.txt – Notepad”)
MyWin.Move 50, 50
Using Description Objects for Programmatic Descriptions:
You can use the Description object to return a Properties collection object containing a set of Property objects. A Property object consists of a property name and value. You can then specify the returned Properties object in place of a logical name in a test statement.
To create the Properties collection, you enter a Description.Create statement using the following syntax:
Set MyDescription = Description.Create()
Once you have created a Properties object (such as MyDescription in the example above), you can enter statements to add, edit, remove, and retrieve properties and values to or from the Properties object during the test run. This enables you to determine which, and how many properties to include in the object description in a dynamic way during the test run.
Once you have filled the Properties collection with a set of Property objects (properties and values), you can specify the Properties object in place of a logical name in a test statement.
For example, instead of entering:
Window(“Error”). WinButton(“text:=OK”, “width:=50”).Click
You can enter:
Set MyDescription = Description.Create()
MyDescription(“text”).Value = “OK”
MyDescription(“width”).Value = 50
Window(“Error”).WinButton(MyDescription).Click
Retrieving ChildObjects:
You can use the ChildObjects method to retrieve all objects located inside a specified parent object, or only those child objects that fit a certain programmatic description. In order to retrieve this subset of child objects, you first create a description object and add the set of properties and values that you want your child object collection to match using the Description object.
Note: You must use the Description object to create the programmatic description for the ChildObjects description argument. You cannot enter the programmatic description directly into the argument using the property:=value syntax.
Once you have “built” a description in your description object, use the following syntax to retrieve child objects that match the description:
Set MySubSet=TestObject.ChildObjects(MyDescription)
For example, the statements below instruct QTP to select all of the check boxes on the Itinerary Web page:
Set MyDescription = Description.Create()
MyDescription(“html tag”).Value = “INPUT”
MyDescription(“type”).Value = “checkbox”
Set Checkboxes = Browser(“Itinerary”).Page(“Itinerary”).ChildObjects(MyDescription)
NoOfChildObjs = Checkboxes.Count
For Counter=0 to NoOfChildObjs-1
Checkboxes(Counter).Set “ON”
Next
Using Programmatic Descriptions for the WebElement Object:
The WebElement object enables you to perform methods on Web objects that may not fit into any other Mercury test object class. The WebElement test object is never recorded, but you can use a programmatic description with the WebElement object to perform methods on any Web object in your Web site.
For example, when you run the statement below:
Browser(“Mercury Tours”).Page(“Mercury Tours”).WebElement(“Name:=UserName”, “Index:=0”).Click
or
set WebObjDesc = Description.Create()
WebObjDesc(“Name”).Value = “UserName”
WebObjDesc(“Index”).Value = “0”
Browser(“Mercury Tours”).Page(“Mercury Tours”).WebElement(WebObjDesc).Click
QTP clicks on the first Web object in the Mercury Tours page with the name UserName.
Using the Index Property in Programmatic Descriptions:
The index property can sometimes be a useful test object property for uniquely identifying an object. The index test object property identifies an object based on the order in which it appears within the source code, where the first occurrence is 0.
Note that index property values are object-specific. Thus, if you use an index value of 3 to describe a WebEdit test object, QTP searches for the fourth WebEdit object in the page.
If you use an index value of 3 to describe a WebElement object, however, QTP searches for the fourth Web object on the page regardless of the type, because the WebElement object applies to all Web objects.
For example, suppose you have a page with the following objects:
1) An image with the name “Apple”
2) An image with the name “UserName”
3) A WebEdit object with the name “UserName”
4) An image with the name “Password”
5) A WebEdit object with the name “Password”
The description below refers to the third item in the list above, as it is the first WebEdit object on the page with the name UserName.
WebEdit(“Name:=UserName”, “Index:=0”)
The following description, however, refers to the second item in the list above, as that is the first object of any type (WebElement) with the name UserName.
WebElement(“Name:=UserName”, “Index:=0”)
B) Access Dynamic Objects during run-time
Retrieving Run-Time Object Properties:
You can use the Object property to access the native properties of any run-time object. For example, you can retrieve the current value of the ActiveX calendar�s internal Day property as follows:
Dim MyDay
Set MyDay=Browser(“index”).Page(“Untitled”).ActiveX(“MSCAL.Calendar.7”).Object.Day
Activating Run-Time Object Methods:
You can use the Object property to activate the internal methods of any run-time object. For example, you can activate the edit box�s native focus method as follows:
Dim MyWebEdit
Set MyWebEdit=Browser(“Mercury Tours”).Page(“Mercury Tours”).WebEdit(“username”).Object
MyWebEdit.focus
Many More Articles on HP QuickTest Professional
An expert on R&D, Online Training and Publishing. He is M.Tech. (Honours) and is a part of the STG team since inception.