Sei sulla pagina 1di 36

Concepts in QTP

QTP- QuickTest Professional

QTP Testing Process

Test Object Model

QTP Object Repositories (Covered in Tutorial 21)

Descriptive Programming in QTP (Covered in Tutorial 21)

CheckPoints in QTP (Tutorial 4-10)

QTP Recordings

QTP Parameterize Tests

QTP Keyword View

Actions in QTP

QTP –Quick Test Professional

QTP (QuickTest Professional) is Mercury's advanced keyword-driven testing solution.


QTP (provides for functional test and regression test automation.

With QTP you will be able to test Standard Windows applications , Web objects,
ActiveX controls, and.Net ,Java , SAP (Systeme, Anwendungen und Produkte in der
Datenverarbeitung, Systems, Applications and Products in Data Processing) Visual
Basic applications. Siebel , Oracle , PeopleSoft and Terminal emulators (
http://www.emtec.com/zoc/terminal-emulator.html)

We need additional QuickTest add-ins for special environments e.g. .Net, Terminal
emulators. The current version of QTP (version 9.x) supports running tests on the
following browsers:

Microsoft Internet Explorer 6.0 Service Pack 1 or 7.0 Beta 2 and lower
Netscape Browser 8.0
Mozilla FireFox 1.5.

QuickTest Professional 9.2 is compatible with: SAP 8.2, .NET 9.2, Web Services 9.2,
Java 9.1, Oracle 8.2, PeopleSoft 8.2, Siebel 8.0, Stingray 8.2, Terminal Emulator
8.0, and VisualAge Smalltalk 8.2.
QTP (QuickTest Professional) is Unicode compliant according to the requirements of
the Unicode standard, enabling you to test applications in many international
languages.

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.

Moreover, now users can invoke and run Mercury WinRunner™ scripts and functions
from Mercury QuickTest Professional, and then automatically report WinRunner
results back into the original scripts.

QTP –Testing Process

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).

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.

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.

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

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.

QTP Object Repositories

(Covered in Tutorial 21)

Descriptive Programming in QTP

(Covered in Tutorial 21)

CheckPoints in QTP

(Covered in Tutorials 4-10)

QTP Recordings

The default mode of recording is the Normal recording mode. There are other
recording modes also like Analog Recording or Low Level Recording. Normal
mode is the default and takes full advantage of the QuickTest test object model, as
it recognizes the objects in the application regardless of their location on the screen.

Analog Recording : Exact mouse and keyboard operations are recorded in relation
to either the screen or the application window. In this QTP also records and tracks
every movement of the mouse for example, recording a signature produced by
dragging the mouse. Analog Recording steps are not editable from within
QuickTest.

Low Level Recording: At any time, if an environment or on an object not


recognized by QuickTest, use Low Level Recording. It records at object level and
records all run-time objects as Window or WinObject test objects. QuickTest records
all parent level objects as Window test objects and all other objects as WinObject
test objects.

Each step recorded in Low Level Recording mode is shown in the Keyword View
and Expert View.

All the three modes of recording can be used in a single test e.g. we can switch to
either Analog Recording or Low Level Recording in the middle of a recording
session for specific steps and then return to normal recording mode.

Analog Recording and Low Level Recording require more disk space than
normal recording mode.

Use Analog Recording when :

The actual movement of the mouse is what you want to record.

Recording in Analog mode can be relative to the screen or relative to a specific


window (see user guide for detail)

In Analog Recording a separate file is saved and stored with the action.

In Analog Recording mode, QuickTest adds to your test a RunAnalog statement


that calls the recorded analog file.

Use Low Level Recording when :

Environments or objects not supported by QuickTest.

Exact location of the operation on your application screen is necessary. in normal


mode QuickTest performs the step on an object even if it has moved to a new
location on the screen.

If the location of the object is important to your test, switch to Low Level
Recording

QTP Parameterize Tests


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 Keyword View

In QTP we first of all record a test, then run a test and then analyze the results, but
before running the test we can also enhance it with checkpoints and parameters.

First of all let's talk a little about keyword view in QTP and then we will talk about
recording in QTP and then we will move on to other things.

After recording all the operations, QuickTest displays them as steps in the Keyword
View, and generates them in a script (in an Expert View).
In the keyword view there are 4 visible columns –

(For other valuable information on below points please see QTP user guide pg 92 and
pg 114)

Item The item on which we want to perform the step and it can be a test object,
utility object, function call, or statement. This column shows a hierarchical icon-
based tree. The highest level of the tree is actions, and all steps are contained within
the relevant branch of the tree.

Operation The operation (methods or functions) to be performed on the item


selected in the Item column, for example, Click or Select.

Value The argument values for the selected operation, for example, the mouse
button to use when clicking the image.

Documentation It is a Read-only auto-documentation of what the step does in an


easy-to-understand sentence, for example, Click the "findFlights" image.

Assignment The assignment of a value to or from a variable for example, Store in


cCols would store the return value of the current step in a variable called cCols so
you can use the value later in the test. This column is not visible by default.

Comment Any textual information you want to add regarding the step. This Column
is also not visible by default.

Actions in QTP

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 -- Action1 (Logging in)
Call to Action 2 -- Action2 (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.
Software Automation Frame work

(Covered in other document separately)

QTP Sync,Wait, 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
Example of Wait
Example of Sync

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".

All about QTP Parameters

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.

Environment Variables in QTP


Random Variables in QTP
Test parameters
Action Parameter
Global and Action data sheet Parameters
QTP Output Values
Parameterize a checkpoint

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.

Lets 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")<br />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.

Lets 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.)

QTP environmental variables


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 "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.

QTP Random Variables

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 omit 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()
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
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.
Alternatively, you can enter the parameter name in the Expert View using the
Parameter utility object, in the format: Parameter ("ParameterName").
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)-&gt; 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.

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<br />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

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.

Parameterize Checkpoint

A checkpoint that uses different expected results for each iteration.

A small example:

You have certain user names (say 3 in our case) in the data table. You want that
only users which are in the data table should be able to login and other could not.

Make sure that http://mail.yahoo.com/ is open and create a standard checkpoint


for the Yahoo! ID field.

• While both yahoo mail login and QTP are open, click Record.
• Go to Insert->Checkpoint->Standard Checkpoint

• QTP will be minimized and mouse pointer will take the shape of a hand.

• Click on the Yahoo! ID text field.

• Object Selection – Checkpoint Properties window opens, click on Ok.

• Checkpoint Properties window opens, click on Ok.

2. The following line will get recorded in QTP

Browser("Yahoo! Mail: The best").Page("Yahoo! Mail: The


best").WebEdit("login").Check CheckPoint("login")

3. Stop recording.

4. Make sure you are in the Expert View. Right click on CheckPoint and select
CheckPoint Properties.

5. Checkpoint Properties window opens. Highlight the value property and Select
Parameter radio button.

6. Click on the Edit icon on the right side of the Parameter radio button.Parameter
Options window opens. Just select the Current action sheet (local) radio button.

7. Click Ok. Again click Ok to come out of Checkpoint Properties window.

8. Check the local data sheet. The first column name must be login_value.

9. Add any three names in the first three rows and modify the code as follows:

Total=DataTable.GetSheet[“Action1”].GetRowCount
Msgbox total
For i=1 to total

DataTable.SetCurrentRow (i)
a=inputbox(“enter value”)
Browser(“Yahoo! Mail: The best”).Page(“Yahoo! Mail : The
best”).WebEdit(login).Seta
Browser(“Yahoo! Mail: The best”).Page(“Yahoo! Mail : The
best”).WebEdit(login).Check CheckPoint(“login”)
Next

So the final code looks like this:


Now if you run the test it will ask you for each user name you want to enter and
compare it with the ones already there in the data table as we have created a check
point on it.

Now to see if our checkpoint really works use checkpoint return value (covered in
Tutorial 3) to check For every value you enter, if it is in the data table, it will return
true, otherwise false

Also See: Parameterize a checkpoint for a Flight Application Login Window.

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.

Difference Between Image and Bitmap checkpoint

Image check Point Bitmap Checkpoint


Image checkpoint lets you check the Bitmap checkpoint lets you check an area
property value of an image. There are of a web page or an application after
different properties you can verify like capturing it as bitmap so that it can
you can check html tag property, href compare the expected and the actual
property or src property to check bitmap and find out inconsistencies.
whether the image source file is correct e.g As per QTP guide , suppose you have
or not. a website that can display a map of city
the user specifies. The map has control
keys for zooming. You can record the
new map that is displayed after one click
on the control key that zooms in the
map. Using the bitmap checkpoint, you
can check the map zooms in correctly.
You create an image checkpoint by To create a bitmap checkpoint while
inserting a standard checkpoint on an recording you go to .
image object. Insert(menu)->check point->Bitmap
Insert(menu)->check point->Standard checkpoint or Click the Insert Checkpoint
checkpoint or Output value button and Choose
Bitmap checkpoint.

Image checkpoints are supported for the You can create Bitmap checkpoints for all
web add-in environment only. supported testing environments (As long
as the appropriate Add-ins are there)
Action input and 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).

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

b) Action output value (value returned by a called action) can be stored in data table
column.

c) Action output value (value returned by a called action) can be stored in


environment variable.

d) Action output value (value returned by a called action) can be stored in Any
variable and RunAction Statement is not used.

e) Working with Four Actions

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

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) -&gt; 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.

b). Action output value (value returned by a called action) can be stored in
data table column.

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.

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

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.

d). Action output value (value returned by a called action) can be stored in
Any variable and RunAction Statement is not used.

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")

e). 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 1<sup>st</sup> 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


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

Capturing Background color in QTP

You can use any of the below options to get the background color:

Open http://www.google.com/

Write the below code (either 1 or 2) in the expert view of a new test and run it.

1) Var=Browser("Title:=Google").Page("Title:=Google").webelement("html
tag:=body", "height:=521").object.currentstyle.backgroundcolor

msgbox Var

OR

2) Var=Browser("Title:=Google").Page("Title:=Google”).object.bgcolor

msgbox Var

The first code works only with WebElement objects.

WebElement object is a general web object that may represent any web object. It is
never recorded, although we can use Description Programming with WebElement
object to perform methods on any web objects in the website.

For example:

[Open www.google.com]

If you write the below line in the expert view of a new test and Run it, it will click the
"I'm Feeling Lucky" button on the google page.

Browser("Google").Page("Google_2").WebButton("I'm Feeling Lucky").Click

This same above line can be written using webelement object as:

Browser("Google").Page("Google_2").Webelement("name:=I'm Feeling Lucky").Click

I think for getting the background color it all depends on the kind of objects you are
working with because different applications have different objects which in turn have
different properties (read both run-time and test).

E.g. below you can see that when I tried to get the properties for a Label with the
help of an Object Spy, it does not show any property related to color or BackColor in
the Test Object Properties radio button, but surely shows a BackColor property in
Run-time Object Properties radio button. So make sure to check for both run-time
and test properties before going to the conclusion that you cannot get the BackColor
of an object.

I got success with this line:

a=SwfWindow(“Teller”).SwfLabel(“window id:=98234”).Object.backcolor

Msgbox a

So the world does not end at object.currentstyle.backgroundcolor or object.bgcolor


or Object.backcolor, just explore it.

Object herirarchy in QTP

An interesting point for you to know is (some of you might already be familiar with
this)

Even though the object on which you record may be embedded in several levels of
objects, the recorded hierarchy does not include these objects. For example, even if
the WebButton object on which you record is actually contained in several nested
WebTable objects, which are all contained within a Browser and Page, the recorded
hierarchy is only Browser > Page > WebButton
For Example (see below image) Object Spy identifies several levels of hierarchy for
Submit button, but while recording (or even when using Descriptive Programming) it
just uses the below line of code.

SwfWindow(“Teller”).SwfButton(“Submit”).Click

Potrebbero piacerti anche