You are on page 1of 79

1) Testing Process of QTP

QTP (QuickTest Professional) lets you create tests and business components by
recording operations as you perform them in your application.
Test - A compilation of steps organized into one or more actions, which we can use to
verify that our application performs as expected. A test is composed of actions (3 kinds of
actions are there in QTP Non-reusable action, Reusable action and External action).

1) First step is Planning


Before starting to build a test, you should plan it and prepare the required infrastructure.
For example, determine the functionality you want to test, short tests that check specific
functions of the application or complete site.
Decide how you want to organize your object repositories.

2) Second step in QTP is Creating Tests or Components


We can create a test or component by
a) Either recording a session on your application or Web site.
As we navigate through the application or site, QuickTest graphically displays each step
we perform as a row in the Keyword View. The Documentation column of the Keyword
View also displays a description of each step in easy-to-understand sentences. A step is
something that causes or makes a change in your site or application, such as clicking a
link or image, or submitting a data form.
OR
b) Build an object repository and use these objects to add steps manually in the Keyword
View or Expert View. We can then modify your test or component with special testing
options and/or with programming statements.

3) Third step is
Inserting checkpoints into your test or component.
A checkpoint is a verification point that compares a recent value for a specified property
with the expected value for that property. This enables you to identify whether the Web
site or application is functioning correctly.

4) Fourth step is
Broaden the scope of your test or component by replacing fixed values with parameters.
To check how your application performs the same operations with different data you can
parameterize your test or component.
When you parameterize your test or component, QuickTest substitutes the fixed values in
your test or component with parameters
Each run session that uses a different set of parameterized data is called an iteration.
We can also use output values to extract data from our test or component. An output value
is a value retrieved during the run session and entered into the Data Table or saved as a
variable or a parameter. We can subsequently use this output value as input data in your
test or component.
We can use many functional testing features of QuickTest to improve your test or
component and/or add programming statements to achieve more complex testing goals.
5) Fifth step is running the test
After creating test or component, we run it.
Run test or component to check the site or application.
When we run the test or component, QuickTest connects to your Web site or application
and performs each operation in a test or component, checking any text strings, objects, or
tables you specified. If we parameterized the test with Data Table parameters, QuickTest
repeats the test (or specific actions in your test) for each set of data values we defined.
Run the test or component to debug it.
We can control the run session to identify and eliminate defects in the test or component.
We can use the
Step Into,
Step Over,
And Step Out
commands to run a test or component step by step.
We can also set breakpoints to pause the test or component at pre-determined points.
We can view the value of variables in the test or component each time it stops at a
breakpoint in the Debug Viewer.

6) Sixth step is analyzing the results


After we run test or component, we can view the results.
? View the results in the Results window.
After running the test or component, we can view the results of the run in the Test Results
window. We can view a summary of the results as well as a detailed report.
? Report defects identified during a run session.
If Quality Center is installed, we can report the defects fond out to a database. We can
instruct QuickTest to automatically report each failed step in the test or component, or we
can report them manually from the Test Results window.
-----------------------------------------------------------------------------------------------------------
-
2) Understanding Test Object Model

Test object Model is a set of object types or Classes that QuickTest uses to represents the
objects in our application.

A test object class comprises of a list of properties that can individually (uniquely)
identify objects of that class and a set of appropriate methods that QuickTest can record
for it.

Test Object Class


Properties Methods

A test object is an object that QuickTest creates in the test to correspond to (represent)
the actual object in the application. QuickTest uses the stored information about the
object during the run session to identify and check the object.

A run-time object is the real (actual) object in the application or Web site on which
methods are performed during the run session.

Properties and methods of objects:

The property set for each test object is created and maintained by QuickTest. The
property set for each run-time object is created and maintained by the object architect
(creator) (Microsoft for Internet Explorer objects, Netscape for Netscape objects).

Similarly, methods of test objects are methods that QuickTest recognizes and records
when they are executed (performed) on an object while we are recording, and that
QuickTest executes when the test or component runs. Methods of Run-time object are the
methods of the object in the application as defined by the object architect (creator). We
can access and execute run-time object methods using the Object property.

Some important points to remember about methods and properties :

Each test object method we execute (perform) while recording is recorded as a


separate step in the test. When we run the test, QuickTest executes (performs) the
recorded test object method on the run-time object.
Properties of test object are captured from object while recording. QuickTest uses the
values of these properties to identify runtime objects in the application during a run
session.
Property values of objects in the application may change .To make the test object
property values match the property values of the run-time object, we can modify test
object properties manually while designing the test or component or using SetTOProperty
statements during a run session. We can also use regular expressions to identify property
values.
We can view or modify the test object property values that are stored with the test or
component in the Object Properties or Object Repository dialog box.
We can view the syntax of the test object methods as well as the run-time methods of
any object on our desktop using the Methods tab of the Object Spy.
We can retrieve or modify property values of the TEST OBJECT during the run
session by adding GetTOProperty and SetTOProperty statements in the Keyword View or
Expert View. We can retrieve property values of the RUNTIME OBJECT during the run
session by adding GetROProperty statements.

If the available test object methods or properties for an object are not sufficient or they do
not provide the functionality we need, we can access the internal methods and properties
of any run-time object using the Object property. We can also use the attribute object
property to identify Web objects in the application according to user-defined properties.

3) Understanding QTP Object properties

QuickTest learns some properties for every test object. These are mandatory properties. If
mandatory properties are not enough (to uniquely identify an object), QuickTest adds
some assistive properties (one at a time until a unique description is created).

If QTP is unsuccessful to identify an object uniquely with both mandatory and assistive
properties it learns what is called ordinal identifier.

If QTP anyhow learns an ordinal identifier, it will use it during the run session and that
too if the learned description (mandatory & assistive properties) and the Smart
Identification mechanism are not enough to uniquely identify the object in your
application. There is a drawback to ordinal identifier. Because ordinal property value is a
relative value and is accurate only in relation to the other objects displayed when
QuickTest learns an object, changes in the layout or composition of your application page
or screen could cause this value to change, even though the object itself has not changed
in any way.

When you run a test, QTP looks for the object that matches the description it learned (all
the mandatory and/or assistive properties in the object repository). If failed QTP uses
smart identification mechanism. If both the learned description and smart identification
fails, QTP uses ordinal identifier.

In order to configure the mandatory, assistive, and ordinal identifier properties and to
enable and configure the Smart Identification mechanism, you can use Object
Identification dialog box (Tools > Object Identification).

4) Actions in QTP

a) QTP Actions:

Actions break up the test into logical sections/units such as specific activities that we
perform in our application.

When we create a new test, it contains a call to one action. By breaking up the tests into
calls to multiple actions, we can design more modular and well organized and
professional tests. An action has its own test script, containing all of the steps recorded in
that action, and all objects in its local object repository. An action is stored with the test in
which you created it.

If you create a test in which you log into the system (email), check inbox, and then log
out of the system (email), your test might be structured as shown—one test calling three
separate actions:
Test 1 Actions stored with Test 1
Call to action 1 ---> Action 1(Logging In)
Call to action 2 ---> Action 2(Checking Inbox Mails)
Call to action 3 ---> Action 3(Logging Out)

Actions make it possible to parameterize and iterate over specific elements of a test. They
also make it easier to re-record steps in one action when part of your application changes.
For every action called in the test, QuickTest creates a corresponding action sheet in the
Data Table so that we can enter Data Table parameters that are specific to that action only.

Three types of actions are:

Non-reusable action This non reusable action can be called only once and that too in
the test with which it is stored.

Reusable action Reusable actions are like functions in any programming language. If
there is a process that needs to be included in several tests, we can record, modify, and
enhance the steps of the process and save them in a reusable action. Then we can call the
action from other tests, rather than recording, modifying, and enhancing the same steps
each time. It can be called several times by the test with which it is stored (the local test),
as well as by other tests.

Deleting a reusable action that is called by other tests will cause those tests to fail.

External action is a reusable action stored with another test. External actions are read-
only in the calling test, but we can choose to use a local, editable copy of the Data Table
information for the external action. When a call to an external action is inserted, the
action is inserted in read-only format

We can create an additional call to any reusable or external action in the test by pressing
CTRL while we drag and drop the action to another location at a parallel (sibling) level
within the test.

By default, new actions are non-reusable. Each action created in a test can be marked as
reusable or non-reusable.

When we run a test with multiple actions, the test results are divided by actions within
each test iteration so that we can see the outcome of each action, and can view the
detailed results for each action individually.

If you expect other users to open your tests and all actions in your tests are stored in the
same drive, you should use relative paths for your reusable actions so that other users will
be able to open your tests even if they have mapped their network drives differently.

b) Actions Input/Output Parameters:


Those who are still confused about input parameters to actions and output values from
actions, just have a look at these examples, these act as a foundation for action input and
output values (this is ONE of the many ways, of course there can be other ways of doing
the things I have done below).

i) Action output value (value returned by a called action) can be stored in a variable.

Open a new test. By default, it will have Action1.

Go to Insert (Menu) -> Call to New Action, to add a new action at the end of the test.

Now we have Action1 and Action2 in this test.

In the Keyword View, right click on Action1 and choose Action Properties.

Go to Parameters tab and create input variable in_a1_1 with Type as Number. Rest
everything be default.
(To create an input variable, you have to click on ‘+’ sign which is on the right hand side
of Input parameters section).

Create another input variable in_a1_2, same as above.

In the Parameters tab, also create one output variable out_a1_1 with Type as Number
(To create an output variable, you have to click on ‘+’ sign which is on the right hand side
of Output parameters section).

In the Expert view of Action1 type:

s1=parameter("in_a1_1")
s2=parameter("in_a1_2")
parameter("out_a1_1")=s1+s2

In the Expert view of Action2 type:

(When you copy this below code in Expert view of Action2, it may give you a warning
that it will make Action1 reusable, just click on Ok)

RunAction "Action1", oneIteration, 2,2, var1


msgbox var1

To Run this test make sure Action2 is selected / highlighted if you are in the Keyword
View or Action2 is selected from the dropdown above if you are in the Expert View and
then choose Automation (Menu) -> Run Current action.
ii) Action output value (value returned by a called action) can be stored in data table
column.

Open a new test. By default, it will have Action1.

Go to Insert (Menu) -> Call to New Action, to add a new action at the end of the test.

Now we have Action1 and Action2 in this test.

In the Keyword View, right click on Action1 and choose Action Properties.

Go to Parameters tab and create input variable in_a1_1 with Type as Number. Rest
everything be default.
(To create an input variable, you have to click on ‘+’ sign which is on the right hand side
of Input parameters section).

Create another input variable in_a1_2, same as above.

In the Parameters tab, also create one output variable out_a1_1 with Type as Number
(To create an output variable, you have to click on ‘+’ sign which is on the right hand side
of Output parameters section).

In the Expert view of Action1 type:

s1=parameter("in_a1_1")
s2=parameter("in_a1_2")
parameter("out_a1_1")=s1+s2

In the Expert view of Action2 type:

(When you copy this below code in Expert view of Action2, it may give you a warning
that it will make Action1 reusable, just click on Ok)

RunAction"Action1", oneIteration, 2, 2, DataTable("Action1_out",dtGlobalSheet)

In the Global Data Sheet, where you have column names as A, B and so on, double click
on A,

It will open Change Parameter Name box,

Enter the parameter name as Action1_out and click Ok.

To Run this test make sure Action2 is selected / highlighted if you are in the Keyword
View or Action2 is selected from the dropdown above if you are in the Expert View and
then choose Automation(Menu) -> Run Current action.
iii) Action output value (value returned by a called action) can be stored in
environment variable.

Open a new test. By default, it will have Action1.

Go to Insert (Menu) -> Call to New Action, to add a new action at the end of the test.

Now we have Action1 and Action2 in this test.

In the Keyword View, right click on Action1 and choose Action Properties.

Go to Parameters tab and create input variable in_a1_1 with Type as Number. Rest
everything be default.
(To create an input variable, you have to click on ‘+’ sign which is on the right hand side
of Input parameters section).

Create another input variable in_a1_2, same as above.

In the Parameters tab, also create one output variable out_a1_1 with Type as Number
(To create an output variable, you have to click on ‘+’ sign which is on the right hand side
of Output parameters section).

In the Expert view of Action1 type:

s1=parameter("in_a1_1")
s2=parameter("in_a1_2")
parameter("out_a1_1")=s1+s2

Go to File-> Settings, Environment tab, in the 'Variable type' dropdown choose User-
defined. Click on the + sign which is on the right side.

‘Add New Environment Parameter’ window opens. Enter the Name of the parameter as
env_var and let the 'Value' field be empty and click on Ok.

In the Expert view of Action2 type:


(When you copy this below code in Expert view of Action2, it may give you a warning
that it will make Action1 reusable, just click on Ok)

RunAction "Action1", oneIteration, 2, 2, Environment ("env_var")


msgbox Environment ("env_var")

To Run this test make sure Action2 is selected / highlighted if you are in the Keyword
View or Action2 is selected from the dropdown above if you are in the Expert View and
then choose Automation (Menu) -> Run Current action.
iv) Action output value (value returned by a called action) can be stored in Any
variable and RunAction Statement is not used.

Open a new test. By default it will have Action1.

Go to Insert-> Call to New Action, to add a new action at the end of the test.

Now we have Action1 and Action2 in this test.

In the Keyword View, right click on Action1 and choose Action Properties.

Go to Parameters tab and create output variable out_a1_1 with Type as Any.

In the Keyword View, right click on Action2 and choose Action Properties.

Go to Parameters tab and create input variable in_a2_1 with Type as Any.

In the Keyword View, right click on Action1 and choose Action Call Properties.

Go to Parameters tab and in the ‘Store In’ column enter var1.

In the Keyword View, right click on Action2 and choose Action Call Properties.

Go to Parameters tab and in the Value column enter var1.

In the expert view of Action1 type:

Parameter("out_a1_1") = 23

In the expert view of Action2 type:

msgbox Parameter(" in_a2_1")

v) Working with Four Actions

To Run this test, always go to Action4 and then, Automation (Menu) ->Run Current
Action

What these Actions will do:

Action4 will call Action1 with two input values 2, 2.

Action1 sums those values (2+2=4) and assigns the sum to out_a1_1 (Action1’s output
parameter).
Then Action1 passes the sum (i.e. 4) along with another number (3) to Action2 by calling
Action2 in its last line.

Action2 multiplies those two values (4, 3) it got from Action1 and passes on the result of
multiplication (12) and another number (5) to Action3, where these passed on values are
added and the result is shown in a message box.

1. Open a new test. Obviously Action1 will be there by default.

2. Go to Insert-> Call to New Action, when ‘Insert Call to New Action’ window opens,
just click on Ok. This adds Action2.

3. Similarly add Action3 and Action4.

4. In the Keyword View right click on Action1 and choose Action properties. Action
Properties window opens and go to Parameters tab.

5. In the Parameters tab, click on the +, which is on the right hand side of input
parameters. Add 1st input variable as in_a1_1 (in means input, a1 is for action1 and 1 is
1st variable) and keep its Type as Number, let all other things be default.Similarly add 2nd
input variable in_a1_2 and one output variable out_a1_1 also a Number Type.

6. Similarly add input and output parameters for Action2 (input variables in_a2_1 &
in_a2_2, output variable out_a2_1) and Action3
(input variables in_a3_1 & in_a3_2, output variable out_a3_1).

In the Expert view of Action1 type:

s1=parameter("in_a1_1")
s2=parameter("in_a1_2")
parameter("out_a1_1")=s1+s2
RunAction "Action2", oneIteration, parameter("out_a1_1"), 3

In the Expert view of Action2 type:

parameter("out_a2_1")= parameter("in_a2_1") * parameter("in_a2_2")


RunAction "Action3", oneIteration, parameter("out_a2_1"),5
In the Expert view of Action3 type:

parameter("out_a3_1")= parameter("in_a3_1") + parameter("in_a3_2")


msgbox parameter("out_a3_1")

In the Expert view of Action4 type:

RunAction "Action1", oneIteration, 2,2


5) Parameterizing Test in QTP

By replacing fixed values with parameters QuickTest enables you to enlarge the scope
of a basic test. It is known as parameterization, greatly increases the power and
flexibility of a test. A parameter is a variable that is assigned a value from an external
data source or generator. Values in steps and checkpoints and also the values of action
parameters can be parameterize.

Parameters let us check how the application performs the same operations with multiple
sets of data.

There are four types of parameters:

Test/action parameters: Test parameters make possible for us to use values passed
from the test. Action parameters enable us to pass values from other actions in your test.
To use a value within a specific action, the value must be passed down through the action
hierarchy of the test to the required action. We can then use that parameter value to
parameterize a step in the test. For example, suppose that we want to parameterize a step
in Action3 using a value that is passed into the test from the external application that runs
(calls) the test. We can pass the value from the test level to Action1 (atop-level action) to
Action3 (a nested action of Action1), and then parameterize the required step using this
action input parameter value (that was passed through from the external application).
Alternatively, we can pass an output action parameter value from an action step to a later
sibling action at the same hierarchical level. For example, suppose that Action2, Action3,
and Action4 are sibling actions at the same hierarchical level, and that these are all nested
actions of Action1. We can parameterize a call to Action4 based on an output value
retrieved from Action2 or Action3. We can then use these parameters in the action step.

Data Table parameters allow us to create a data-driven test (or action) that runs several
times using the data that we supply. In each repetition, or iteration, QuickTest uses a
different value from the Data Table.

Environment variable parameters allow us to use variable values from other sources
during the run session. These may be values that we supply, or values that QuickTest
generates for us based on conditions and options we choose.

Random number parameters Enable us to insert random numbers as values in your test.

Values in steps and checkpoints can be parameterized while recording or editing the test.

The values of object properties can be parameterized for a selected step.

The values of the operation (method or function arguments) defined for the step can also
be parameterized.
When the value of an object property for a local object is parameterized, we are
amending the test object description in the local object repository. Therefore, all
occurrences of the specified object within the action are parameterized.

Parameterizing the value of a checkpoint property enables us to check how an application


or Web site performs the same operation based on different data

QTP Parameters with Example:

This is not an exhaustive material on parameterization. This is just to give you a startup
on parameters in QTP, so that you can go ahead and do wonders with parameters in QTP
on your own.

a) Environment Variables in QTP

User-Defined Internal, User-Defined External, Built-in are the types of environment


variables available in QTP.

Built-in variables as the name suggests are predefined by QTP. Examples of such
variables are OS, OSVersion, ActionName which are for Operating System, Operating
System Version and name of the action which is currently running, respectively.

Let’s look at an example of this:

1. Open a new Test.

2. Go to File (Menu) ->Settings, a Test Settings window opens.

3. Go to Environment Tab. By default Built-in variable type is selected and you will be
able to see Name and Description of Built-in variables below Variable type dropdown
box.

4. You can click on any of those variables to see their current value.

5. I just did the above four steps in order to show you from where you can access Built-in
variables.

6. Now close this Test Settings window and go to test.

7. In the Expert View type:

a = environment ("ActionName") & “is running on” & environment ("OS")


msgbox (a)

8. And Run the test.


It is just a simple way to show how a Built-in environment variable works.

User Defined Internal variables are the variables defined by you (the user) within the
test and which are saved within the test and also accessible from within the test.

Let’s look at an example of this:

1. Open a new Test.

2. Go to File (Menu)->Settings, a Test Settings window opens.

3. Go to Environment Tab. From Variable type dropdown select User-defined.

4. Click on the '+' which is on the right of Variable type dropdown.

5. 'Add New Environment Parameter' window opens up, type the name and value of the
variable e.g. in Name type 'a' and in Value type 'hello' (without quotes, I have added
quotes just for clarity) and click on OK. It will add the variable with its type as 'internal'.

6. Click Apply and OK to come out of Test Settings window.

7. Go to expert view and type:


msgbox (environment ("a"))

8. Now Run the test. It will show you the value of variable 'a' in the message box.

User-Defined external variables are the variables which are defined in the file outside of
test. These act as read only for the test. You can create as many files for environment
variables as you want and choose them for your test.

Now lets look at an example of this:

Open a new text file and type the following lines in it and save it with .xml extension. ( I
saved it in 'tests' folder in the 'QuickTest Professional' folder under C:\Program files.)

1. Open a new Test.

2. Go to File (Menu)->Settings, a Test Settingswindow opens.


3. Go to Environment Tab. From Variable type dropdown select User-defined.

4. Click on "Load variables and values from external file" check box and import that
external xml file that we created above. As soon as it is imported the complete path of
that file will be shown in the File text box and the variable in it will show under Name,
Value and Type heading (in our case it will show Address under Name, 25 yellow Road
under Value and External under Type).

5. Click on Apply and Ok to come out of it.

6. Go to expert view and type:


msgbox(environment("Address"))

7. Now run the test. It will show you the value of variable 'Address' in the message box.

b) Random Variables in QTP

First example of Random Numbers:

When you define parameters for an action you can set the parameter's value as Random
numbers. There are many different ways in which you can use Random numbers in QTP.
Lets jump at the examples straightway.

Example 1:

1. Open a new test.

2. In the keyword View right-click on Action1, select Action Properties, 'Action


Properties' window opens, Go to 'Parameters' Tab.

3. In the 'Input Parameters' area click on the '+' sign and enter the Name of the input
parameter as 'a', Type as Number, and Default value as 1. Click Ok.

4. Again right-click on Action1 in the keyword View , select 'Action Call Properties',
'Action Call Properties' window opens. Go to 'Parameter Values' Tab.

5. Make a single click under 'Value' column in the 'Input Parameter's' area, it will become
a button '<#>'. Click on this button.

6. It will open 'Value Configuration Options' window.

7. Click on 'Parameter' radio button, select 'Random Number' from the dropdown. In the
Numeric Range enter 0 against From and 100 against To.

8. Click on Name Checkbox and choose arg_a from the dropdown.


9. In the 'Generate New Random Number' area, select first option-For each action
iteration. Click ok.

10. Again Click ok to come out of 'Action Call Properties' window.

11. Now Go to Insert (Menu)-> Call to New Action, 'Insert Call to New Action' window
opens, click ok to insert a new action- action2.

12. Go to Expert view of action1 and type:

msgbox "action1"

msgbox(parameter("a"))

13. Go to Expert View of Action2 and type:

For i=1 to 3
RunAction "Action1", oneIteration, RandomNumber("arg_a")
Next

14. When you copy the above text to Expert View of Action2, it will show you a message
that it has made Action1 Reusable, just click ok.

15. Now Run the test.

(It would be better if you run it by activating the expert view, then it will show you which
step it is currently running by pointing to that particular step with yellow color arrow and
then you will be able to understand it in a better way. You will see that it shows a
different value in each msgbox() because we selected 'For each action iteration' from the
'Generate new random number' area. If we select the second option 'For each test
iteration' then a message
box will show same values, but different values if you run it next time i.e. a different
value at each test run.)

RandomNumber is an Object.

RandomNumber(ParameterNameOrStartNumber [,EndNumber])

EndNumber is optional above.

Second example of Random Numbers:

Here is another way of generating random numbers:

Open a new test and in the Expert view write these lines and run the test:
For i=1 to 5
var1=RandomNumber (0, 100)
msgbox(var1)
Next

Third example of Random Numbers: (This is more or less same as the first one)

One more way is to define a Random Number parameter in the 'Parameter Options' or
'Value Configuration Options' dialog box.

1. Open a new test.

2. In the keyword View right-click on Action1, select 'Action Properties', 'Action


Properties' window opens, Go to 'Parameters' Tab.

3. In the 'Input Parameters' area click on the '+' sign and enter the Name of the input
parameter as 'a', Type as Number, and Default value as 1. Click Ok.

4. Again right-click on Action1 in the keyword View , select 'Action Call Properties',
'Action Call Properties' window opens. Go to 'Parameter Values' Tab.

5. Make a single click under 'Value' column in the 'Input Parameter's' area, it will become
a button '<#>'. Click on this button.

6. It will open 'Value Configuration Options' window.

7. Click on 'Parameter' radio button, select 'Random Number' from the dropdown. In the
Numeric Range enter 0 against From and 100 against To.

8. Click on 'Name' Checkbox and choose arg_a from the dropdown.

9. In the 'Generate New Random Number' area, select first option-For each action
iteration. Click ok.

10. Again Click ok to come out of 'Action Call Properties' window.

11. Now in the Expert View of action1 type:

x=RandomNumber("arg_a")
msgbox(x)

12. And Run the Test.

Fourth example of Random Numbers:


Another VBScript method of generating a random number:

For i= 1 to 3
var1 = int((101*rnd)+0) ' Generate random value between 0 and 100.
MsgBox var1
next

Let's talk about Randomize and Rnd for some time:

Randomize [number]

We use a number with Randomize to initialize the Rnd function's random-number


generator, giving it a new seed value. If the number is omitted, the value returned by the
system timer is used as the new seed value. In simple terms Rnd is a function and
Randomize is used to initialize this function.

If Randomize is not used, the Rnd function (with no arguments) uses the same number as
a seed the first time it is called.

No matter how many times you Run the below code it generates the same values:

For i= 1 to 3
randomize(2)
var1 = Int((6 * Rnd) + 1) ' Generate random value between 1 and 6.
MsgBox var1
next

But if you omitt randomize(2) from the above code and instead put only randomize then
at each run it generates different values.

For i= 1 to 3
randomize
var1 = Int((6 * Rnd) + 1) ' Generate random value between 1 and 6.
MsgBox var1
next
Some light on Rnd:
The following formula is used to produce a random number in a given range:
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

likewise
Int((6 * Rnd) + 1) ' Generate random value between 1 and 6.
The Rnd function returns a value less than 1 but greater than or equal to 0.

Rnd(number)If the number is Less than zero (< 0) then Rnd generates 'The same
number' every time, using number as the seed.
For i= 1 to 3
x=rnd(-1)
msgbox(x)
Next

If the number is Greater than zero(> 0) then Rnd generates 'The next random' number in
the sequence.

For i= 1 to 3
x=rnd(1)
msgbox(x)
Next

If the number is Equal to zero (=0)then Rnd generates 'The most recently generated'
number.
For i= 1 to 3
x=rnd(0)
msgbox(x)
Next

If the number is Not supplied then Rnd generates 'The next random number in the
sequence.'

For i= 1 to 3
x=rnd()
msgbox(x)
Next

Remember:

For any given initial seed, the same number sequence is generated because each
successive call to the Rnd function uses the previous number as a seed for the next
number in the sequence.

Before calling Rnd, use the Randomize statement without an argument to initialize the
random-number generator with a seed based on the system timer.

c) Test parameters:

1. Open a New Test.

2. Go to File->Settings, a 'Test Settings' window will open, go to 'Parameters' Tab.

3. Click on '+' sign which is on the top right.


4. Enter the Name of the parameter as 'vartest' and its Default Value as 'hello'. Click
Apply and then Ok. The Type of this parameter is string.

5. Above we have created a Test Parameter.

6. Now in the Keyword View right click on Action1 and select 'Action Properties'.
'Action Properties' window opens.

7. Go to 'Parameters' Tab. Click on '+' sign which is on the top right.

8. Enter the Name of the parameter as 'varaction' and its Type as string and no default
value. Click Ok to come out of that window.

9. Again in the Keyword View right click on Action1 and select 'Action Call Properties'.
'Action Call Properties' window opens.

10. Go to 'Parameter Values' Tab. There you will see the 'varaction' action parameter we
created earlier. Make a single click under 'Value' heading, it will show a button like this
<#>. Just click on this button to open 'Value Configuration Options' window.

11. Click on 'Parameter' radio button and select 'Test/action Parameter' from that
dropdown.

12. 'Test Parameters' radio button will be selected by default and under 'Test Parameters'
radio button select 'vartest' from Parameter dropdown.[ remember this vartest is a test
parameter we created at the beginning]

13. When you click on ok to come out of 'Value Configuration Options' window, in the
'Action Call Properties' window, under 'Value' it will show <vartest>. Click Ok.

14. Go to Expert View and type:


msgbox(parameter("varaction"))

15. Now run the test. While running it will show 'hello' in the msgbox.

This example show how to declare test parameters and how to access those.

Remember (taken from QTP guide):

You can directly access test parameters only when parameterizing the value of a top-level
action input parameter or when specifying the storage location for a top-level output
parameter. To use values supplied for test parameters in steps within an action, you must
pass the test parameter to the action containing the step. For more information, see
Setting Action Parameters.
Alternatively, you can enter the parameter name in the Expert View using the Parameter
utility object, in the format: Parameter "ParameterName").

d) Action Parameter:
1. In the Keyword View right click on Action1 and select 'Action Properties'. 'Action
Properties' window opens.
2. Go to 'Parameters' Tab. Click on '+' sign which is on the top right.
3. Enter the Name of the parameter as 'a' and its Type as Number. In the same way create
another Number parameter 'b'.
4. Click Ok.
5. In the Keyword View right click on Action1 and select 'Action Properties'. 'Action
Properties' window opens. In the general tab, click on 'Reusable Action' checkbox at the
bottom to make the action reusable.
6. In the Expert View of Action1 type:
s1=parameter("a")
s2=parameter("b")
msgbox(s1+s2)
7. Go to Insert (menu)-> Call to New Action. 'Insert Call to New Action' window opens.
Just click ok to insert a new action.

8. Make action2 reusable as we did for action1.

9. In the Expert View of action2 type:

RunAction "Action1", oneIteration, 2,2

10. In the keyword View right click on action2 and select 'Run from Step', it will show
you the sum 4 in msgbox.

e) Global and Action data sheet Parameters:


Example 1

How, for each row, in global data sheet, QTP iterates all rows of any action data sheet.

1. Open a new Test.

2. Click on Record.

3.Go to Start->All Programs->QuickTest Professional->Sample Applications->Flight.

4. Enter the Agent Name as 'mary' and Password as 'mercury'. Click Ok (make sure we
click ok with mouse and not hit the return (enter) Key.)
5. When the Flight Reservation window is open, go to File->Exit.

6. Click Stop in order to stop recording the test.

7. In the Keyword View under 'Value' column, make a single click on 'mary' (Agent
Name), a button like <#> will appear, click on this button to open 'Value Configuration
Options' window.

8. Click on Parameter radio button and select Data Table from the dropdown and let rest
everything be default. click ok to come out of that window.

9. In the Global Data sheet it will add a new columns with 'mary' as its first value.

10. Go to Insert (menu) -> Call to New Action to insert action2.

11. For this action2, repeat steps from 2 to 7. (This time I have used the Agent Name as
'bill')

12. After repeating step 7, when you click on 'Parameter' radio button and select Data
Table from the dropdown, make sure you select Current action sheet (local) in the
Location in Data Table area. Click Ok to close that window.

13. It will add a new column in action2 Data Sheet with 'bill ' (because I used bill as an
Agent Name ) as its first row.

14. Now you have two actions (action1 and action2), both of them do the same job but
their data is in different sheets.

15. Go to Global Data Sheet and Add one more row in it below 'mary'. I added 'rama'.

16. In the Local Data Sheet (action2) add two more rows to make them a total of 3. I
added 'amar' and 'Sumit'.

17. Right click on action1 and select action call properties, go to Run Tab and select "Run
on all rows" radio button. Do the same for action2.

18. Go to Expert View of action one and type : msgbox("acton1"). Now my action1 looks
like this:
 SystemUtil.Run "C:\Program Files\Mercury Interactive\QuickTest
Professional\samples\flight\app\flight4a.exe","","C:\Program Files\Mercury
Interactive\QuickTest Professional\samples\flight\app\","open"
 Dialog("Login").WinEdit("Agent Name:").Set DataTable("p_Text", dtGlobalSheet)
 Dialog("Login").WinEdit("Agent Name:").Type micTab
 Dialog("Login").WinEdit("Password:").SetSecure
"4725bcebeea3b6682d186bf7b15ae92cc4e6c0ba"
 msgbox("acton1")
 Dialog("Login").WinButton("OK").Click
 Window("Flight Reservation").WinMenu("Menu").Select "File;Exit"

19. Do the same for action2 and type msgbox("acton2") in its Expert view, as we did for
action1.

20. Now Run the test.

I have added the msgbox step in both the action just to make you understand how the
QTP is picking up the rows from Data Sheets, otherwise it will be fast and some people
may not able to understand.

Example 2

This examples shows that each action can access data not only from Global Data Sheet or
its own Local Data Sheet but also from other action's Data Sheet in the same test.

Open a new test.

Insert two actions.

In the Global Data table, in cell(A,1) type 'Global Data'.


In the Action1 Data table, in cell(A,1) type 'Action1 Data'.
In the Action2 Data table, in cell(A,1) type 'Action2 Data'.

In Expert View of action1 type:


msgbox("I am in action 1")
rc = DataTable.Value("A", dtGlobalSheet) 'accessing data from Global data sheet from action1
msgbox rc
rc = DataTable.Value("A", 2) 'accessing data from action1 data sheet from action1
msgbox rc

In expert view of action2 type:

msgbox("I am in action 2")


rc = DataTable.Value("A", dtGlobalSheet) 'accessing data from Global data sheet
from action1
msgbox rc
rc = DataTable.Value("A", 2) 'accessing data from action1 data sheet from action2
msgbox rc

f) QTP Output Values:

This is a very small tutorial on output values, just to make you familiar with the process
so that you can start on your own. For complete understanding of Output values please
see QTP User Guide.

1. Open a new test and also open a sample Flight application (Flight Reservation
window)

2.Make sure that both (new test and Flight Reservation window) are open and
visible.

3. Click on Record in order to record a test.

4. Go to Insert (Menu)->Output Value->Standard Output Value.

5. QTP will be minimized and mouse pointer will take the shape of a hand. Click
on 'Insert Order' button in 'Flight Reservation window.'

6. "Object Selection - Output Value Properties" window opens with WinButton :


Insert Order highlighted. Click Ok.

7. "Output Value Properties" window opens with 'Insert Order' in the Name text
field.

8. Click on first checkbox (which is Property enabled and Value False).

9. In the 'Configure Value' area click on Modify button.

10. 'Output Options' window opens. In this window just click Ok. (It creates
Insert_Order_enabled_Out column in Global datasheet in Data Table with a Value
False in the first row)

11. It will bring you back to "Output Value Properties" window. Now earlier
where under Value it was showing False (see step 8) now it will show
Insert_Order_enabled_Out.

12. Again Click Ok to come out of this "Output Value Properties" window.

13. Click Stop in order to stop the test.


14. Now it means whatever the value of Insert Order button's Enable Property will
be, QTP will show that value in Data Table (under Insert_Order_enabled_Out
column) at Run time.

Just make that Insert Order button enable by putting some values in Flight Reservation
window and then see that column (Insert_Order_enabled_Out ) in Data table. It will show
a true value in there at run time. It will also show that captured value in the Results
window.

These above steps show you how to use output values with Data Table. Below tutorial
shows how to use output values with Environment variables.

1. Open a new test and also open a sample Flight application (Flight Reservation
window)

2. Make sure that both (new test and Flight Reservation window) are open and
visible.

3. Click on Record in order to record a test.

4. Go to Insert (Menu)->Output Value->Standard Output Value.

5. QTP will be minimized and mouse pointer will take the shape of a hand. Click
on 'Insert Order' button in Flight Reservation window.

6. "Object Selection - Output Value Properties" window opens with WinButton :


Insert Order highlighted. Click Ok.

7. "Output Value Properties" window opens with 'Insert Order' in the Name text
field.

8. Click on first checkbox (which is Property enabled and Value False).

9. In the Configure Value area click on Modify button.

10. Output Options window opens.

11. In 'Output Options' window, from 'Output Types' dropdown, select


Environment, and
click Ok.

12. Now Insert_Order_enabled_out will be User-Defined internal environment


variable.
13. Click Ok to come out of this "Output Value Properties" window. (You can
check that environment variable by going to File->Settings, Environment Tab and
choosing User-Defined from variable type)

14. Just add the below line in the Expert View at the end to see the value of the
environment variable.

msgbox(environment("Insert_Order_enabled_out"))

15. Now you can Run the test.

Just make that Insert Order button enable by putting some values in Flight
Reservation window and then see that environment variable value
(Insert_Order_enabled_Out ). It will show a true value in there at run time. It will
also show that captured value in the Results window.

g) Parameterize a checkpoint:
div style="clear:both;">

You can create a Checkpoint while recording or editing a test. For this tutorial I will take
into account Text Checkpoint created through Standard Checkpoint while editing.

Open a new test.

Click on Record.

Go to Start-> All Programs->QuickTest Professional->Sample Applications->Flight.

Enter the Agent Name as "Sachin" and Password as "mercury". Make sure you use Tab
key to move from one text box to another and hit Return (Enter) key after entering the
Password.

When the Flight Reservation window is open Go to File (menu)->Exit.

Click on Stop in order to stop the recording.

In the Keyword view go to the row which has "Sachin" under Value column. Right-click
anywhere on that row and choose "Insert Standard Checkpoint."

"Checkpoint Properties" window opens. Make sure only the Text property is checked
which has a value of "Sachin" and rest all of the properties must be unchecked.

Just make a single click on Text Property, which you checked above, in order to highlight
it and make "Configure Value" area enabled.
In this area click on Parameter Radio button. This is all we need to do.

[On the right hand side of Parameter Radio button you will see Parameter Options button
(which has paper and pen image on it). you can click on it to see the default values QTP
has set for us.]

In the "Checkpoint Properties" window just click on Ok to come out of it.

It will add a column in the Global Data Sheet with "Sachin" as its first value.

Add two more values in the subsequent rows. I added "aaaa" in the 2nd and "bbbb" in the
3rd.

Now when we run the test and it opens the window where we need to enter the Agent
Name and Password, you have to enter Agent Name all of the 3 times (Just enter the
Agent Name, that's it, no Tab key or Return key). Make sure you enter "Sachin" during
first time, "aaaa" during second time and so on. We don't need to enter the Password.
Remember this is a Text Checkpoint on the "Agent Name" Text field. Any value entered
there first time will be compared by first row of the Global Data Sheet which has
"Sachin" and any value entered there Second time will be compared by second row of the
Global Data Sheet which has "aaaa" and so on. Just try to enter some other value during
second time like "xxxx" it will run the test but show you "Failed" in the Results window
in the second iteration.

6) Object Repositories in QTP

div style="clear:both;">

An object as we know is a graphic user element in an application e.g. a button or a list or


an edit box and the special characteristics of an object within the QuickTest are called
object properties. QTP stores the recorded object properties in Object Repository.

In this article I will be talking about Object Repositories to an extent.


[For more information on Object Repositories you can see the QTP user guide.]

Object Repositories are of two types Local and shared .

If objects are stored in a Local Object Repository then these are available to specific
actions but not to all the actions. But if these objects are stored in one or more Shared
Object Repositories then multiple actions or tests can use them.

By default QTP makes and uses Local Object Repository. If we create a new blank test
and do a recording on it, QTP automatically creates a Local Object Repository for that
test or action and stores the information about any object it finds in that corresponding
Object Repository.
In QTP 9 we can associate multiple Shared Object Repositories with an action. If
multiple Shared Object Repositories are associated with an action then also while
recording QTP stores objects in corresponding Local Object Repository on the
condition that those objects are not already stored in any corresponding associated
Shared Object Repositories. This is the default that every time we create a new action
QTP creates a new corresponding Local Object Repository. It is also true that Object
Repositories are associated with actions and no matter how many times we learn or
record on the same object in our application in different actions the object will be stored
as separate test object in each of the Local Object Repository. Local Object Repository is
automatically saved with the test when we save it. The extension of the Local Object
Repository is .mtr, but it is not accessible as a separate file as in case of the Shared
Object Repository.

We can also manipulate some aspects of Local Object Repository using Quick test
Object Repository Automation Object Model.
For example we can add, remove, rename test objects in Local Object Repository.
[QuickTest Object Repository Automation documents the Object Repository automation
object model that enables you to manipulate QuickTest object repositories and their
contents from outside of QuickTest.]

When we open a test that was created using a version of QTP earlier that version 9 we are
asked whether we want to convert it or view it in read only format. In any case if the test
previously used per-action Object Repository, the objects in each per action repository are
moved to the Local Object Repository of each action in the test.

If the test previously used a shared object repository, the same shared object repository
is associated with each of the actions in the test, and the local object repository is empty.

While learning or recording we can specify Shared Object Repository for the selected
action. We can specify and associate one or more Shared Object Repositories with each
action. We can also create new Shared Object Repository and associate it with our action.

In case of Shared Object Repository, QTP uses existing information and does not add
objects to the Object Repository if we record operations on an object that already exists
either in Shared or Local Object Repository.

As said earlier QTP does not add objects directly to the associated Shared Object
Repository as we record, instead it adds new objects in Local Object Repository (if that
object does not already exist in associated Shared Object Repository).

We can surely export Local objects to Shared Object Repository.

There are different ways in which we can move objects from Local Object Repository
to Shared Object Repository:
1) Exporting the objects to the Shared Object Repository from the Local Object
Repository:

In Object Repository window choose the action whose local objects you want to move.
Choose File-> Export Local Objects.Select the location in which you want to save the
file. Click on save.

2) We can update the Shared Object Repository with the Local Object Repository:

If we create a new test it will be created with Local Object Repository, we can associate
any new or old Shared Object Repository with it, and so we can update that Shared
Object Repository with Local Object Repository.

In Object Repository Manager open the Shared Object Repository (clear open in read
only check box).

The test in this case should not be open. In Object Repository Manager go to Tools –>
Update From Local Repository. Select the test who's Local Object Repository you want
to use. Click update all. It will move all the objects to the Shared Object Repository.

3)We can also merge objects from two Object Repositories (called as primary and
secondary in QTP 9) into a new single Object Repository (target Object Repository in
QTP 9). The original source files are not changed. It also enables you to merge objects
from Local Object Repository of one or more action(s) into a Shared Object Repository.
It is recommended to use as a primary Object Repository the file in which you have
invested alot of your effort, like which has more number of objects.

If we do not specify a file extension for Shared Object Repository when creating a new
Shared Object Repository QTP automatically appends a default extension name for
Shared Object Repository as .tsr. This means that we can create Shared Object Repository
with any extension other than .tsr, it should work fine (I have tried that and it works fine),
I think it may create problems while merging two Object Repositories (I haven't tried that
yet).

We can compare two Object Repositories using the Object Repository Comparison
Tool. The tool enables you to identify similarities, variations or changes between two
Object Repositories.

We can also copy objects to Local Object Repository from the Shared Object
Repository. We can copy, paste and move objects in Local Object Repository and copy,
paste and move objects within Shared Object Repository and between Shared Object
Repositories.As said earlier we can also copy objects from shared Object Repository to
Local Object Repository to modify them locally.
We cannot remove an association between the action and its Local Object Repository.
I had one question which I asked in the forum also and still I am unable to get an answer
to this:
http://www.sqaforums.com/showflat.php?Cat=&Board=UBB20&Number=376862&Searchpage=1&Main=3768
48&Words=+sachxn&topic=&Search=true

The answer to the question which I asked above is:

According to QTP user guide:


You can associate as many object repositories as needed with an action, and the same
object repository can be associated with different actions as needed. You can also set the
default object repositories to be associated with all new actions in all tests.

Whenever we make any changes to an Object Repository those changes are automatically
updated in all the associated tests open on the same computer as soon as we make the
change even if the Object Repository is not yet saved and if we close the same Object
Repository without saving the changes the changes are rolled back in any open tests. For
the test that was not open when we changed Object Repository, when we open the test on
the same machine on which we modified the Object Repository the test is automatically
updated with all the saved changes. To see saved changes in a test or repository open on a
different computer, you must open the test or object repository file or lock it for editing
on your computer to load the changes.

Important points about Object Repositories

It is a point to consider while planning and creating test that how you want to store
objects; either you want to store them in Local Object Repository or Shared Object
Repository.

1) For each action, we can also use a combination of objects from the Local and Shared
Object Repositories, according to our needs. Local objects can also be transferred to a
shared object repository, if necessary. This will cut maintenance and increase the
reusability of the tests because it will enable us to maintain the objects in a single, shared
location instead of multiple locations.

2) If there is a same name object in both the Local Object Repository and in a Shared
Object Repository associated with the same action, the action uses the local object
definition i.e. the local object is given preference over the shared object. If an object with
the same name is stored in more than one Shared Object Repository associated with the
same action, the object definition is used from the first occurrence of the object,
according to the order in which the Shared Object Repositories are associated with the
action.

3) When we open an existing test, it always uses the object repositories that are specified
in the Associated Repositories tab of the Action Properties dialog box or in the Associate
Repositories dialog box. When we access Shared Object Repositories from tests they
are read-only; we can edit them only using the Object Repository Manager.
4)As and when an application under test changes, such as when a "Log in" button is
renamed "Sign Into," we can make one update to an XML-based Shared Object
Repository (within the new Object Repository Manager), and the update will circulate
(propagate) to all tests that reference this object. QuickTest Professional keeps object-
level changes synchronized among users throughout test creation efforts.

Object Repository dialog box

Object Repository dialog box window shows a tree of all the objects (either Local or
Shared) on its left hand side in the selected action. On selecting any object in the tree
Object Repository window shows the information about the object like the name,
repository in which it is stored etc. On the left hand side in a tree local objects are
editable while the shared ones are grayed out (non-editable).

To view the test object properties, to modify test object properties and to add objects to
Local Object Repository we can use Object Repository window. We can also delete
objects from Object Repository window; this is needed as when an object is removed
form the test it is not automatically removed from the Local Object Repository.

Object Repository in QTP is XML based means that if we change something related to
the object in Shared Object Repository., the change will be propagated to all the tests
that reference this object, in real time.

Adding Objects to Repositories


[Please see QTP user guide for in-depth information on these below points.]

We can add objects to Shared Object Repository or Local Object Repository in a


number of different ways-

We can decide whether to add only a selected object, or to add all objects of a certain
type, such as all button objects, or to add all objects of a specific class, such as all
WebButton objects.

We can modify objects stored in a Local Object Repository using the Object Repository
Window and objects in a Shared Object Repository using the Object Repository
Manager.

It is possible to add objects to the object repository before they exist in an application.

We can also add objects to the Local Object Repository while editing our test.

We can add the object directly to a Shared Object Repository using the Object
Repository Manager, so that it is available in all actions that use this Shared Object
Repository.
If needed, we can merge test objects from the Local Object Repository into a Shared
Object Repository.

We can also add objects to a Shared Object Repository while navigating through the
application ("Adding Objects Using the Navigate and Learn Option").

We can also add an object to the Local Object Repository by choosing it from the
application in the Select Object for Step dialog box (from a new step in the Keyword
View or from the Step Generator).

We can add objects to the object repository using the Add Objects to Local or Add
Objects option.

We can add objects to the Local Object Repository of the current action by selecting the
required object in the Active Screen.

Object Repository Vs Descriptive Programming

There is no specific answer as to which of the two (object repository or descriptive


programming) is better. There are certain situations when using descriptive programming
has its own benefits (with descriptive programming along with other features you also get
code portability) while in some other typical situations object repository works like a
charm (No need to adjust the script when an object properties change, Highlighting an
Object in Your Application etc are couple of features you can’t just resist and of course
there are many more). Below you can find some of the differences between object
repository and descriptive programming. (Differences between object repository and
descriptive programming are not limited to what is shown below, there can be many
more)

Object Repository Descriptive Programming

With object repository QTP automatically


resolves which properties and values are
required to uniquely identify an object. QTP With descriptive programming set of
starts with predefined mandatory and property/value pairs are created by you and
assistive properties in that order. If the all are mandatory, although you can use
mandatory and assistive properties do not object spy to get help in selecting set of
uniquely identify an object, QTP uses an property/value pairs.
ordinal identifier. QTP can also use Smart
Identification (if enabled).
Descriptive programming statements need to
Object repository in QTP is created
be put into operation manually. Finding a set
automatically (manual creation is also
of properties to distinctively identify the
possible) as and when you record on the
object time and again can be time
application.
consuming.
Object repository is considered relatively It is considered relatively slower to create
faster if you take into account the and performance wise also in case of large
performance for large applications. applications.

QTP Object Repository Comparison Tool Shortcut Keys:

Performing Object Repository Comparison Tool Commands Using Shortcut Keys

File Menu Commands


Enables you to specify two object repositories on which to perform a new
CTRL+N
comparison operation.

Navigate Menu Commands


F4 Finds the next difference between objects in the object repositories.
SHIFT+F4
Finds the previous difference between objects in the object repositories.
CTRL+F Opens the Find dialog box.
Finds the next object in the object repositories according to the search
F3
specifications in the Find dialog box.
Finds the previous object in the object repositories according to the search
SHIFT+F3
specifications in the Find dialog box.

Help Menu Commands


F1 Opens the Object Repository Comparison Tool Help.

QTP Object Repository Merge Tool Shortcut Keys:

Performing Object Repository Merge Tool Commands

File Menu Commands


Enables you to specify two object repositories with which to perform a new
CTRL+N
merge operation.
CTRL+S Saves the merged shared object repository.

Navigate Menu Commands


F4 Finds the next difference between objects in the object repositories.
Finds the previous difference between objects in the merged object
SHIFT+F4
repositories.
CTRL+F Opens the Find dialog box.
Finds the next object in the merged object repositories according to the search
F3
specifications in the Find dialog box.
Finds the previous object in the merged object repositories according to the
SHIFT+F3
search specifications in the Find dialog box.

Help Menu Commands


F1 Opens the Object Repository Merge Tool Help.

7 Checkpoints:

A checkpoint enables you to identify whether the Web site or application under test is
functioning correctly or not by comparing a current value for a particular property with
the expected value for that property.

After we add a checkpoint, QuickTest adds a checkpoint to the current row in the
Keyword View and adds a Check CheckPoint statement in the Expert View.

By default, the checkpoint name receives the name of the test object on which the
checkpoint is being performed. We can change the name of the checkpoint if
needed.

Types of Checkpoints:

1. Standard checkpoint

2. Image checkpoints
3. Bitmap Checkpoint
4. Table checkpoints
5. Accessibility Checkpoint
6. Text Checkpoint
7. Page Checkpoint
8. Database Checkpoint
9. XML checkpoints

Standard checkpoints allow checking the object property values in the Web site or
application under test. Standard checkpoints evaluate (compare) the expected values of
object properties captured during recording to the object's current values during a run
session. For
example we can check that a radio button is activated after it is selected. Standard
checkpoints are supported for all add-in environments.

Standard checkpoints can be used to perform checks on


Images,
Tables,
Web page properties, and
Other objects within your application or Web site.

Standard checkpoints can be created for all supported testing environments (as long as
the appropriate add-in(s) are loaded).

Image checkpoints allow you to check the properties of an image in the application or
Web page. For example, you can check that a selected image's source file is correct or
not. An image checkpoint can also be created by inserting a standard checkpoint on an
image object. Image checkpoints are supported for the Web add-in environment

With Bitmap Checkpoint we can check an area of a Web page or application as a


bitmap. While creating a test, we have to specify the area to check by selecting an object.
An entire object or any area within an object can be checked. Bitmap checkpoints are
supported for all add-in environments

By adding table checkpoints to the test, we can check the content of tables displayed in
the application. For example, we can check that a specified value is displayed in a certain
cell. Certain environments also support checking the properties of the table object. For
example, a check that a table has the expected number of rows and columns. A table
checkpoint can also be created by inserting a standard checkpoint on a table object.

Accessibility Checkpoint recognizes areas of your Web site that may not conform to the
World Wide Web Consortium (W3C) Web Content Accessibility Guidelines. For
example, check if the images on a Web page include ALT properties, required by the
W3C Web Content Accessibility Guidelines. Accessibility checkpoints are supported for
the Web add-in environment

QuickTest can check that a text string is displayed in the appropriate place in an
application or on a Web page with Text Checkpoint. Text checkpoints are supported for
the Web add-in environment, plus some Web-based add-in environments

Page Checkpoint checks the features of a Web page. For example, you can check how
long a Web page takes to load or whether a Web page contains broken links. A page
checkpoint can also be created by inserting a standard checkpoint on page object. Page
checkpoints are supported for the Web add-in environment

The contents of a database accessed by your application can be checked by Database


Checkpoint. Database checkpoints are supported for all add-in environments

By adding XML checkpoints to your test, you can check the contents of individual XML
data files or documents that are part of your Web application. The XML Checkpoint
option is supported for all add-in environments.
a) Page Checkpoint:

Page checkpoint:It is for web applications only.Common things to check with this are
load time, broken links etc.

1. Open a blank test.


2. Make sure thathttp://www.google.co.in/ is open.(Now only QTP with blank test
and www.google.co.in should be open.)
3. Click on Record. When we click on Record, "Record and Run Settings" window
opens up. Go to "Web" tab and choose first option "Record and run test on any
open browser." and click ok.
4. Go to Insert (menu)->Checkpoint->Standard Checkpoint (or press F12).
5. The mouse pointer will become hand and QTP will be minimized.
6. Click anywhere on the white space on the Google.co.in page.
7. It will Open "Object Selection - Checkpoint Properties" window. Click on 'Page :
Google' option which has a page icon on left of it with right corner of the page
slightly folded.
8. Click ok.
9. A 'Page Checkpoint Properties' window opens up. Let all the options be default.
Click ok.
10. Click on Stop in order to stop the Recording.

In the Expert view it will add just one line:


Browser("Google").Page("Google").Check CheckPoint("Google")
We will explore this line later on.

I ran this test by opening www.google.co.in in offline mode (not on internet). It recorded
the following properties:

Property Name Property Value


load time "0"
number of images "2"
number of links "20"

Here it shows the load time as 0 because I did not open Google at the time of running the
test, it was already open.

When you run it, in the results window, on left hand side, it will show (when every option
is expanded):

Test Checkpoint-page Summary (where Checkpoint-page is the name with which I saved
the test

Run-Time Data Table


Checkpoint-page Iteration 1 (Row 1)
Action1 Summary
Google (This will be the browser)
Google (This will be the Page)
Checkpoint "Google"

If you run this test on www.google.com it may fail.

b) Database Checkpoint:

Now we will try out Database checkpoint: using Oracle 9i

First of all you have to connect oracle 9i to QTP 9.(before doing any recording)

1. For this go to Insert -> Checkpoint -> Database Checkpoint.


2. A Database Query Wizard opens.
Select ' Specify SQL statement manually' from the Query definition area. Click
Next.
3. Here click on 'Create' button which is on the right of "Connection String:" It will
open 'Select Data Source' window. Click on 'Machine Data Source' Tab
4. Click on New Button.
5. 'Create New Data Source' window opens.
6. Select 'User Data Source' from Select a type of data source. Click Next.
7. It will show all the data source drives it could find.
8. Select Oracle (on my machine it was 'Oracle in OraHome9'). Click Next. Click
Finish.
9. It will open 'Oracle ODBC Driver Configuration' window.
10. Enter 'Data Source name' ( I entered "oracle")
11. Enter 'description' (I entered "SQL")
12. Select 'TNS Service Name' ( I selected 'DB02', my oracle database name) from
combo box.
13. Enter userid (I used SCOTT).
14. Click 'Test Connection' Button.It will ask for a Password. Enter your password for
Oracle.
15. If successful it will show 'Testing Connection' window with 'Connection
Successful' written on it.

This completes our task of Connecting QTP with Oracle.

Now we will record a test.

1. Open a blank test.


2. Click on Record. When we click on Record, "Record and Run Settings" window
opens up. Go to "Windows Applications" tab and choose first option "Record and
run test on any open Windows based application." and click on ok.
3. Go to Insert (menu)->Checkpoint->Database Checkpoint
4. A 'Database Query Wizard' opens.
5. Select ' Specify SQL statement manually' from the Query definition area. Click
Next. Click Create.
6. Go to 'Machine Data Source' Tab
7. Select Oracle from data source name. Click Ok. It will open 'Oracle ODBC Driver
Connect'
8. Enter password. Click ok
9. It will come to Database Query Wizard window with 'Connection String' field
filled with: "DSN=oracle;UID=SCOTT;PWD=TIGER;DBQ=DB02;DBA
=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;
LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;
MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;"
In the SQL Statement area type "select * from emp;". Click Finish.
10. It will open 'Database Checkpoint Properties' window with the result of the query.
Click Ok.
11. Click Stop in order to stop the Recording.
12. In the Expert View, it just adds one line "DbTable("DbTable").Check CheckPoint
"DbTable")"

This is the simplest database checkpoint example.

Lets run it.

Click on Run. ( we don't need to open any other window or application to run this as our
Oracle is running at the back end as a service - default way in which it was installed-
nothing special.)

When it is passed it will show following in the Result window:

Test Checkpoint-database Summary (where Checkpoint-database is the name with which


I saved the test)

Run-Time Data Table


Checkpoint-database Iteration 1 (Row 1)
Action1 Summary
DbTable
Checkpoint "DbTable"

( when you click on this, in details it will show checked 112 cells (in your case number of
cells may differ). It means if you go to the oracle and add or delete any row and run this
test again it will fail.)

Just try to think how QTP is comparing the expected results with the actual one, with the
count of cells.

c) Bitmap Checkpoint:
Now we will look at the bitmap checkpoint which is different from the image checkpoint.

Make sure that QTP and the Flight application are open.

STYLE A

1. Open a blank test.


2. Click on Record. When we click on Record, "Record and Run Settings" window
opens up. Go to "Windows Applications" tab and choose first option "Record and
run test on any open windows based application." and click Ok.
3. Go to Insert (menu)->Checkpoint->Bitmap Checkpoint
4. Click on the "Fly To" combo box.
5. "Object Selection- Bitmap Checkpoint Properties" window opens up. I will have
"WinComboBox:Fly To" highlighted. Click ok
6. It will open "Bitmap Checkpoint Properties" window.
7. Change the "Checkpoint timeout" at the bottom of the window to 0 seconds, so
that we will have no wait time while running the test.
8. Click ok.
9. Click stop to stop recording the test.

STYLE B

Above, after 3rd point, instead of clicking on the "Fly To" combo box, click somewhere
in the empty space above the "Fly From" Combo box but below the line, i.e. in the
"Flight Schedule" area.

"Object Selection- Bitmap Checkpoint Properties" window opens up. It will have
"WinObject:Flight Schedule" highlighted. Click ok

It will open "Bitmap Checkpoint Properties" winodow. This time it will have "Flight
schedule" area instead of just the "Fly To" combo box.

Now click on the "Select Area..." button. Mouse pointer will change so that you can
select any area by dragging. Just select "Fly From" combo box by dragging.

Change the "Checkpoint timeout" at the bottom of the window to 0 seconds. so that we
will have no wait time while running the test.

Click ok.

Click stop to stop recording the test.

Now you can run the test it will pass. To see how it stores the results, just fail the test. If
you have recorded in the style A then just select any value in the "Fly To" combo box and
then run the test. In the result window on the left hand side when you click on Checkpoint
"Fly To:", it will show you the expected bitmap and actual bitmap on the right hand side.
(note: it will show that only in case of Failed result)

d) Image Checkpoint:

We will look at the Image checkpoint.

Open a blank test.

On your system under My Documents, there will be a folder named My Pictures, under
this you will will find a folder- Sample Pictures( containing 4 pictures - Blue Hills,
Sunset, Winter, Water lilies)

We will run this test with one of the image there- Sunset.

Go to My Documents->My Pictures-> Sample Pictures and right click on image


named 'Sunset' and open it with internet explorer.

Now only a new blank test and internet explorer with this image should be open.

Click on Record. When we click on Record, "Record and Run Settings" window opens
up. Go to "Web" tab and choose first option "Record and run test on any open browser."
and click on Ok.

Go to Insert (menu)->Checkpoint->Standard Checkpoint(or press F12).The mouse


pointer will become hand and QTP will be minimized.

Click on the image which is opened in the explorer.

It will open 'Object Selection Checkpoint Properties' window with Image: Sunset
highlighted. Click Ok.

It will Open 'Image Checkpoint Properties' Window. In this window just uncheck all the
property values like href, html tag etc and only check last property which is src.

Rest every thing will be default. Click OK.

Click stop to stop recording the test.

In the expert view it will just add one line


Browser("file:///C:/Documents%20and%20S").Page("file:///C:/Documents%20and%20S"
).Image("Sunset").Check CheckPoint("Sunset")

If you run it with that image open in internet explorer it will pass. This test is not
intelligent enough. It is just checking that the image in the explorer is in the same
location in which it was when the test was recorded and its name is Sunset. If you change
the name of some other picture in that folder to Sunset and run the test with that it will
also pass.

In this way you can test for some or all the properties of the image which it showed in the
'Image Checkpoint Properties' Window.

e) Text Checkpoint:

div style="clear:both;">

Now we will look at the Text Checkpoint:

1. Open a blank test and a web page in offline mode like this below:

2. Click on Record. When we click on Record, "Record and Run Settings" window
opens up. Go to "Web" tab and choose first option "Record and run test on any
open browser." and click on ok.
3. Go to Insert (menu)->Checkpoint->Text Checkpoint.The mouse pointer will
become hand and QTP will be minimized.Click on the first paragraph (which
starts with-The page you are looking..) of that web page.
4. "Text Checkpoint Properties" window opens up. It will show the text to be
checked in "Checkpoint Summary" area in red color and also show in blue color
the text which is displayed before and after the selected text.
5. Click on Configure -here you can change your selected text, change before and
after text and so on, but for now just click ok. At the bottom of the "Text
Checkpoint Properties" window change 'Checkpoint timeout' to 0 seconds. Again
Click ok to come out of "Text Checkpoint Properties" window.
6. Click on stop in order to stop recording.

Run the test and when it is passed just go to the results window and on the left hand side
just expand every option and click on last option Checkpoint "Cannot find server". On
the right hand side it will show you the details. Try to understand those.

f) Table Checkpoint:

div style="clear:both;">
In this tutorial we will look at a table Checkpoint just to get familiar with it.

Open a blank test and also open a website "http://www.editorial.co.in/software/software-


testing-life-cycle.php" in offline mode.

This website has a table at the bottom of the page.

Click on Record. When we click on Record, "Record and Run Settings" window opens
up. Go to "Web" tab and choose first option "Record and run test on any open browser."
and click on ok.

Go to Insert (menu)->Checkpoint->Standard Checkpoint (or press F12).

The mouse pointer will become hand and QTP will be minimized.

Click somewhere inside the table.

"Object Selection - Checkpoint properties" window opens.

Select "WebTable: Software Testing Life Cycle" which has a table icon on its left, where
"Software Testing Life Cycle" is the name of the table.

Click ok.

'Table Checkpoint properties' window opens. It will show all the rows and columns of the
selected table. This time we will not do any extra setting. Just change the Checkpoint
timeout at the bottom of this window to 0 seconds and click ok .

Click stop in order to stop recording.

Run the test and analyze the results in the result window, mainly the checkpoint results to
see how QTP verifies the result. We will manipulate test results in later tutorials.

g) Checkpoint Return value examples:

We will use the Standard Checkpoint which we did in tutorial 4.

Open that test that contains the standard Checkpoint.


In the expert view of the test you will see only one line i.e.

Window("Flight Reservation").WinButton("FLIGHT").Check CheckPoint("FLIGHT")

Now we will make some changes in this one line so that it can return some value.

NOTE: Checkpoint always returns a value, it depends on us whether we capture it or not.


Lets now capture it.
Declare a variable and catch the return value in that variable:

Dim return
return = Window("Flight Reservation").WinButton("FLIGHT").Check
CheckPoint("FLIGHT")
msgbox (return)

One thing more we need to do here is that we have to enclose Checkpoint ("FLIGHT")
in brackets. So the final version looks like this:

Dim return
return = Window("Flight Reservation").WinButton("FLIGHT").Check
(CheckPoint("FLIGHT"))

msgbox (return)

Now run the test and see the msgbox appearing with the return value.

8) Synchronization:

Synchronization makes available specified amount of time for an object to process prior
to moving on to the next step.

Wait is like forcing the QTP to wait for a specified amount of time while synchronization
is not a 'forced' wait e.g. whenever a specific page loads QTP moves forward in case of
synchronization, but in case of wait, if the wait is for 10 seconds and a webpage loads in
3 seconds then it still waits for 7 seconds.

Synchronization is there to take care of the timing problems between QTP and the AUT.
Examples where synchronization can be used:

For a web page to load.


For a button to become enabled or disabled.
For client-server communications to finish.

Synchronization is possible in many ways:

1)
We can insert a synchronization point for example for a progress bar to reach 100%. QTP
will generate a WaitProperty statement in the Expert View in case of synchronization.
2)
We can use Exist or Wait statements. Exist statements always return a Boolean (0 or 1)
value.

3)
We can also modify the default amount of time that QTP waits for a Web page to load.
(Browser Navigation Timeout, File(menu)-> Settings-> Web tab)

4)
When working with tests, we can increase the default timeout settings for a test to instruct
QuickTest to allow more time for objects to appear.
(Object Synchronization Timeout, File(menu)-> Settings-> Run tab)

Synchronization is enabled only during recording.

I will be talking about Sync, Wait, WaitProperty-->result of synchronization).

Example of Synchronization:

Make sure that only QTP and Sample Flight application are open.

Click on Record. When we click on Record, "Record and Run Settings" window opens
up. Go to "Windows Applications" tab and choose first option "Record and run test on
any open windows based application." and click on ok.

Enter the Date of flight as tommorrows date.


In Fly From choose Denver.
In Fly To Choose Frankfurt.
Click on Flights... button which is on the
R.H.S of the Fly To combo box.

Flights Table window open up. Let the


first option remains selected in that and just click on ok. It will
automatically fill some of the fields.

Enter your name in the Name field.

Click on Insert Order and let it complete uptill 100% untill you see the 'Insert Done...'
text.

Go to Insert (menu)-> Synchronisation Point. QTP will be minimized and cursor will take
the shape of a hand.

Click on that 'Insert Done...' text in the Flight application.


'Object Selection - Synchronization Point' window will open with 'ActiveX: Threed Panel
Control.' selected.

Click Ok.

'Add Synchronization Point' window will open. Choose Property name as 'text' and
Property value as "Insert Done..." (Don't forget to put those 3 dots, and double quotation
marks e.g. " in the Property value text box.)
Click Ok.

In Flight application go to File (menu)-> New Order.

Click Stop in order to stop the recording.

This whole process will add WaitProperty.

The code in the Expert view looks like this:

Window("Flight Reservation").ActiveX("MaskEdBox").Click 1,9


Window("Flight Reservation").ActiveX("MaskEdBox").Type "092407"
Window("Flight Reservation").WinComboBox("Fly From:").Select "Denver"
Window("Flight Reservation").WinComboBox("Fly To:").Select "Frankfurt"
Window("Flight Reservation").WinButton("FLIGHT").Click
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").WinEdit("Name:").Set "axc"

Window("Flight Reservation").WinButton("Insert Order").Click


Window("Flight Reservation").ActiveX("Threed Panel Control").WaitProperty "text",
"Insert Done...", 10000
Window("Flight Reservation").WinButton("Button").Click

I have modified the above script a little bit to capture


the WaitProperty value. WaitProperty Waits until the particular object property attain the
specified value or exceeds the specified timeout before continuing to the next step.

Reporter is an Object used for sending info to test results and it uses ReportEvent
method to accomplish this.

ReportEvent method sends the results to the result window. For more info on these plase
see QTP help.

Window("Flight Reservation").ActiveX("MaskEdBox").Click 1,9


Window("Flight Reservation").ActiveX("MaskEdBox").Type "092407"
Window("Flight Reservation").WinComboBox("Fly From:").Select "Denver"
Window("Flight Reservation").WinComboBox("Fly To:").Select "Frankfurt"
Window("Flight Reservation").WinButton("FLIGHT").Click
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").WinEdit("Name:").Set "axc"
Window("Flight Reservation").WinButton("Insert Order").Click
rc=Window("Flight Reservation").ActiveX("Threed Panel Control").WaitProperty
("text", "Insert Done...", 10000)
If rc=true Then
reporter.ReportEvent micPass,"sync on Insert Done...", "Property of text is true"
End If
msgbox rc
Window("Flight Reservation").WinButton("Button").Click

Example of Wait:

It is a simple forcible wait.

Make sure that only QTP should be open.

Click on Record. When we click on Record, "Record and Run Settings" window opens
up. Go to "Windows Applications" tab and choose first option "Record and run test on
any open windows based application." and click on ok.

Go to Start->AllPrograms->QuickTest Professional->Sample Applications->Flight.

Enter Username as your first name (make sure to enter 4 or more characters).
(use tab to move to password textbox.)
Enter password as 'mercury.'
Click Ok.
When Flight Reservation window is open, go to File(Menu)->Exit.

It will record the code as below but one thing which I have added extra is Wait(5) in step
4 (just go to the expert view and add this line before the line which includes encrypted
password).

1)SystemUtil.Run "C:\Program Files\Mercury Interactive\QuickTest


Professional\samples\flight\app\flight4a.exe","","C:\Program Files\Mercury
Interactive\QuickTest Professional\samples\flight\app\","open"
2) Dialog("Login").WinEdit("Agent Name:").Set "sachin"
3) Dialog("Login").WinEdit("Agent Name:").Type micTab
4) wait(5)
5)Dialog("Login").WinEdit("Password:").SetSecure
"46ed14b628c7ae93e3a3ab35576f08fc424a6fb9"
6) Dialog("Login").WinButton("OK").Click
7) Window("Flight Reservation").WinMenu("Menu").Select "File;Exit"
Example of Sync:

Make sure that your internet is On and QTP is open.

Click on Record. When we click on Record, "Record and Run Settings" window opens
up. Go to "Web" tab and choose first option "Record and run test on any open browser."
and click on ok.

Open internet explorer (make sure your default page is www.google.com, so that when
you open internet explorer, it by default opens google.com as homepage..)

Type Blogger in the search text box and click on "I'm Feeling Lucky" button instead of
Search button.

When www.blogger.com is open (i.e. when you see 'Done' on the status bar at the bottom)
, click on Back toolbar button (below File menu) to go back to google.com again.

Go toFile(Menu)->Exit.

It will record the following code with sync automatically recorded by QTP (see 4th step).

1)SystemUtil\Program files\Internet Explorer\IEXPLORE.EXE","","C:\Documents and


Settings\Sachin","open"
2) Browser("Google").Page("Google").WebEdit("q").Set "blogger"
3) Browser("Google").Page("Google").WebButton("I'm Feeling Lucky").Click
4) Browser("Google").Page("Blogger: Create your Blog").Sync
5) Browser("Google").Back
6) Browser("Google").WinToolbar("ToolbarWindow32").Press "&File"
7) Browser("Google").WinMenu("ContextMenu").Select "Close"

Try to run this code, it works fine.

Now go to File(Menu)->Settings, Web tab and change the 'Browser navigation Timeout'
to 2 seconds for example and then run the above code again. It will fail because sync
method waits for the browser to complete the current navigation, but here we have set the
browser navigation timeout to 2 seconds, which is too short for a browser to complete the
navigation i.e. to open www.blogger.com after clicking on "I'm Feeling Lucky" button (I
am not on T1 lines, my internet connection is average), because what happens is, after the
3rd step it just waits for 2 second after which it goes to the Back button, but it finds it
disabled as it gets enabled only when www.blogger.com is open.

Keep 'Browser navigation Timeout' to 10 seconds in File(Menu)->Settings and then it


should pass because in 10 seconds it surely makes the back button enabled after the 3rd
step of clicking "I'm Feeling Lucky".
9) Regular Expressions in QTP:

Objects and text strings with varying (changeable) values can be identified by QuickTest
using Regular expressions.

Regular expressions can be used:

to define property values of an object.

to parameterize a step.

to create a checkpoint with changeable values.

Important points regarding Regular expressions:

You can use regular expressions only for values of type string.

When any special character in a regular expression is preceded by a backslash (\),


QuickTest searches for the literal character.

You can define a regular expression for a constant value, a Data Table parameter value,
an Environment parameter value, or a property value in a programmatic description.

For more common options to create Regular Expressions, see QTP User Guide.

Instead of writing more about QTP regular expressions, lets quickly jump to examples.

Below you will find examples of :

1. Regular Expression and Property Values of Objects.

[This is just an example using Yahoo mail inbox. Your inbox unread mails may differ
from the one shown in this example]

1. Launch QTP and open a new test.

2. Open Internet Explorer.


[Now we have QTP with a blank test and Google open.]

3. Click on Record in order to start recording.


4. Copy and paste this URL (https://login.yahoo.com/config/login_verify2?&.src=ym) in
the browser's address bar to open Yahoo mail login.

5. Type your user name and password to login to Yahoo mail.

6. When Yahoo mail is open, click on the Inbox link as shown in the screenshot below.

7. Click on Stop in order to stop recording.


My recorded code looks like this:

Browser("Browser").Page("Page").Sync
Browser("Browser").Navigate "https://login.yahoo.com/config/login_verify2?&.src=ym"
Browser("Browser").Page("Yahoo! Mail: The best").WebEdit("login").Set "sach2n"
Browser("Browser").Page("Yahoo! Mail: The best").WebEdit("passwd").SetSecure
"4801a2cbf793b46aad67194b5cbc961c071f"
Browser("Browser").Page("Yahoo! Mail: The best").WebButton("Sign In").Click
Browser("Browser").Page("Yahoo! Mail - sach2n@yahoo.com").Link("Inbox (6)").Click

Now if you don't check any mail in your inbox and log out and then again run this code it
will work fine.
But if you check any mail like if I check one mail in my inbox then it will be Inbox(5) in
the above screen shot, then if I run this code it will fail and show the below error.

Now we will change the above code with the help of regular expression so that it will
work even if there is only one unread mail.
In QTP go to Resources (menu) ->Object Repository.

Object Repository window will open. Now follow the screen shots below.
When you click on the button as in above screen shot it will open 'Value Configuration
Options' window. On this window click on Regular Expression check box. When you
click on checkbox it will show warning as in the screen shot below. Just click on Yes.
Now in the Constant text box (above screenshot) enter what I have entered "Inbox \([5-
6]\)" and click Ok and close Object Repository window.
This Regular Expression setting which we have done works for inbox unread mails
between 5 and 6 e.g. if your inbox says inbox(5) or inbox(6).

Run the test. It passes for me because I had 5 unread mails in my inbox (inbox(5)).

You can do this setting according to your convenience e.g. [1-5] for unread mails between
1 and 5 and so on.

2. Regular Expression and Checkpoints:

1. Open QTP and a new test.

2. Open Internet Explorer and open this URL


http://www.worldtimeserver.com/current_time_in_IN.aspx

3. Click on Record in order to start recording.

4. Go to Insert-> Checkpoint->Text Checkpoint.

5. QTP will be minimized and mouse pointer will change into hand shape.

6. Click on time as shown in below screenshot.

7. Text Checkpoint Properties window will open with the text on which we clicked on, in
red color.

8. In this window, on the right hand side of 'Constant' radio button click on pencil and
paper button to open "Constant Value Options" button.

9. Check Regular Expression checkbox and in the value field type:(1[012]|[1-9]):[0-5][0-


9] (am|pm) . Click OK. Again click Ok to come out of Text Checkpoint Properties
window.

10. Click on Stop in order to stop recording.


It will record only one line in the expert view:

Browser("India current local time").Page("India current local time").Check CheckPoint("India current local time
from WorldTimeServer.com")

Now you can refresh that website so as to see the current time and run this test again. It
should pass

3. Regular Expression and Data Table.


1. Open QTP and a new test.

2. Open Internet Explorer and open this URL


http://www.worldtimeserver.com/current_time_in_IN.aspx

3. Click on Record in order to start recording.

4. Go to Insert-> Checkpoint->Text Checkpoint.

5. QTP will be minimized and mouse pointer will change into hand shape.

6. Click on time as shown in below screenshot.

7. Text Checkpoint Properties window will open with the text on which we clicked on, in
red color.

8. On the right hand side of 'Parameters' radio button, click on that pen and paper icon, to
open Parameter Options dialog box.

9. Make sure Parameters Type is Data Table. In the Advanced Configuration area click on
Regular Expression checkbox. Click Ok. Again click ok to come out of Text Checkpoint
Properties window.

10. Click Stop in order to stop recording.


In the expert view it will write this code:

Browser("India current local time").Page("India current local time").Check CheckPoint("India current local time
from WorldTimeServer.com")

In the global data sheet it will add a new column heading


"India_current_local_timeChecked_Text" and will add in the first row- the current time.
Now in place of this current time enter this (1[012]|[1-9]):[0-5][0-9] (am|pm) and save it.

Run the test. It should work fine.

9) VB Scripting in QTP:

a) VB Script variable:

In VBScript all variables are of the type variant that can store any type of value.

The name of the variable in VBScript must begin with a letter and it cannot contain
period (.) and its maximum length can be of 255 characters.

It must be distinctive (unique) within the scope in which it is declared. If we declare a


variable inside a procedure then its scope is local to that procedure and only code within
that procedure can access it, but if we declare a variable outside a procedure in a script, it
is available to all the procedures in a script. Procedure level variable exits as long as we
are in the procedure and a life of a script level variable is the time it is declare up till the
time script finishes.

Variables can be declared explicitly and implicitly.

Explicitly variables are declared with Dim statement, Public Statement, Private
Statement.

Dim Name

Dim Name, employee_address, city

Implicitly we can declare them within the script by just using the variable name. But this
practice is prone to errors.

We can compel VBScript to require all variables to be explicitly declared by including


the statement Option Explicit at the start of every script.

VBScript does not provide support for constants.

From VBScript 5.0 onwards programmers are able to create class constructs in
VBScript-A step towards OOP.
variables declared by Dim and Public are public in nature (accessible outside of the
class). By default also variables are Public in nature. With Private we can declare
variables not visible out side of the class.

Example of a variable:

Enter this in notepad, save the notepad with some name and .html extension (like I saved
it in c:\pro\a.html where pro is a name of a folder)

Now open internet explorer and in the address bar type c:\pro\a.html and press enter.

Another example that you can try is:

Another example of getting input from the user:

Enter the below code in notepad and save it with .vbs extension (like I saved it as
c:\pro\c.vbs where pro is a name of a folder)

dim variable_name

variable_name =InputBox("Enter your name:")


MsgBox("Your name is " & variable_name)
Now go to command prompt(C:\>) and type pro\c and hit enter ( no need to type
extension)

b) VB Script Arrays:

Below I have explained all the ways to initialize and use arrays in VBScript.

Every element of an array is associated with a unique index number. By default, index
number starts from 0. The number of elements in an array is a fixed number. It can also
be re-adjusted dynamically.

Arrays can have multiple dimensions-VBScript supports up to 60.

1)Dim variable_name(upper_limit) [As data_type]

If “As data_type” is not specified, it will be a variant. Above we have declared a fixed
size array. The array size limit is upper_limit +1 because index starts from 0.

2)

Dim variable_name() [As data_type]

ReDim [Preserve] variable_name(upper_limit)

Firstly we declare an array with no upper limit and then with redim we reset the upper
bound to a new value. The optional key word "Preserve" states that all of the old elements
must be preserved when changing the array size.
The size of the dynamic array changes during the time our script is running. The array is
initially declared using either the Dim statement or using the ReDim statement. For a
dynamic array, no size or number of dimensions is placed inside the parentheses.

Dim first_Array()

ReDim second_Array()

In the below example, ReDim sets the initial size of the dynamic array to 25

ReDim first_Array(25)

we can resize a dynamic array unlimited number of times.

Dim array_dynamic()

' Size the dimension to contain one dimension with 3 elements

ReDim array_dynamic(2)

' Put data in the array

array_dynamic(0) = "1"
array_dynamic(1) = "2"
array_dynamic(2) = "3"

' Resize the array, but keep the existing data


ReDim Preserve array_dynamic(5)
' Display the 3rd element
MsgBox array_dynamic(2)
MsgBox displays 3.
3)
variable_name = Array(element1, element2, ...)

Array function takes values of variant type and returns a dynamic sized array.

The arguments are a listing of values that will become the elements of the array.

dim a

a=Array(5,10,15,20)
document.write(a(3))

Output:20
Some of the Array keywords and their uses:

Keyword Function
Dim It will Declare an array
Reinitializes the elements if it is a fixed-size array and deallocates the
Erase
memory used if it is a dynamic array.
IsArray will Return True if A is an array, False if it is not
will Return lower bound of an array, in VBScript it will always
LBound
returns 0
Preserve (Optional) is used to preserve the data in an existing array,
Preserve
when you resize it.
ReDim This is used to size or resize a dynamic array.
UBound will Return an upper bound of array

c) VB Script Functions and Subroutines:

The main difference between a function and a subroutine is that a subroutine will do
some processing of the code and then quit, while a function processes some code and
then returns the result back.

VBScript functions are described using the Function and End Function keywords.

Adding numbers by passing parameters:


Function to get square of a number:

A Sub procedure is a series of VBScript statements, enclosed by Sub and End Sub
statements
I have written the calling statement (call square()) in the script itself.

Passing variable by reference example:

This shows that only the address is being passed that is why it is showing the updated
value third time in Back in mysub.

Passing variable by value example:


This shows that another value is being passed as can be seen by the result of the third x as
in Back in mysub.

d) VB Script Conditional Statements:

Three types of conditional statements are there in VBScript.

if...then...else statement

Example of if without else:

1)

if i=2 Then msgbox "Hello World"

2)
3)

More than one statement can be executed for truth condition by putting the statements on
separate line.

if i=2 Then

msgbox "Hello World"

i = i+1

end If

Example of if...then...else

1)

if i=2 then

msgbox "Hello World"

else

msgbox "Thank You"

end If

2)

if...then...elseif statement
1)

if fee="Cash" then

msgbox "pay cash!"

elseif fee="Visa" then

msgbox "pay with visa."

elseif fee="American Express" then

msgbox "pay with American Express."

else

msgbox "Unknown method of Payment."

end If

2)

select case statement

1)

select case fee

case "Cash"

msgbox "pay cash"


case "Visa"

msgbox "pay with visa"

case "American Express"

msgbox "pay with American Express"

case Else

msgbox "Unknown method of fee"

end select

2)

3)
A single expression (usually variable) is evaluated once and its value is then compared
with the values for each case. If there is a match, the block of code associated with that
case is executed. If there is no match then Else case is executed.

e) VB Script Looping Statements:

WE have four looping statements in VBScript

For...Next

1)

Loop #0
Loop #1
Loop #2

Loop #3

With the help of Step keyword, we can increase or decrease the counter by the value
specified.

1)
For i=2 To 8 Step 2
any code
Next

2)

For i=8 To 2 Step -2

any code
Next

For Each...Next statement

It is useful when we don’t know how many elements are there in the array.

1)

2)

dim names(2)

names(0)="happy"
names(1)="Sumit"
names(2)="Love"
For Each x in names
document.write(x & "
")
Next

Do...Loop

It will repeat a block of code while a condition is True or until a condition becomes True

1)
Do While i>9
some code
Loop
If i equals 8, the code inside the loop above will never be executed.

2)

Do
some code
Loop While i>9
The code inside this loop will be executed at least one time, even if i is less than 9.

Repeating Code Until a Condition Becomes True

1)

Do Until i=9
some code
Loop
If i equals 9, the code inside the loop will never be executed.

2)

Do
some code
Loop Until i=9
The code inside this loop will be executed at least one time, even if i is equal to 9.

The Exit statement can only be used within a Do...Loop control structure to
provide an alternate way to exit a Do...Loop.

we must end all Do statements with Loop or otherwise error message will pop up. The
While and the Until condition may be placed after the Do or the Loop.

Some Examples:

1)

num = 1
Do
num = num + 1
Loop Until num = 5

2)

num = 1
Do While num < 5
num = num + 1
Loop

3)

num = 1
Do
num = num + 1 br>Loop While num < 5
Exit a Do...Loop
You can exit a Do...Loop statement with the Exit Do keyword.

1)

Do Until i=9
i=i-1
If i<9 Then Exit Do
Loop

The code inside this loop will be executed as long as i is different from 9, and as long as i
is greater than 9.

While...Wend statement

While Loop is a simple loop that keeps looping while a condition is true

1)

9
8
7
6
5
4
3
2
1
Finish!

Please go here for 10 VBScript techniques

http://www.windowsitpro.com/Articles/ArticleID/20979/20979.html?Ad=1

In my June 2001 column, I shared 10 basic VBScript techniques. For those who want to
step up a level and begin writing productive administrative scripts, here are 10 more
VBScript techniques.

10. On Error—The On Error statement lets a script trap runtime errors and continue
executing. You
can test for errors in the script after each statement has executed.

On Error Resume Next

9. InStr—This function lets you locate a substring in a string. The function returns the
starting position of the substring or a 0 if the function doesn't find the string. In

nPos = InStr("123345", "33")

nPos has a value of 3 because "33" begins in the third position of "123345."

8. The Do Loop—This basic mechanism for repeatedly executing a set of statements


comes in two forms: a Do Until Loop and a Do While Loop. The most important
distinction between
the two loops is that the Do Until Loop always executes at least once.

Do Until myValue > 1


myValue = myValue + 1
Loop

7. Subroutines—Modularizing your code into subroutines lets you organize your scripts
and create reusable routines. You can define subroutines anywhere in a script. You use
subroutines when you don't need to return a value to the calling code. . . .

f) VB Script Classes:

Class Hello_World
Public Sub Say_Hello(Name)
MsgBox "Hello, " & Name & ", welcome to " & Garden & "."
End Sub

Public Garden
End Class

Dim MyHello_World
Set MyHello_World = New Hello_World
MyHello_World.Garden = "Fountain"
MyHello_World.Say_Hello "Sachin"

Above we have created a class (Hello_World) and an instance (MyHello_World) of that


class. VBScript uses the Class...End Class statements to define the contents of the class.
The property (Garden) and procedure (Say_Hello) are also declared within the class.
Write the whole code written above in notepad, save it as .vbs and run it.

Members within the class can be declared as private and public. Private members are
only visible within the class whereas public members are accessible by any code outside
of the class. Public is default.

Procedures (Sub or Function) declared Public within the class are methods of the class.
Public variables serve as properties of the class.

Property Let will allow code outside of the class to assign a value to a private variable of
the class.

Class A

Private name

Public Property Let assign_name(e_Name)


name = e_Name
End Property
End Class

A Property Let procedure must accept at least one argument. This procedure can also
handle the process of data validaiton to check some validation e.g if the value you are
assigning is more than 5 characters long or not.

Property Get will allow code outside of the class to read the value of a private property
variable.

Class A

Private name

Public Property Let assign_name(e_Name)


name = e_Name
End Property
Public Property Get assign_name()
assign_name = name
End Property
End Class

The Property Get procedure does not accept any arguments, however VBScript allows
you to add an argument. For this you have to add an additional argument to the property's
corresponding Property Let or Property Set procedure because a Property Let/Set
procedure must always have exactly one more argument than its corresponding Property
Get procedure.

Property Set - This is an object property assignment procedure used to assign the new
property value to the private object variable (if the private variable is an object). Below
op_sys is an object read-write property.

Class Machine

Private obj_oOS

Public Property Set op_sys(oObj)


Set obj_oOS = oObj
End Property

Public Property Get op_sys( )


Set op_sys = obj_oOS
End Property
End Class

We can make a property Read-Only in two ways:

1)
By writing only a Property Get procedure for the property:- In the absence of a Property
Let procedure, code outside of the class cannot write to the employeeName property.

Class employee

Private ename
Public Property Get employeeName()
employeeName = ename
End Property
End Class

2)
By declaring the Property Get procedure as Public and the Property Let procedure as
Private:
Class employee

Private ename

Private Property Let employeeName(strName)


ename = strName
End Property

Public Property Get employeeName()


employeeName = ename
End Property
End Class

Class Methods:

When functions or procedures are written inside the class they are called methods.
If a class method is declared as Public then it will be available to code outside or inside
the class, and a method that is declared as Private will be available only to code inside the
class.

Class welcome

Private ur_name

Public Property Let Name(var_name)


ur_name =var_name
End Property

Public Sub Showwelcome(var_type)


MsgBox Makewelcome(var_type) & ur_name & "."
End Sub

Private Function Makewelcome(var_type)


Select Case var_type
Case "Formal"
Makewelcome = "welcome, "
Case "Informal"
Makewelcome = "Hello there, "
Case "Casual"
Makewelcome = "Hey, "
End Select
End Function

End Class
Dim my_object
Set my_object = New welcome
With my_object

.Name = "sachin"
.Showwelcome "Informal"
.Showwelcome "Formal"
.Showwelcome "Casual"
End With
Set my_object = Nothing

Class Events

Class_Initialize and Class_Terminate are associated with every class that we create.
Class_Initialize is fired whenever an object based of a class is instantiated.

e.g
Set objectname = New classname

Class_Initialize event's general format is:

Private Sub Class_Initialize( )


'Initalization code goes here
End Sub

The Class_Terminate event is fired when the object goes out of scope, or when the object
is set to Nothing.

Class_Terminate event's general format is:

Private Sub Class_Terminate( )


'Termination code goes here
End Sub

Another example of a class


Below you will see file system objects of VBScript which allows you to access, copy,
open, delete (and much more) files on the operating system.

http://msdn2.microsoft.com/en-us/library/aa711216(VS.71).aspx

Things VBScript cant do (got from

http://www.sqaforums.com/showflat.php?Cat=0&Number=348942&page=0&fpart=all&
vc=1)

and some class concepts:

To summarize, the VBScript class concept:

1. Does NOT support inheritance. So it is not possible to create a Collie class which
inherits characteristics from a Dog class which inherits characteristics from a Mammal
class, etc.

2. Does NOT support polymorphism. Kind of a related to inheritance, where for example
a Dog class will “bark” and a Pig class will “oink” when they are asked to “speak” (in a
class hierarchy where they inherited the base Speak() method from the Mammal class,
then override that method to implement animal unique behavior).
3. DOES support encapsulation, an OO technique which conceals how a particular class
is implemented, independent from objects that use the class’s Public Properties and
Methods. Another way to think about encapsulation is to say it is the ability to hide
implementation details while sharing higher level behavior.
It is this author’s opinion that the lack of inheritance and polymorphism are not major
shortcomings in scripting environments such as WSH and especially QTP, where you are
not trying to build large complex OO programs.

Encapsulation is then the primary reason to consider using VBScript classes. And, with
encapsulation comes namespace control--which permits any number of class elements to
be named foo as long as each of those elements resides in a different class (i.e. a different
namespace).

g) VB Script Property Let,Get,Set:

Class properties in VBScript are used to assign values to private variable and handle the
process of data validation.

Property Let: Which is used by the outside code to store a value in the private property
variable. It is similar to a procedure in the sense that it does not return a value. A Property
Let procedure must accept at least one argument. If the private variable you are using is
an object then the process of assignment and data validation is handled by Property Set.
Property Set: Similar to Property Let but used for object based properties. By default,
the Property Set procedure is Public.

To retrieve the value of a private variable we will retrieve the value of a property.
Property Get: This is used by code outside of your class to read the value of a private
property variable. It is similar to a function in the sense that it returns a value to the
calling code -- this value is the private variable value.

The Property Get procedure does not accept any arguments. You can add an argument to
it, but then you have to add an additional argument to the property's corresponding
Property Let or Property Set procedure, because Property Let/Set procedure must always
have exactly one more argument than its corresponding Property Get procedure.

If the property get procedure returns an object then we can use the set statement (but it
works well without set also) to return the value.
Read only Properties have only Property Get procedure

Write-only properties have only a Property Let or a Property Set procedure

Read-Write properties have a Property Get procedure and either a Property Let or a
Property Set procedure

Example 1 of Property Let, Property Get, Property Set

Below Example, which shows a simple class that defines a private variable, m_var, and a
two read-write properties, one_type and two_type, the latter of which is an object
property.

Example 2 of Property Set

Here is the syntax for a Property Set procedure.


For example, here is what code that is using an object based on the above class might
look like.

Last line uses the Set Statement when it writes to the FSPro property. This is required
because the Main_class class used a Property Set procedure for the FSPro property.
Without the Set statement at the beginning of the last line, VBScript would produce an
error. When a property on a class is object based, it is typical to use a Property Set
procedure. Most programmers using this class would expect this.

Example 3 of Property Set

For example imagine we had a class that contained a private property named
ob_var_conn that was expected to be an ADO Connection object. This class definition,
with the
property Set and Property Get Statements might look like:

The end developer would use the Property Set statement in the following manner:
As with the Property Let statement, the Property Set statement has an optional argument
list. This argument list must be identical to the corresponding Property Get's argument
list.

h) VB Script Examples of Property Let,Get,Set:

You might also like