SlideShare a Scribd company logo
VLearn Technologies
                               www.mysaptesting.com

QTP 9.2 provides following features:
Mercury Screen Recorder:
        Capture your entire run session in a movie clip or capture only the segments with
errors, and then view your movie from the Test Results window.
Dynamic Management of Object Repositories:
        Quick Test now has a new Repositories Collection reserved object that you can
use to programmatically manage the set of object repositories that are associated with an
action during a run session.
Object Repository Manager:
        You can use the Object Repository Manager to manage all of the shared object
repositories in your organization from one, central location. This includes adding and
defining objects, modifying objects and their descriptions, parameterize test object
property values, maintaining and organizing repositories, and importing and exporting
repositories in XML format.
        You can open multiple object repositories at the same time. Each object
repository opens in its own resizable document window. This enables you to compare the
content of the repositories, to copy or move objects from one object repository to another,
and so forth.

Object Repository Merge Tool:
        You can use the Object Repository Merge Tool to merge the objects from two
shared object repositories into a single shared object repository. You can also use the
Object Repository Merge Tool to merge objects from the local object repository of one or
more actions or components into a shared object repository.
        When you merge objects from two source object repositories, the content is
copied to a new, target object repository, ensuring that the information in the source
repositories remains unchanged.
        If any conflicts occur during the merge, for example, if two objects have the same
name and test object class, but different test object descriptions, the relevant objects are
highlighted in the source repositories, and the Resolution Options pane details the
conflict and possible resolutions.
Multiple Object Repositories per Action or Component:
        Quick Test provides several options for storing and accessing test objects. You
can store the test objects for each action or component in its corresponding local object
repository, which is unique for each action and component. You can also store test
objects in one or more shared object repositories that can be used in multiple actions and
components. Alternatively, you can use a combination of objects from the local object
repository and one or more shared object repositories. You choose the combination that
matches your testing needs.


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad    Page 1
VLearn Technologies
                               www.mysaptesting.com


XML Object Repository Format:
        Quick test now enables you to import and export object repositories from and to
XML format. This enables you to modify object repositories using the XML editor of
your choice and then import them back into Quick Test. You can import and export files
either from and to the file system or a Quality Center project (if Quick Test is connected
to Quality Center).
Functions Library Editor:
        Quick Test now has a built-in function library editor, which enables you to create
and edit function libraries containing VBScript functions, subroutines, modules, and so
forth, and then call their functions from your test or component.
Handling Missing Actions and Resources:
        Whenever a testing document (test, component, or application area) contains a
resource that cannot be found, Quick Test opens the Missing Resources pane and lists the
missing resource(s). For example, a test may contain an action or a call to an action that
cannot be found; a testing document may use a shared object repository that cannot be
found; or a testing document may use an object repository parameter that does not have a
default value. In all of these cases, Quick Test indicates this in the Missing Resources
pane, enabling you to map a missing resource to an existing one, or remove it from the
testing document, as required.

How can I check if a parameter exists in Data Table or not?
   on error resume next
    Val=DataTable ("ParamName", dtGlobalSheet)
    if err. number<> 0 then
        'Parameter does not exist
         else
       'Parameter exists
    end if
How can I check if a checkpoint passes or not?
chk_PassFail = Browser (...).Page (...).WebEdit (...).Check (Checkpoint ("Check1"))
if chk_PassFail then
MsgBox "Check Point passed"
else MsgBox "Check Point failed"
end if

My test fails due to checkpoint failing, Can I validate a checkpoint without my test
failing due to checkpoint failure?

Reporter. Filter = rfDisableAll 'Disables all the reporting stuff
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad    Page 2
VLearn Technologies
                               www.mysaptesting.com

chk_PassFail = Browser (...).Page (...).WebEdit (...).Check (Checkpoint ("Check1"))
Reporter. Filter = rfEnableAll 'Enable all the reporting stuff
if chk_PassFail then
MsgBox "Check Point passed"
else
MsgBox "Check Point failed"
end if
What is the difference between an Action and a function?
        Action is a thing specific to QTP while functions are a generic thing which is a
feature of VB Scripting. Action can have an object repository associated with it while a
function can't. A function is just lines of code with some/none parameters and a single
return value while an action can have more than one output parameters.
Where to use function or action?
        Well answer depends on the scenario. If you want to use the OR feature then you
have to go for Action only. If the functionality is not about any automation script i.e. a
function like getting a string between to specific characters, now this is something not
specific to QTP and can be done on pure VB Script, so this should be done in a function
and not an action. Code specific to QTP can also be put into a function using DP.
Decision of using function/action depends on what any one would be comfortable using
in a given situation.

When to use a Recovery Scenario and when to us on error resume next?
        Recovery scenarios are used when you cannot predict at what step the error can
occur or when you know that error won't occur in your QTP script but could occur in the
world outside QTP, again the example would be "out of paper", as this error is caused by
printer device driver. "On error resume next" should be used when you know if an error is
expected and dont want to raise it, you may want to have different actions depending
upon the error that occurred. Use err.number & err.description to get more details about
the error.

How to use environment variable?

A simple definition could be... it is a variable which can be used across the reusable
actions and is not limited to one reusable action.

There are two types of environment variables:
1. User-defined
2. Built-in

We can retrieve the value of any environment variable. But we can set the value of only
user-defined environment variables.


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad    Page 3
VLearn Technologies
                               www.mysaptesting.com

To set the value of a user-defined environment variable:
Environment (Variable Name) = NewValue

To retrieve the value of a loaded environment variable:
CurrValue = Environment (VariableName)

Example

The following example creates a new internal user-defined variable named MyVariable
with a value of 10, and then retrieves the variable value and stores it in the MyValue
variable.

Environment. Value ("MyVariable") =10
MyValue=Environment.Value ("MyVariable")

How to rename a checkpoint (QTP 9.0)?
Example:

Window ("Notepad").WinEditor ("Edit").Check Checkpoint ("Edit")
in the above example, the user would like to change the name of the Checkpoint object
from "Edit" to something more meaningful.
Note: This functionality is new to QuickTest Professional 9.0.This is not available
for QTP 8.2 and below.
1. Right-click on the Checkpoint step in the Keyword View or on the Checkpoint object
in Expert View.
2. Select "Checkpoint Properties" from the pop-up menu.
3. In the Name field, enter the new checkpoint name.
4. Click. The name of the checkpoint object will be updated within the script.
Example:
Window ("Notepad").WinEditor ("Edit").Check Checkpoint ("NewCheckPointName")
Note: You must use the QuickTest Professional user interface to change the name of the
checkpoint. If you manually change the name of the checkpoint in the script, QuickTest
Professional will generate an error during replay. The error message will be similar to the
following:
"The "" Checkpoint object was not found in the Object Repository. Check the Object
Repository to confirm that the object exists or to find the correct name for the object."
The Checkpoint object is not a visible object within the object repository, so if you
manually modify the name, you may need to recreate the checkpoint to resolve the error.

What is the lservrc file in QTP?
The lservrc file contains the license codes that have been installed
         The lservrc file contains the license codes that have been installed. Whenever a
new license is created, the license code is automatically added to this file. The lservrc file
is a text file, with no extension.

Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad    Page 4
VLearn Technologies
                               www.mysaptesting.com

File Location:

1) For a Concurrent (Floating) license installation:
Example: C:Program FilesXYZ TechnologiesABC ServerEnglishlservrc
2) For a Seat (Stand-alone) license installation
Example:
C:Program FilesMercury InteractiveQuickTest ProfessionalBinlservrc
What to do if you are not able to run QTP from quality center?

This is for especially for newbie‘s with QTP.
Check that you have selected Allow other mercury products to run tests and components
from QTP  Tools  Options  Run Tab.

Understanding the Smart Identification Process

If QuickTest activates the Smart Identification mechanism during a run session (because
it was unable to identify an object based on its learned description), it follows the
following process to identify the object:

1. QuickTest "forgets" the learned test object description and creates a new object
candidate list containing the objects (within the object's parent object) that match all of
the properties defined in the Base Filter Properties list.

2. QuickTest filters out any object in the object candidate list that does not match the first
property listed in the Optional Filter Properties list. The remaining objects become the
new object candidate list.

Walking Through a Smart Identification Example

        The following example walks you through the object identification process for an
object. Suppose you have the following statement in your test or component:
Browser("Mercury Tours").Page("Mercury Tours").Image("Login").Click 22,17
When you created your test or component, QuickTest learned the following object
description for the Login image:




However, at some point after you created your test or component, a second login button


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad    Page 5
VLearn Technologies
                              www.mysaptesting.com

(for logging into the VIP section of the Web site) was added to the page, so the Web
designer changed the original Login button's alt tag to: basic login.

The default description for Web Image objects (alt, html tag, image type) works for most
images in your site, but it no longer works for the Login image, because that image's alt
property no longer matches the learned description. Therefore, when you run your test or
component, QuickTest is unable to identify the Login button based on the learned
description. However, QuickTest succeeds in identifying the Login button using its Smart
Identification definition.

The explanation below describes the process that QuickTest uses to find the Login object
using Smart Identification:

1. According to the Smart Identification definition for Web image objects, QuickTest
learned the values of the following properties when you recorded the click on the Login
image:




2. QuickTest begins the Smart Identification process by identifying the five objects on the
Mercury Tours page that match the base filter properties definition (html tag = INPUT
and image type = Image Button). QuickTest considers these to be the object candidates
and begins checking the object candidates against the Optional Filter Properties list.


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad    Page 6
VLearn Technologies
                               www.mysaptesting.com

3. QuickTest checks the alt property of each of the object candidates, but none have the
alt value: Login, so QuickTest ignores this property and moves on to the next one.

4. QuickTest checks the name property of each of the object candidates, and finds that
two of the objects (both the basic and VIP Login buttons) have the name: login.
QuickTest filters out the other three objects from the list, and these two login buttons
become the new object candidates.

5. QuickTest checks the file name property of the two remaining object candidates. Only
one of them has the file name login.gif, so QuickTest correctly concludes that it has
found the Login button and clicks it.
Step-by-Step Instructions for Configuring a Smart Identification Definition
you use the Smart Identification Properties dialog box, accessible from the Object
Identification dialog box, to configure the Smart Identification definition for a test object
class.

To configure Smart Identification properties:
1. Choose Tools > Object Identification. The Object Identification dialog box opens.




2. Select the appropriate environment in the Environment list. The test object classes
associated with the selected environment are displayed in the Test object classes list.
Note: The environments included in the Environment list are those that correspond to the
loaded add-in environments.
3. Select the test object class you want to configure.
4. Click the Configure button next to the Enable Smart Identification check box. The
Configure button is enabled only when the Enable Smart Identification option is selected.
The Smart Identification Properties dialog box opens:



Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad    Page 7
VLearn Technologies
                               www.mysaptesting.com




5. In the Base Filter Properties list, click Add/Remove. The Add/Remove Properties
dialog box for base filter properties opens.




6. Select the properties you want to include in the Base Filter Properties list and/or clear
the properties you want to remove from the list.

Tip: You can also add property names to the set of available properties for Web objects
using the attribute/ notation. To do this, click New. The New Property dialog box opens.
Enter a valid property in the format attribute/ and click OK. The new property is added to
the Base Filter Properties list. For example, to add a property called MyColor, enter
attribute/MyColor.

7. Click OK to close the Add/Remove Properties dialog box. The updated set of base
filter properties is displayed in the Base Filter Properties list.




Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad    Page 8
VLearn Technologies
                              www.mysaptesting.com

8. In the Optional Filter Properties list, click Add/Remove. The Add/Remove Properties
dialog box for optional filter properties opens.




9. Select the properties you want to include in the Optional Filter Properties list and/or
clear the properties you want to remove from the list.
Note: You cannot include the same property in both the base and optional property lists.
You can specify a new property by clicking New and specifying a valid property name in
the displayed dialog box.

Tip: You can also add property names to the set of available properties for Web objects
using the attribute/ notation. To do this, click New. The New Property dialog box opens.
Enter a valid property in the format attribute/ and click OK. The new property is added to
the Optional Filter Properties list. For example, to add a property called MyColor, enter
attribute/MyColor.

10. Click OK to close the Add/Remove Properties dialog box. The properties are
displayed in the Optional Filter Properties list.




11. Use the up and down arrows to set your preferred order for the optional filter
properties. When QuickTest uses the Smart Identification mechanism, it checks the
remaining object candidates against the optional properties one-by-one according to the
order you set in the Optional Filter Properties list until it filters the object candidates
down to one object.


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad    Page 9
VLearn Technologies
                               www.mysaptesting.com


How to verify that the Siebel Test Automation module is installed?

Check that the list of running processes in the Windows Task Manager includes a process
named SiebelAx_Test_A. This process will appear only after you have logged into the
Siebel application.

Does Mercury QTP care what mode the Siebel application is in (HI vs. SI)?
Support for High Interactivity applications is different from support for Standard
Interactivity applications. When recording a script against a HI application, the script
mostly contains calls into the Siebel-provided test automation API. In contrast, when
recording a script against a pure SI application or against a SI component that is
embedded within an HI application (e.g. customer dashboard, query assistant, search
center), the script mostly contains calls that use Mercury‘s native scripting syntax.

Descriptive Programming:

Whenever QTP records any action on any object of an application, it adds some
description on how to recognize that object to a repository of objects called object
repository. QTP cannot take action on an object until unless its object description is in the
Object Repository. But descriptive programming provides a way to perform action on
objects which are not in Object repository

Object Identification:

To identify an object during the play back of the scripts QTP stores some properties
which helps QTP to uniquely identify the object on a page. Below screen shots shows an
example Object repository:




        Now to recognize a radio button on a page QTP had added 2 properties the name
of the radio button and the html tag for it. The name the left tree view is the logical name

Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 10
VLearn Technologies
                               www.mysaptesting.com

given by QTP for the object. This can be changed as per the convenience of the person
writing the test case. QTP only allows UNIQUE logical name under same level of
hierarchy. As we see in the snapshot the two objects in Browser->Page node are
―WebTable‖ and ―testPath‖, they cannot have the same logical name. But an object under
some other node can have the same name. Now with the current repository that we have,
we can only write operation on objects which are in the repository. Some of the example
operations are given below

Browser("Browser").Page("Page").WebRadioGroup ("testPath").Select "2"
CellData = Browser("Browser").Page("Page").WebTable ("WebTable").GetCellData
(1,1)
Browser("Example2").Page("Page").WebEdit("testPath").Set "Test text"




When and Why to use Descriptive programming?

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

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

2. When object repository is getting huge due to the no. of objects being added. If the size
of Object repository increases too much then it decreases the performance of QTP while
recognizing an object.

3. When you don‘t want to use object repository at all. Well the first question would be
why not Object repository? Consider the following scenario which would help
understand why not Object repository

Scenario 1: Suppose we have a web application that has not been developed yet.Now
QTP for recording the script and adding the objects to repository needs the application to
be up, that would mean waiting for the application to be deployed before we can start of
with making QTP scripts. But if we know the descriptions of the objects that will be
created then we can still start off with the script writing for testing

Scenario 2: Suppose an application has 3 navigation buttons on each and every page.
Let the buttons be ―Cancel‖, ―Back‖ and ―Next‖. Now recording action on these buttons
would add 3 objects per page in the repository. For a 10 page flow this would mean 30
objects which could have been represented just by using 3 objects. So instead of adding
these 30 objects to the repository we can just write 3 descriptions for the object and use it
on any page.
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 11
VLearn Technologies
                              www.mysaptesting.com

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

How to use Descriptive Programming?

There are two ways in which descriptive programming can be used
1. By creating properties collection object for the description.
2. By giving the description in form of the string arguments.

1. By creating properties collection object for the description.

To use this method you need first to create an empty description
Dim obj_Desc ‗Not necessary to declare

Set obj_Desc = Description.Create

Now we have a blank description in ―obj_Desc‖. Each description has 3 properties
―Name‖, ―Value‖ and ―RegularExpression‖.
obj_Desc(―html tag‖).value= ―INPUT‖

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

obj_Desc (―html tag‖).value= ―INPUT‖
obj_Desc (―name‖).value= ―txt.*‖

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

obj_Desc(―html tag‖).value= ―INPUT‖
obj_Desc(―name‖).value= ―txt.*‖
obj_Desc(―name‖).regularexpression= ―txt.*‖

This is how we create a description. Now below is the way we can use it

Browser(―Browser‖).Page(―Page‖).WebEdit(obj_Desc).set ―Test‖

When we say .WebEdit(obj_Desc) we define one more property for our description that
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 12
VLearn Technologies
                                 www.mysaptesting.com

was not earlier defined that is it‘s a text box (because QTPs WebEdit boxes map to text
boxes in a web page).

If we know that we have more than 1 element with same description on the page then we
must define ―index‖ property for the that description

Now the html code has two objects with same description. So distinguish between these 2
objects we will use the ―index‖ property. Here is the description for both the object

For 1st textbox:
obj_Desc(―html tag‖).value= ―INPUT‖
obj_Desc(―name‖).value= ―txt_Name‖
obj_Desc(―index‖).value= ―0‖

For 2nd textbox:
obj_Desc(―html tag‖).value= ―INPUT‖
obj_Desc(―name‖).value= ―txt_Name‖
obj_Desc(―index‖).value= ―1‖
We can use the same description for both the objects and still distinguish between both of
them
obj_Desc(―html tag‖).value= ―INPUT‖
obj_Desc(―name‖).value= ―txt_Name‖

When I want to refer to the textbox then I will use the inside a WebEdit object and to
refer to the radio button I will use the description object with the WebRadioGroup object.

Browser(―Browser‖).Page(―Page‖).WebEdit(obj_Desc).set ―Test‖ ‗Refers to the text box
Browser(―Browser‖).Page(―Page‖).WebRadioGroup(obj_Desc).set ―Test‖ ‗Refers to the
radio button

But if we use WebElement object for the description then we must define the ―index‖
property because for a webelement the current description would return two objects.

Hierarchy of test description:

When using programmatic descriptions from a specific point within a test object
hierarchy, you must continue to use programmatic descriptions
from that point onward within the same statement. If you specify a test object by its
object repository name after other objects in the hierarchy have
been described using programmatic descriptions, QuickTest cannot identify the object.

For example, you can use Browser(Desc1).Page(Desc1).Link(desc3), since it uses
programmatic descriptions throughout the entire test object hierarchy.
You can also use Browser("Index").Page(Desc1).Link(desc3), since it uses programmatic
descriptions from a certain point in the description (starting
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 13
VLearn Technologies
                              www.mysaptesting.com

from the Page object description).

However, you cannot use Browser(Desc1).Page(Desc1).Link("Example1"), since it uses
programmatic descriptions for the Browser and Page objects but
then attempts to use an object repository name for the Link test object (QuickTest tries to
locate the Link object based on its name, but cannot
locate it in the repository because the parent objects were specified using programmatic
descriptions).

Getting Child Object:

We can use description object to get all the objects on the page that matches that specific
description. Suppose we have to check all the checkboxes present on a web page. So we
will first create an object description for a checkboxe and then get all the checkboxes
from the page




Dim obj_ChkDesc

Set obj_ChkDesc=Description.Create
obj_ChkDesc(―html tag‖).value = ―INPUT‖
obj_ChkDesc(―type‖).value = ―checkbox‖

Dim allCheckboxes, singleCheckBox
Set allCheckboxes = Browse(―Browser‖).Page(―Page‖).ChildObjects(obj_ChkDesc)
For each singleCheckBox in allCheckboxes
singleCheckBox.Set ―ON‖
Next

The above code will check all the check boxes present on the page. To get all the child
objects we need to specify an object description i.e. we can‘t use the string arguments
that will be discussed later in the 2nd way of using the programming description.

Possible Operation on Description Object
Consider the below code for all the solutions
Dim obj_ChkDesc

Set obj_ChkDesc=Description.Create
obj_ChkDesc(―html tag‖).value = ―INPUT‖
obj_ChkDesc(―type‖).value = ―checkbox‖

Q: How to get the no. of description defined in a collection
A: obj_ChkDesc.Count ‗Will return 2 in our case
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 14
VLearn Technologies
                              www.mysaptesting.com


Q: How to remove a description from the collection
A: obj_ChkDesc.remove ―html tag‖ ‗would delete the html tag property from the
collection

Q: How do I check if property exists or not in the collection?

A: The answer is that it‘s not possible. Because whenever we try to access a property
which is not defined its automatically added to the collection. The only way to determine
is to check its value that is use an if statement ―if obj_ChkDesc(―html tag‖).value =
empty then‖.

2. By giving the description in form of the string arguments.

This is a more commonly used method for Descriptive Programming.
You can describe an object directly in a statement by specifying property:=value pairs
describing the object instead of specifying an object‘s name.


The general syntax is:

TestObject("PropertyName1:=PropertyValue1", "..." ,
"PropertyNameX:=PropertyValueX")

TestObject—the test object class could be WebEdit, WebRadioGroup etc….

Browser(―Browser‖).Page(―Page‖).WebRadioGroup(―Name:=txt_Name‖,‖html
tag:=INPUT‖).set ―Test‖

If we refer to them as a web element then we will have to distinguish between the 2 using
the index property

Browser(―Browser‖).Page(―Page‖).WebElement(―Name:=txt_Name‖,‖html
tag:=INPUT‖,‖Index:=0‖).set ―Test‖ ‗ Refers to the textbox
Browser(―Browser‖).Page(―Page‖).WebElement(―Name:=txt_Name‖,‖html
tag:=INPUT‖,‖Index:=1‖).set ―Test‖ ‗ Refers to the radio button
Four different ways to launch your application are mentioned below:

SystemUtil.Run

SystemUtil.Run ( FileName, Parameters, Path, Operation )
FileName - The name of the file you want to run.
Parameters - If the specified FileName is an executable file, use the Parameters
argument to specify any parameters to be passed to the application.
Path - The default directory of the application or file.
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 15
VLearn Technologies
                              www.mysaptesting.com

Operation - The action to be performed. If this argument is blank (""), the open
operation is performed.
The following operations can be specified for the operation argument of the
SystemUtil.Run method:

Example: SystemUtil.Run ―c:flight.exe‖

InvokeApplication
InvokeApplication("Full URL as Parameter")

Static and Dynamic Arrays:

VBScript provides flexibility for declaring arrays as static or dynamic.
A static array has a specific number of elements. The size of a static array cannot be
altered at run time.
A dynamic array can be resized at any time. Dynamic arrays are useful when size of the
array cannot be determined. The array size can be changed at run time.
Next we will deal with user defined procedures, functions and subroutines.

I have seen an umpteen no of posts in every QTP group I visited asking about Test
Automation frameworks. Here I would like to collate the useful inputs i received from
various QTP groups and discussion forums.

Data-driven Testing:

Data-driven testing is a framework where test input and output values are read from data
files (datapools, ODBC sources, csv files, Excel files, DAO objects, ADO objects, and
such) and are loaded into variables in captured or manually coded scripts. In this
framework, variables are used for both input values and output verification values.
Navigation through the program, reading of the data files, and logging of test status and
information are all coded in the test script

Modularity-driven testing

The test script modularity framework requires the creation of small, independent scripts
that represent modules, sections, and functions of the application-under-test. These small
scripts are then used in a hierarchical fashion to construct larger tests, realizing a
particular test case.

'####################################################
'# Descriptive Programming Objects
'####################################################
'# Modifications: Enter changes to the code in this space

Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 16
VLearn Technologies
                               www.mysaptesting.com

'####################################################
'# Public Sub WebTableLink (strWebLink)
'####################################################
'# Modifications: Enter changes to the code in this space
'####################################################

Public Sub DPWebEdit (strWebEdit,strInValue)
       If strInValue <> "" Then
               Set obj_WebEdit = Description.Create

                obj_WebEdit ("Class Name").value = "WebEdit"
                obj_WebEdit ("name").value= strWebEdit

                Browser(strBrowser).page(strPage).Sync
                Browser(strBrowser).Page(strPage).WebEdit(obj_WebEdit).Set
strInValue
       End If
End Sub

'########################################################

Public Sub DPWebEditSetSecure (strWebEdit,strInValue)
       If strInValue <> "" Then
               Set obj_WebEdit = Description.Create

                obj_WebEdit ("Class Name").value = "WebEdit"
                obj_WebEdit ("name").value= strWebEdit

                Browser(strBrowser).page(strPage).Sync
                Browser(strBrowser).Page(strPage).WebEdit(obj_WebEdit).SetSecure
strInValue
       End If
End Sub

'########################################################

Public Sub DPWebList (strWebList,strInValue)
       If strInValue <> "" Then
               Set obj_WebList = Description.Create

                obj_WebList ("Class Name").value = "WebList"
                obj_WebList ("name").value= strWebList

                Reporter.Filter = 3 'Turn Reporting of
                Call TestListValues (obj_WebList,strInValue) 'Check for valid item in list
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 17
VLearn Technologies
                               www.mysaptesting.com

                Reporter.Filter = 0 'Turn Reporting on

                Browser(strBrowser).page(strPage).Sync
                Browser(strBrowser).Page(strPage).WebList(obj_WebList).Select
strInValue
       End If
End Sub

'########################################################

Public Sub DPRadioGroup (strWebRadioGroup,strInValue)
  Set obj_WebRadioGroup = Description.Create

       obj_WebRadioGroup ("Class Name").value = "WebRadioGroup"
       obj_WebRadioGroup ("name").value= strWebRadioGroup

        Browser(strBrowser).page(strPage).Sync
        Browser(strBrowser).Page(strPage).WebRadioGroup(obj_WebRadioGroup).Sele
ct strInValue
End Sub

'####################################################

Public Sub DPWebImage (strImage)
  Set obj_Image = Description.Create

       obj_Image ("Class Name").value = "Image"
       obj_Image ("name").value= strImage

       Browser(strBrowser).page(strPage).Sync
       Browser(strBrowser).Page(strPage).Image(obj_Image).Click '6,7

End Sub

'####################################################

Public Sub DPWebCheckBox (strWebCheckBox,strInValue)
  Set obj_WebRadioGroup = Description.Create

       obj_WebCheckBox ("Class Name").value = "WebCheckBox"
       obj_WebCheckBox ("name").value= strWebRadioGroup

       Browser(strBrowser).page(strPage).Sync
       Browser(strBrowser).Page(strPage).WebCheckBox(obj_WebCheckBox).Select
strInValue
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 18
VLearn Technologies
                           www.mysaptesting.com

End Sub

'####################################################
Public Sub DPWebLink (strWebLink)

  Set obj_WebLink = Description.Create
       obj_WebLink ("Class Name").value = "Link"
       obj_WebLink ("name").value= strWebLink

      Count = 1
      Do until Browser(strBrowser).Page(strPage).Link(obj_WebLink).Exist
             if Browser(strBrowser).Page(strPage).Link(obj_WebLink).Exist Then
                    Exit Do
             End If

             Count = Count + 1

             If Count = 20 Then
                    Exit Do
             end if
      Loop

      Browser(strBrowser).Page(strPage).Link(obj_WebLink).Click

End Sub

'####################################################

Public Sub DPWebButton (strWebButton)
  Set obj_WebButton = Description.Create

      obj_WebButton ("Class Name").value = "WebButton"
      obj_WebButton ("name").value= strWebButton

      Browser(strBrowser).page(strPage).Sync
      Browser(strBrowser).Page(strPage).WebButton(obj_WebButton).Click

End Sub




Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 19
VLearn Technologies
                              www.mysaptesting.com

'####################################################
' Close all opened browsers
‗####################################################

Public Function CloseBrowsers
       If Browser("micclass:=Browser").Exist (0) Then
              Browser("micclass:=Browser").Close
       End If
       While Browser("micclass:=Browser", "index:=1").Exist (0)
              Browser("index:=1").Close
       Wend
       If Browser("micclass:=Browser").Exist (0) Then
              Browser("micclass:=Browser").Close
       End If
End Function

‗#####################################################

Set myBrowser = Description.Create
myBrowser("version").value = "internet explorer 7"
Set eachBrowser = Desktop.ChildObjects(myBrowser)
        b= eachBrowser.count()
          msgbox "No of Windows Browsers Opened" & VBNewLine &b
For i = 1 to b - 1
        msgbox "Browser Names" &eachBrowser(i).getroproperty("text")
  eachBrowser(i).close

Next

‗####################################################
‗ Launch Application
' returns - always returns true
‗####################################################

Public Function Launch (apptype, val)
       If "website" = apptype Then
              thirdlevel = ""
              Report micPass, "Initialize", "Initializing Framework"
              level = split(webLevels, leveldelimiter, -1, 1)
              desc = split(webLevelsDesc, leveldescdelimiter, -1, 1)
              object = split(objects, objectdelimiter, -1, 1)
       objectDescription = split(objectsDescription, objectsDescriptiondelimiter, -1, 1)
              CloseBrowsers

               Set IE = CreateObject("InternetExplorer.Application")
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 20
VLearn Technologies
                                www.mysaptesting.com

                IE.visible = true
                IE.Navigate val
                While IE.Busy
                        wait 1
                Wend
      End If
      initialized = true
      Launch = true
End Function

‗####################################################
‗ WebElement Items
‗####################################################

Set oDesc = Description.Create()
oDesc("Class Name").Value = "WebElement"
oDesc("Class").Value = "hp_hclist_box"

rc = Browser("WebMD - Better information.").Page("WebMD - Better
information.").WebElement(oDesc).GetROProperty("innertext")

sp = Split(rc, " ")
Msgbox sp(4)

‗####################################################

Set Desc= description.Create()
desc("micclass").value ="WebCheckBox"
Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc)

s=data.count()
msgbox "Buttons" & VBNewLine &s

For i = 0 to s - 1
        msgbox data(i).getroproperty("name")
Next

‗####################################################

Set Desc= description.Create()
desc("micclass").value ="WebEdit"
Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc)
s=data.count()
msgbox "Buttons" & VBNewLine &s


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 21
VLearn Technologies
                             www.mysaptesting.com

For i = 0 to s - 1
        msgbox data(i).getroproperty("name")
Next

‗####################################################

Set Desc= description.Create()
desc("micclass").value ="WebRadioButton"
Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc)
s=data.count()
msgbox "Buttons" & VBNewLine &s

For i = 0 to s - 1
        msgbox data(i).getroproperty("name")
Next

‗####################################################

Set Desc= description.Create()
desc("micclass").value ="WebButton"
Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc)
s=data.count()
msgbox "Buttons" & VBNewLine &s

For i = 0 to s - 1
        msgbox data(i).getroproperty("name")
Next

‗####################################################
‗ Links and URL‘s
‗####################################################

Set oDesc = Description.Create()

oDesc("html tag").Value = "A"
Set rc = Browser("Google").Page("Google").ChildObjects(oDesc)
num = rc.Count()
For i=0 to num-1
tag = rc(i).GetROProperty("innertext")
href = rc(i).GetROProperty("href")
Reporter.ReportEvent 0, "Links in Page", "name: " & tag &"; url:" & href
Next

‗####################################################
‗ Automation Object Model
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 22
VLearn Technologies
                             www.mysaptesting.com

‗####################################################

Dim App 'As Application
Set App = CreateObject("QuickTest.Application")
App.Launch
App.Visible = True

App.Test.Settings.Launchers("Web").Active = False
App.Test.Settings.Launchers("Web").Browser = "IE"
App.Test.Settings.Launchers("Web").Address = "http://newtours.mercury.com "
App.Test.Settings.Launchers("Web").CloseOnExit = True

App.Test.Settings.Launchers("Windows Applications").Active = False
App.Test.Settings.Launchers("Windows Applications").Applications.RemoveAll
App.Test.Settings.Launchers("Windows Applications").RecordOnQTDescendants = True
App.Test.Settings.Launchers("Windows Applications").RecordOnExplorerDescendants =
True
App.Test.Settings.Launchers("Windows Applications").RecordOnSpecifiedApplications
= True
App.Test.Settings.Run.ObjectSyncTimeOut = 20000

App.Test.Settings.Run.DisableSmartIdentification = False

App.Test.Settings.Run.OnError = "Dialog"

App.Test.Settings.Resources.Libraries.RemoveAll
App.Test.Settings.Resources.Libraries.Add("E:childobject3.vbs")
App.Test.Settings.Resources.Libraries.Add("E:WriteToexcel.vbs")
App.Test.Settings.Resources.Libraries.Add("E:SugarCRM.vbs")
App.Test.Settings.Web.BrowserNavigationTimeout = 60000
App.Test.Settings.Web.ActiveScreenAccess.UserName = ""
App.Test.Settings.Web.ActiveScreenAccess.Password = ""
App.Test.Settings.Recovery.Enabled = True

App.Test.Settings.Recovery.SetActivationMode "OnError"
App.Test.Settings.Recovery.Add "E:aaaa.qrs", "Recov_Popup", 1
App.Test.Settings.Recovery.Item(1).Enabled = True
App.Test.Environment.LoadFromFile("E:InputDataSheet.ini")

' **************************************************
Function Library
‗********************************

' Registering both functions
RegisterUserFunc "WebTable", "ObjectsByMicClass", "ObjectsByMicClass"
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 23
VLearn Technologies
                                www.mysaptesting.com

RegisterUserFunc "WebTable", "ItemByKeyColumn", "ItemByKeyColumn"

' Function: ObjectsByMicClass
' Description: Returns a collection of objects all the objects in a
' WebTable that have the specified MicClass
' Return Value: A Collection of Objects
' Arguments:
' Obj - Test Object (WebTable)
' micClass - The micClass of the objects to retrieve
'##################################################

Function ObjectsByMicClass(Obj, micClass)
  Set Table = Obj
  ' Create a collection object to hold the items
  Set objCollection = CreateObject("Scripting.Dictionary")
  ' Go over all the cells in the table, and look for objects with the specified micClass
  For row=1 to Table.RowCount
     ColumnCount=Table.ColumnCount(row)
     For col=1 to ColumnCount
       For ItemIndex=0 to Table.ChildItemCount(row, col, micClass)-1
          Set childItem=Nothing
          Set childItem = Table.ChildItem(row, col, micClass, ItemIndex)
          If Not childItem is Nothing Then
              ' If the cell contains a micClass object, add it to the collection
              ItemKey = objCollection.Count + 1
              objCollection.Add ItemKey, childItem
          End if
       Next
     Next
  Next
  Set ObjectsbyMicClass = objCollection
End Function

‗#######################################################

' Function: ItemByKeyColumn
' Description: Returns an item from a column, based on the value of a
' key column
' Return Value: Object
' Arguments:
' Obj - Test Object (WebTable)
' KeyColumnIndex - Index of the KeyColumn
' KeyColumnValue - Value to search for in the key column
' KeyItemIndex - Index of the value in the key column (if there is
'               more than one). If 0, the first item will be used.
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 24
VLearn Technologies
                              www.mysaptesting.com

' TargetColumnIndex - Column from which to retrieve the target item
' micClass - The micClass of the target item
' TargetItemIndex - Index of the target item to retrieve (if there is
'                more than one). If 0, the first item will be used.

‗#######################################################
Function ItemByKeyColumn(Obj, KeyColumnIndex, KeyColumnValue, KeyItemIndex,
TargetColumnIndex, micClass, TargetItemIndex)
  Table = Obj
  rowCount = Table.RowCount

  ' if TargetItemIndex was not specified, use 1 as deafult
  If TargetItemIndex < 1 Then
      TargetItemIndex = 1
  End If
  ' if KeyColumnIndex was not specified, use 1 as default
  If KeyItemIndex < 1 Then
      KeyItemIndex = 1
  End If

  ' look for KeyColumnValue in the key column to determine which
  ' row to retrieve the targe item from
  Row = 0
  foundIndex = 0
  While Row <= RowCount And foundIndex < KeyItemIndex
      Row = Row + 1
      CellData = Table.GetCellData(Row, KeyColumnIndex)
      If CellData = KeyColumnValue Then
        foundIndex = foundIndex + 1
      End If
  Wend
  If foundIndex < KeyItemIndex Then
      Exit Function
  End If

  ' Now that we know the row, retrieve the item (according to its micClass)
  ' from the target column.

  ChildItemsCount = Table.ChildItemCount(Row, TargetColumnIndex, micClass)
  If ChildItemsCount > =1 And ChildItemsCount >= TargetItemIndex Then
      Set GetItemByKeyColumn = Table.ChildItem(Row, TargetColumnIndex,
micClass, TargetItemIndex-1)
  End If
End Function


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 25
VLearn Technologies
                             www.mysaptesting.com

' ************************************

' Using the ItemByKeyColumn Function
‗##################################################

Set obj = Browser("Table with objects").Page("Itenerary: Mercury
Tours").WebTable("Acapulco to
Zurich").ItemByKeyColumn(1,"FLIGHT",2,3,"WebElement",1)
msgbox obj.GetROProperty("innerhtml")

' Using the ObjectsByMicClass function
Set collection =
Browser("Browser").Page("Page").WebTable("Table").ObjectsByMicClass("WebCheck
Box")
For i=1 to collection.count
   If collection(i).GetROProperty("checked") Then
      collection(i).Set "OFF"
   Else
      collection(i).Set "ON"
   End If
Next

‗##########################################
' Example 1
‗#############################################

Function SendMail(SendTo, Subject, Body, Attachment)
  Set ol=CreateObject("Outlook.Application")
  Set Mail=ol.CreateItem(0)
  Mail.to=SendTo
  Mail.Subject=Subject
  Mail.Body=Body
  If (Attachment <> "") Then
     Mail.Attachments.Add(Attachment)
  End If
  Mail.Send
  ol.Quit
  Set Mail = Nothing
  Set ol = Nothing
End Function




Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 26
VLearn Technologies
                             www.mysaptesting.com

‗##################################################
' Example 2
‗###############################################

Function SendMail(SendFrom, SendTo, Subject, Body)
  Set objMail=CreateObject("CDONTS.Newmail")
  ObjMail.From = SendFrom
  ObjMail.To = SendTo
  ObjMail.Subject = Subject
  ObjMail.Body = Body
  ObjMail.Send
  Set objMail = Nothing
End Function

‗############################
‗ InString
‗############################

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP" ' String to search in.
SearchChar = "P" ' Search for "P".
MyPos = Instr(4, SearchString, SearchChar,1) ' A textual comparison starting at position
4. Returns 6.
msgbox mypos
MyPos = Instr(1, SearchString, SearchChar, 0) ' A binary comparison starting at
position 1. Returns 9.
msgbox mypos
MyPos = Instr(SearchString, SearchChar) ' Comparison is binary by default (last
argument is omitted). Returns 9.
msgbox mypos
MyPos = Instr(1, SearchString, "W") ' A binary comparison starting at position 1.
Returns 0 ("W" is not found).
msgbox mypos
‗########################################

                                  QTP 10.0 Features


1. QC integration – Which (mostly) down to Resource Management and Source

Resource Management: Although you could keep saving your resources as attachments
(for backward compatibility), you can upgrade to a new, fuller mode of work. This
includes a whole new Resource module in QC, and allows for some very neat tricks on
Function Libraries, Tests and Object Repositories etc.
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 27
VLearn Technologies
                               www.mysaptesting.com

It should be noted, though, that other types of files (external excel / XML files, for
example), remain as unmanaged attachments.

Resources have full meta-data, and have a special view pane – you can view Object-
Repositories, data-tables, and function libraries code right from QC. This looks quite
nice; however, I missed the ability to open the resource for editing in QTP with a single
click.

Automatically updated path system – When moving a function library between folders,
QC will automatically update all the tests which depend on it, so they will use it at its
new location. This makes the once critical problem of hard-path-link a non-issue. Very
impressive.

A word about the user interface – when opening a QC resource / test from QTP, the file
dialog shows the items with large, crisp icons, very similar to Word‘s save dialog.
Everything is very clear and intuitive, as is the ability to revert back to saving / opening a
test from the File-System.

What about your existing projects? Well, when upgrading to QC 10, a wizard will
automatically transform all you unmanaged attachments to managed resources (if you‘d
like it to).

Source Control: This includes a very rich line of features which are very well executed,
and effectively allow you to manage a QTP project as any other code project:

First, the basics – QTP and QC 10 introduce a new Check-in/Check-out ability. It
works similar to what you‘d expect – a checked out item will be locked to all other users,
and you can immediately know an item‘s status by looking at its icon (green/red locks).

An interesting twist regards manner in which a test / resource is locked – it‘s at the user
level (not the local machine level). This means that if you log into QC from a different
machine, you‘ll have access to all your checked-out items, even if they were originally
checked-out on a different local machine. The ability is implemented very well, both
from QTP‘s end, as well as from QC‘s end.

A major enabler for source control is the new versioning feature of QC. It manifests
both with a kind of instant versioning for a single resource, and with a project-wide
―base-line version‖, which allows you to revert your entire test framework to a previous
version. Both types of versioning are supported by a surprisingly robust comparison
mechanism. You can select two versions of a resource / test, a see a very detailed
comparison of their respective changes. For function libraries this amounts to a ―simple‖
text comparison, but this feature truly shines in full test comparisons.

It will present changes in the different actions and their resources (data-table, object
repositories, inner code), as well as in the global test-settings, associated function
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 28
VLearn Technologies
                               www.mysaptesting.com

libraries, recovery scenarios, and pretty much anything you could think of. The ability to
drill-down into the data is very impressive; and the effective, concise manner in which
the data is presented in the top level view is downright unbelievable. A nice touch is a
small screen capture of the change, in case you don‘t remember what ―Run all rows –
>Changed into-> Run a single iteration only‖ means (for example).

Now to the versioning mechanism itself: Whenever you check and item in, a new
―version‖ will be created, and you‘ll be able to revert back to it with ease. As this is a
version of a single, isolated resource, I found it better to refer to it as a SnapShot – my
terminology, not HP‘s. The snapshots are visible both from QC and QTP, and you can
very easily choose which one to open. This allows you a kind of an instant undo to a
single file which worked in the past, but is broken in the present.

The second mechanism presents the ability to select several folders, and create a full
blown ―base-line version‖ of them and everything they relate to. Defects, inner-
connections, tests, history data, resources – all these and more will be ―frozen‖ and
preserved as a base-line. You can then choose to revert back to an old baseline, and truly
regain all the abilities that were present at that time. As all the resources, attachments
tests and reports will be restored, you don‘t have to worry about forgetting anything, or
leaving some minor resource at the wrong version. This is versioning with a vengeance –
it allows you to track the AUT‘s versions with your own automation versions, enabling,
among other things, running automation efforts on several AUT versions at once.

For conclusion – The new abilities inherit in the connection of QTP and QC Atlantis are
(or at least seem to be) revolutionary. At last, QTP projects can be natively managed as
code projects; and some of the supporting infrastructure is surprisingly robust and useful.
As a ―raving‖ anti-QC-ist, I must admit QC Atlantis seem tempting, and for me, that‘s
saying a lot!

I must contrast these very positive impressions with some dire problems: The versioning
feature will put a stain on your storage capabilities (though less than creating a simple
copy the data); all these wonderful features are available only if both your QTP and QC
are upgraded to Atlantis; and a critical issue – Previous versions of QTP will not work
with QC Atlantis. Yes, this is not a misunderstanding, there is no backward
compatibility between QC to QTP (although QTP Atlantis will work with any version of
QC). On top of these, performance may become an issue, though we were unable to
precisely evaluate it, as our QC was installed on an already overtaxed personal computer.

2. Report improvements

The native QTP report includes several new improvements:

Tracability: Selecting a report-node will automatically focus on the relevant code-line in
the script. This may sound like a cool feature at first, but a closer look revels that it only
works for actions (not functions); and that in any case, using a custom report function (as
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 29
VLearn Technologies
                              www.mysaptesting.com

most of us do) completely nullifies the feature (since you‘re always at the same code line
when performing the report).

Exporting: The report now has a two-click export feature, which comes with a built-in
ability to export to Word and PDF documents, as well as the ability to export through a
custom XSL of your choosing. You can choose between Short and Long formats
(corresponding to PShort.XSL and PDetails.XSL) to get a document relevant to your
needs. This blessed feature has one major flaw – It has no API support. This means that
you cannot export the results automatically at the end of a test run, which is quite a miss,
to say the least.

Resource Monitor: QTP can now hook onto the Windows Performance Monitor and
present it as part of the test results. You can select several counters to monitor (e.g. GDI
objects, memory usage etc.), and the monitor output graph will be available in special tab
in the result window. You can set up a ―checkpoint‖ for a counter (e.g. Fail the test if
there are more than 500 GDI objects), facilitating a kind of a poor-man‘s version of load-
testing.

The fact that clicking the graph focuses on the relevant test step (as well as the other way
around), provides an effective way to quickly locate problematic actions and resource
usage spikes. This feature is well executed, and HP has even went the extra mile and
added several unified counters that simplify monitoring the application. However, the
fact that you can only monitor one process per test may leave the more advanced users
with their own implementation of a resource monitor.

Considering the simple design and implementation of this feature, I believe it will
become a popular tool in every automation project that uses QTP 10.

Native image integration: This is a small, yet long-awaited feature. The ReportEvent
command now has a new optional parameter – you can specify a path to a picture file,
and it will be attached to the report node of the current event. When used in conjunction
with the CaptureBitmap method, this presents a technical, yet revolutionary upgrade to
the native QTP report. Finally, users can attach screenshots to their custom report events
without any special functions or frameworks.

3. IDE improvements

Intellisense: Perhaps I‘m doing injustice to the other features, but the IDE improvements,
and the new intellisense engine in particular, is what got me excited about QTP Atlantis.
So I was pretty much on the edge of my seat when we‘ve gotten to this last part of the
presentation. I‘m very pleased to say that it was every bit what I imagined it to be, with
the exception of intellisense for VBScript classes, and intellisense in the debug viewer
(both won‘t be implemented). Luckily, there are workarounds for both these issues
through the PDM hack (for debug intellisense), and WSC registration (for VBScript
Class intellisense through COM).
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 30
VLearn Technologies
                               www.mysaptesting.com

We saw a demonstration of how creating an Excel COM object provided a full
intellisense for all its methods and properties, for as many levels as we‘d like. Every
variable set to this object also presented the same intellisense, and the autocomplete
caught every variable we‘ve defined or used (yes, there‘s autocomplete for variable
names!). The autocomplete and intellisense features worked smoothly, and presented no
apparent performance issue. It‘s still left to be seen how it functions in a real script,
with hundreds / thousands code lines.

Tasks and Comment Pane: QTP has a new bottom pane which includes a run-of-the-
mill implementation of tasks and comments. Double clicking a comment will take you to
the relevant code-line, though strangely enough, you cannot do this with a task (i.e.,
tasks cannot be linked to specific code lines). It was mentioned that enabling the
comments feature for function libraries may sometimes cause performance issues.

Dynamic code-zones: When standing inside a code block like If, While, Do, etc, the IDE
will mark the relevant block with blue lines, making it much more easy to make your way
inside nested blocks of this sort (somewhat like highlighting left-right bracket pairs).
While it will surely make our life easier, a more robust mechanism like collapsible code-
regions is still needed.

Custom Toolbars: You can add your own buttons and commands to QTP toolbars and
menus. While this does not include inner-QTP macros, you can assign a program / File
shortcut to your own button / menu item. It‘s nice, but i think it will only gain power once
QTP‘s inner mechanisms will be bindable to such buttons.

4. Miscellaneous features

General look and feel: QTP has departed from the old Tab layout, and into the more
modern settings-tree layout (similar to Office, EMule, Adobe, and pretty much every
other program). It‘s nice, but nothing as groundbreaking as the transformation in QTP
9.0.

Bitmap Checkpoint improvements: These include presenting the size of the selected
area when choosing to check only a part of an Image, as well as the ability to plug your
own custom DLL for comparing images. I suppose that there are some projects for which
this can actually be quite revolutionary. Another great addition is the ability to see the
difference between the expected and actual bitmaps in a separate tab.

API changes: QTP Automation API will receive several upgrades, the most noteworthy
of which is the ability to read and write that code of the test you‘ve opened. Writing the
code will not effect an ongoing run-session (there goes my ambitious try-catch
implementation for QTP), but it still opens the door for some creative tweaks and
hacks…



Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 31
VLearn Technologies
                              www.mysaptesting.com

Saving a test with all linked resources: For those who‘re working with QC, this is a real
blessing. Up until QTP 10, copying a QC saved test to your local system was a hellish
procedure of changing each and every resource and action reference to your local file-
system. QTP and QC Atlantis offer a one-click solution for copying a test and all its
resources to your local file-system, and automatically changing all the references
accordingly.

Dynamic Action Call: I‘ve saved the best for last. QTP 10 presents a new native
command – LoadAndRunAction. It allows you to load external actions during the run-
session, without having to associate them with your test beforehand. All the run-time
debug abilities will be available for these dynamically added actions, so you‘re not giving
anything up by using this feature. I think it‘s a long awaited feature, and a well executed
one.

What surprises are in store in QTP?

1. Stronger than ever Quality Center integration.

An external resources manager: No more hellish workarounds for saving resources as
attachments (function libraries, shared OR etc.). From now on, an external resource will
become a fully-fledged QC entity, with its own meta-data (which means it‘s searchable!),
fields and versions.

Versions: QTP tests and all the external resources will now have full versioning support.
This will include reverting back to an old version (immediately, from the open file menu
if you‘d wish), as well as comparing versions - from the attached resources of the tests,
though the objects in the SOR, to the changed lines in the function library files.
Versioning is available for manual tests as well, thus allowing for a very smooth
integration of automation with manual testing.

I must say that this is one feature I would consider migrating my tests to Quality Center
for.

2. Intellisense

It’s a known fact that the QTP intellisense popup can be quite annoying – just when
you‘re dealing with a very complex .Net/Java object, the window proves to be too narrow
to fully display the object‘s properties and methods. Tarun has continued his great work
on providing productivity enhancing tools and code libraries, and has posted a resizer for
the intellisense popup window.

COM objects intellisense - for example, if you‘d use an Excel.Application object, you‘d
see all its inner methods and properties, up to the N-th level



Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 32
VLearn Technologies
                               www.mysaptesting.com

Variable bridge intellisense - which means that if you‘d assign some object to a
variable, the variable will have the same intellisense as the original object

These three abilities present the bulk of abilities you would like to have in an intellisense
system. It‘s not that there isn‘t room for more abilities, but these three are sure to make
working with the new QTP an entirely different experience. It‘s unclear if this would
include auto-complete for script variables, but my guess is that it will.

I was told that all these intellisense features will not apply to VBScript classes, but only
to COM objects and RO objects. As one who relays heavily on my own VBScript classes,
I was very disappointed. However, it must be said that not a lot of QTP programmers
work with their own VBScript classes, so it‘s a shortcoming that only a handful of people
should mind.

3. More IDE improvements

These include the integration of a comment driven To-Do pane, as well as a jump-to-
comment ability. Not anything out of the ordinary, but a blessed addition to the very
limited QTP IDE environment. Further more, and three versions too late – Toolbar
customizations! You could rearrange existing icons, as well as add calls to external
commands (e.g. launch the AUT) as separate icons.

4. Reporter improvements

The reporter will now be able to natively export the HTML to PDF (and perhaps some
other formats).

A completely new feature will be an integrated performance counter which would
monitor the computer resources throughout the test. This, combined with a new ability to
jump to the relevant script live from the report will facilitate a whole new level of testing
– almost like a poor-man‘s version of a load test.

However, there‘s still no word on filtering, searching, and running several reporters
concurrently (although the infrastructure exists since QTP 8.2). Another overlooked issue
is the report‘s availability in case of a mid-run crash.

5. New checkpoint abilities

You could set up a whole new kind of checkpoint for the computed resources – for
example, fail the test if the application uses more than 500 GDI objects, and other
parameters. This ability is closely coupled with the new resource monitor report. Another
welcomed improvement is the ability to hook up your own algorithm for image
comparison straight into QTP‘s native image checkpoint mechanism.

6. New environments
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 33
VLearn Technologies
                              www.mysaptesting.com

It will include at least: Windows XP SP3, Windows 2008, Windows Vista SP1, IE8,
FireFox 3, the new cirtrix client.

PRODUCT ENHANCEMENTS

Upgrade from QuickTest 9.5 - If you have QTP 9.5 Installed on the system, you can
choose to upgrade to version 10.0. This will allow you to preserve some of the
configuration settings and options that you already have set up.

Improved IntelliSense Functionality - QTP now provides full IntelliSense for objects
created by a step or function (i.e. objects created by Create Object method), variables to
which an object is assigned, reserved objects, COM objects and properties that return
objects. In addition, Intellisense sentence completion now provides lists of local
variables.

Added Control for Editing and Managing Actions in Automation Scripts - The QTP
Automation Object Model has a new set of objects and methods for manipulating test
actions and action parameters. You can use automation scripts to create new actions,
modify and validate the syntax of action scripts, create and modify action parameters, and
more.

Improved Debugger Pane Design and Functionality - The Debug Viewer pan has a
new look, including icons to help you identify the type of information displayed.

New Object Identification Solutions in Maintenance Run Mode - In addition to
helping you update your steps and object repositories when objects in application change,
the Maintenance Run Wizard can now help you solve problems dealing with test failures
due to missing objects, or objects that can only be recognized via Smart Identification.

Additional Configuration Settings for Text Recognition Mechanism - You can now
set all text recognition configuration settings from the QuickTest Options Dialog Box

New Look for Options, Settings, and File Dialog Boxes - The QuickTest Options and
Settings dialog boxes have changed from their former ta-based design to a more easily
navigable tree-based structure. The tree contains only the options relevant for the add-ins
that are currently loaded.

QuickTest Toolbar Customization Options - You can use the new Customize Dialog
box to customize the appearance of existing menus and toolbars, and to create your own
user-defined menus, toolbar buttons, and shortcuts.

Improved Web Extensibility - QTP Web Add-in Extensibility enables you to develop
packages that provide high level support for thir-party and custom Web controls that are
not supported out-of-the-box by the Web Add-in.

Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 34
VLearn Technologies
                             www.mysaptesting.com

NET Add-in and Extensibility Improvements - The .NET Add-in has several new
objects and methods, including the SwfPropertyGrid test object (for working with .NET
Windows Forms property grids), GetErrorProviderText method and ErrorProviderText
identification property.

New Terminal Emulator Configuration Validation - The new Terminal Emulator pane
of the Options dialog box now includes a Validate button. When you click this button,
QTP checks the current configurations of the selected emulator. If a problem is detected,
a brief description is displayed in the pane.

NEW SUPPORTED OPERATING SYSTEMS AND ENVIRONMENTS

     Microsoft Windows 2008 Server 32-bit Edition
     Microsoft Windows 2008 Server 64-bit Edition
     Microsoft Windows Vista, Service Pack 1, 32-bit Edition
     Microsoft Windows Vista, Service Pack 1, 64-bit Edition
     Microsoft Windows XP Professional 32-bit Edition -- Service Pack 3
     Citrix Presentation Server 4.5
     Microsoft Internet Explorer 8, Beta 2
     Mozilla firefox 3.0.x
     Delphi: IDE, versions 6, 7, and 2007 (for controls based on the Win32 VCL
      library)
   SAP: CRM 2007 (For controls that support test mode enhancements
   Java: IBM 32-bit JDK 1.5.x, SWT toolkit version 3.4
   Java Extensibility: Eclipse IDE 3.4
NET: .NET Framework 3.5 -- Service Pack 1

// ** TO Count Broken Links in Web Page Using VBScript
1.
Set obj=Browser(―name:=Blackboard.*‖).Page(―title:=Blackboard.*‖).
Frame(―name:=main.*‖).object.all.tags(―IMG‖)
Msgbox obj.length
For each element in obj
s1=element.nameProp
If Browser().Page().Frame().Image(―filename:=―&s1,‖index:=0‖).exist(0) then
    If Browser().Page().Frame().Image(―filename:=―&s1,‖index:=0‖).
    Object.complete=―True‖ then
    Msgbox ―pass‖
    Else
    Msgbox ―fail‖
    End if
End if
Next

// TO Count Broken Links in Web Page Using VBScript
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 35
VLearn Technologies
                             www.mysaptesting.com

If Browser(―my_web‖).Page(―GlobalPage‖).Link(―Logout‖).
GetROProperty(―href‖)<>―javascript:__doPostBack('ctl00$lkLogout','Logout')‖ Then
Reporter.ReportEvent micFail ,‖href‖,Browser(―my_web‖).
Page(―GlobalPage‖).Link(―Logout‖).GetROProperty(―href‖)
End If

// // TO Count Broken Links in Web Page Using VBScript

Verify Broken Links using VBscript (without checkpoints)
One of my friends just wanted to check for the broken links (both textlinks and image
links) on the page with VB script and not the checkpoints.

Set obj=Browser("name:=Blackboard.*").Page("title:=Blackboard.*").
Frame("name:=main.*").object.all.tags("IMG")
Msgbox obj.length
For each element in obj
s1=element.nameProp
If Browser().Page().Frame().Image("filename:="&s1,"index:=0").exist(0) then
If
Browser().Page().Frame().Image("filename:="&s1,"index:=0").Object.complete="True"
then
Msgbox "pass"
Else
Msgbox "fail"
End if
End if
Next
// TO Count Broken Links in Web Page

Broken Links also sometimes called as dead links are those links on the web which are
permanently unavailable. Commonly found, 404 error is one example of such link. Now
the question is how can we identify broken links with the help of QTP during the run
session?

There can be two ways to do this:

   1. Using Automatic Page checkpoint.
   2. By manually creating a Page checkpoint.

Using Automatic Page checkpoint: Go to Tools > Options > Web > Advanced and
check the two boxes labeled ―Create a checkpoint for each page while recording‖ and
―Broken Links‖



Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 36
VLearn Technologies
                              www.mysaptesting.com




Now every time you record a new page, QTP will automatically include a checkpoint for
broken links.

By manually creating a Page checkpoint: QTP does not provide a direct menu option
to incorporate a page checkpoint. You need to take the help of standard checkpoint. Start
recording session > Insert > Checkpoint > Standard Checkpoint (OR press F12). Place
and click the hand pointer anywhere on your web page. Select Page (As shown in picture
below) and Click OK.




Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 37
VLearn Technologies
                              www.mysaptesting.com




You will get the following screen:




Check ―Broken Link‖ checkbox down below and click OK.

Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 38
VLearn Technologies
                              www.mysaptesting.com

Now, how will you verify page checkpoint and hence broken links?

Run the above script. Go To Test Results > Your Check Point. Check the status of all
links under ―Broken Links Result‖

If you want to verify links pointing only to the current host check the box titled “Broken
Links- check only links to current host” under Tools > Options > Web. Similarly if
you want to verify links pointing to other hosts as well, uncheck it.




// TO Count No of Links in Web Page

How to return the total number of links in a webpage and their names and URLs

Solution: Use ChildObjects to get the link collection, then retrieve the properties

        Use the ChildObjects method to retrieve all the links on the specified webpage.
Once you have the collection, you can use the GetROProperty method to retrieve the
innertext (name) and href (URL) values.

object.ChildObjects (pDescription)




Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 39
VLearn Technologies
                               www.mysaptesting.com

Example:
‗ The sample was created against www.google.com

Set oDesc = Description.Create()
oDesc(―html tag‖).Value = ―A‖
Set rc = Browser(―Google‖).Page(―Google‖).ChildObjects(oDesc)
num = rc.Count()
For i=0 to num-1
 tag = rc(i).GetROProperty(―innertext‖)
  href = rc(i).GetROProperty(―href‖)
 Reporter.ReportEvent 0, ―Links in Page‖, ―name: ― & tag & ―; url: ― & href
Next

// TO Count No of Links in Web Page

Simple Code To Check All Links
Set oDesc = Description.Create()
oDesc(―html tag‖).Value = ―A‖
Set rc = Browser(―title:=.*‖).Page(―title:=.*‖).ChildObjects(oDesc)
num = rc.Count()
For i=0 to num-1
            Set rc = Browser(―title:=.*‖).Page(―title:=.*‖).ChildObjects(oDesc)
      ref = rc(i).GetROProperty(―href‖)
      Browser(―title:=.*‖).Page(―title:=.*‖).link(―text:=.*‖,‖index:=―&i).click
      Browser(―title:=.*‖).sync
      title1=Browser(―title:=.*‖).getRoproperty(―title‖)
      MsgBox title1
      Browser(―title:=.*‖).navigate(ref)
‘Navigates to the url taken from ―href‖ property
      Browser(―title:=.*‖).sync
             title2=Browser(―title:=.*‖).getRoproperty(―title‖)
‘get the tile of the tNavigated page
             MsgBox title2
                    If title1=title2 Then
‘condition to check for the targetted page and Navigated page
           Reporter.ReportEvent 0, ―Navigated To Correct Page‖,‖―&title1
′Reports if correct
          else
           Reporter.ReportEvent 1,‖―&title1,‖―&title2
          End If
      Browser(―title:=.*‖).back
‘Navigates back to main page
      Browser(―title:=.*‖).sync
Next

Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 40
VLearn Technologies
                              www.mysaptesting.com

// Chaild Objects

Set desc = Description.Create()
Set col = Browser(―name:=Google‖).Page(―title:=Google‖).ChildObjects(desc)
ct = col.Count()
msgbox ct

Set desc2 = Description.Create()
desc2(―micclass‖).Value = ―WebElement‖
Set col2 = Browser(―name:=Google‖).Page(―title:=Google‖).ChildObjects(desc)
ct2 = col.Count()
msgbox ct2

Set desc3 = Description.Create()
desc3(―html tag‖).Value = ―INPUT‖
Set col3 = Browser(―name:=Google‖).Page(―title:=Google‖).ChildObjects(desc)
ct3 = col.Count()
msgbox ct3

// Get Each Radio in RadioGroup And Check

Set opt=Description.Create
opt(―html tag‖).value=―INPUT‖
opt(―type‖).value = ―radio‖
Dim allOptions,all
Set allOptions=Browser(―a‖).Page(―b‖).Frame(―c‖).ChildObjects(opt)
all=allOptions.count
MsgBox all for i= 0 to all
eName=allOptions(i).getROProperty(―name‖)
noofradio=allOptions(i).getElementsByName(eName).length
for j= 0 to noofradio-1
radioname=allOptions(i).object.document.getElementsByName(eName).item(j).GetAdju
centText(―afterend‖)allOptions(i).object.document.getElementsByName(eName).item(j).
checked=true
msgbox radioname
next
next

// Copy an excel sheet to another excel


Following is the code to copy the conntents of a sheet in one excel to another excel sheet

Set objExcel = CreateObject(―Excel.Application‖)
objExcel.Visible = True
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 41
VLearn Technologies
                               www.mysaptesting.com

Set objWorkbook1= objExcel.Workbooks.Open(―C:Documents and
Settingsmohan.kakarlaDesktop1.xls‖)
Set objWorkbook2= objExcel.Workbooks.Open(―C:Documents and
Settingsmohan.kakarlaDesktop2.xls‖)
objWorkbook1.Worksheets(―Sheet1″).UsedRange.Copy
objWorkbook2.Worksheets(―Sheet1″).Range(―A1″).PasteSpecial Paste =xlValues
objWorkbook1.save
objWorkbook2.save
objWorkbook1.close
objWorkbook2.close
set objExcel=nothing

//Compare 2 Excel sheets cell by cell

This code will open two excel sheet and compare each sheet cell by cell, if any changes
there in cells , it will highlight the cells in red color in the first sheet.

Set objExcel = CreateObject(―Excel.Application‖)
objExcel.Visible = True
Set objWorkbook1= objExcel.Workbooks.Open(―C:Documents
andSettingsmohan.kakarlaDesktopDocs1.xls‖)
Set objWorkbook2= objExcel.Workbooks.Open(―C:Documents and
Settingsmohan.kakarlaDesktopDocs2.xls‖)
Set objWorksheet1= objWorkbook1.Worksheets(1)
Set objWorksheet2= objWorkbook2.Worksheets(1)
  For Each cell In objWorksheet1.UsedRange
     If cell.Value <> objWorksheet2.Range(cell.Address).Value Then
        cell.Interior.ColorIndex = 3′Highlights in red color if any changes in cells
     Else
        cell.Interior.ColorIndex = 0
     End If
  Next
set objExcel=nothing

// Excel Sorting By Row:

Const xlAscending = 1
Const xlNo = 2
Const xlSortRows = 2
Set objExcel = CreateObject(―Excel.Application‖)
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Open(―C:Documents and
Settingsmohan.kakarlaDesktopDocs1.xls‖)
Set objWorksheet = objWorkbook.Worksheets(1)
objWorksheet.Cells(1,1).activate
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 42
VLearn Technologies
                              www.mysaptesting.com

Set objRange = objExcel.ActiveCell.EntireRow
objRange.Sort objRange, xlAscending, , , , , , xlNo, , , xlSortRows
set objExcel=nothing

Excel Sorting By Colum :


Const xlAscending = 1
′represents the sorting type 1 for Ascending 2 for Desc
Const xlYes = 1
Set objExcel = CreateObject(―Excel.Application‖)
‘Create the excel object
objExcel.Visible = True
‘Make excel visible
Set objWorkbook = _
objExcel.Workbooks.Open(―C:Documents and
Settingsmohan.kakarlaDesktopDocs1.xls‖)
‘Open the document
Set objWorksheet = objWorkbook.Worksheets(1)
‘select the sheet based on the index .. 1,2 ,3 …
Set objRange = objWorksheet.UsedRange
‘which select the range of the cells has some data other than blank
Set objRange2 = objExcel.Range(―A1″)
‘ select the column to sort
objRange.Sort objRange2, xlAscending, , , , , , xlYes
set objExcel=nothing

// DELETE ROWS FROM XL SHEET

 Public Function BIP_xlsDeleteRowRange (sSrcPath, sDestPath, sStartRow, sEndRow)
‗Create Excel object
Set oExcel = CreateObject(―Excel.Application‖)
‗Sets the application to raise no app alerts
‗In this case it will allow a file overwrite w/o raising a ‗yes/no‘ dialog
oExcel.DisplayAlerts = False
‗Open Book in Excel
Set oBook = oExcel.Workbooks.Open(sSrcPath)
‗Set Activesheet
Set oSheet = oExcel.Activesheet
‗Delete row range
oSheet.Rows(sStartRow +‖:‖+ sEndRow).Delete
‗Save new book to Excel file
oBook.SaveAs (sDestPath)
‗Close the xls file
oExcel.Workbooks.Close()
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 43
VLearn Technologies
                            www.mysaptesting.com

End Function

// DELETE COLUMNS FROM XL SHEET

Public Function BIP_xlsDeleteColumnRange (sSrcPath, sDestPath, sStartCol, sEndCol)
‗Create Excel object
Set oExcel = CreateObject(―Excel.Application‖)
‗Sets the application to raise no app alerts
‗In this case it will allow a file overwrite w/o raising a ‗yes/no‘ dialog
oExcel.DisplayAlerts = False‗Open Book in Excel
Set oBook = oExcel.Workbooks.Open(sSrcPath)
‗Set Activesheet
Set oSheet = oExcel.Activesheet
‗Delete row range
oSheet.Columns(sStartCol + ―:‖ + sEndCol).Delete
‗Save new book to Excel file
oBook.SaveAs (sDestPath)
‗Close the xls file
oExcel.Workbooks.Close()
End Function

// ADODB CONNECTION TO READ DATA FROM EXCEL SHEET

Function obj_UDF_getRecordset (strFileName, strSQLStatement)
Dim objAdCon, objAdRs
Set objAdCon = CreateObject(―ADODB.Connection‖)
objAdCon.Open ―DRIVER={Microsoft Excel Driver (*.xls)};DBQ=―&strFileName &
―;Readonly=True‖
If Err <> 0 Then
    Reporter.ReportEvent micFail,‖Create Connection‖, ―[Connection] Error has
occured. Error : ― & Err
    Set obj_UDF_getRecordset = Nothing
  Exit Function
End If
Set objAdRs = CreateObject(―ADODB.Recordset‖)
objAdRs.CursorLocation=3                  ‗ set the cursor to use adUseClient -
disconnected recordset
objAdRs.Open strSQLStatement, objAdCon, 1, 3
MsgBox objAdRs.fields(4).name
While objAdRs.EOF=false
  For i=0 to 4
 varConcat= varConcat&‖ ―& objAdRs.fields(i)
Next
Reporter.ReportEvent 0,‖Here is the Full Contents‖,‖―& varConcat
 varConcat=――
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 44
VLearn Technologies
                              www.mysaptesting.com

objAdRs.moveNext
Wend
If Err<>0 Then
    Reporter.ReportEvent micFail,‖Open Recordset‖, ―Error has occured.Error Code : ―
& Err
    Set obj_UDF_getRecordset = Nothing
    Exit Function
End If
Set objAdRs.ActiveConnection = Nothing
objAdCon.Close
Set objAdCon = Nothing
Set obj_UDF_getRecordset = objAdRs
End Function
Set rsAddin = obj_UDF_getRecordset(―C:Documents and
SettingsmohankDesktopLogin.xls‖, ―Select * from [Login$]‖)

//Use the CompareFiles function

The following function can be used to check and compare the content of the two files.

Note:
This function is not part of QuickTest Professional/Astra QuickTest. It is not guaranteed
to work and is not supported by Mercury Interactive Technical Support. You are
responsible for any and all modifications that may be required.CompareFiles (FilePath1,
FilePath2)

FilePath1 The path to the first file to compare

FilePath2 The path to the second file to compare

Public Function CompareFiles (FilePath1, FilePath2)
Dim FS, File1, File2
Set FS = CreateObject(―Scripting.FileSystemObject‖)
If FS.GetFile(FilePath1).Size <> FS.GetFile(FilePath2).Size Then
CompareFiles = True
Exit Function
End If
Set File1 = FS.GetFile(FilePath1).OpenAsTextStream(1, 0)
Set File2 = FS.GetFile(FilePath2).OpenAsTextStream(1, 0)
CompareFiles = False
Do While File1.AtEndOfStream = False
Str1 = File1.Read(1000)
Str2 = File2.Read(1000)
CompareFiles = StrComp(Str1, Str2, 0)

Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 45
VLearn Technologies
                               www.mysaptesting.com

If CompareFiles <> 0 Then
CompareFiles = True
Exit Do
End If
Loop
File1.Close()
File2.Close()
End Function
Return value:
The function returns 0 or False if the two files are identical, otherwise True.Example:
File1 = ―C:countriesapple1.jpg‖
File2 = ―C:countriesapple3.jpg‖
If CompareFiles(File1, File2) = False Then
MsgBox ―Files are identical.‖
Else
MsgBox ―Files are different.‖
End If

// GET NAMES OF ALL OPEN BROWSERS
Set browserDesc = Description.Create()
browserDesc(―application version‖).Value = ―internet explorer 6″
Set browserColl = DeskTop.ChildObjects(browserDesc)
browserCnt = browserColl.Count
MsgBox ―There are ―&browserCnt&‖ instances of a browser‖
For i = 0 To (browserCnt -1)
MsgBox ―Browser # ―&i&‖ has title = ―& browserColl(i).GetROProperty(―title‖)
Next ‗ i
Set browserColl = Nothing
Set browserDesc = Nothing
// How to run the scripts in 8.2 those are recorded in 9.0 or higher


Step 1: Delete the object repository of 9.0
Step 2: open a Blank test in 8.2
Step 3: Create the shared object repository in 8.2 that should contain all the objects in 9.0
and save.
Step 4: create the action structure in 8.2 should contain the same num of actions, same
names and structure as the script of 9.0.
Step 5: save the test. (From now we call this as 8.2 scripts)
Step 6: from 8.2 script copy Test.tsp file to the 9.0 script.
Step 7: copy all Resource.MTR file found in Action0, Action 1, etc to 9.0 scripts
Step 8: now u can run the scripts with little modifications if require

Automated Test Script Creation Process

Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 46
VLearn Technologies
                               www.mysaptesting.com

        Debugging and troubleshooting test scripts becomes extremely tedious when the
test script has hundreds of lines of code, verification points, branching logic, error
handling, parameters, and test correlation among various recorded business processes. A
more manageable approach to debugging complex and lengthy test scripts is to record
portions of the script and debug those portions individually before recording other parts
of the test script. After testing individual portions, you can determine how one portion of
the test script works with another portion and how data flows from one recorded process
to the other. After all sections for a test script have been recorded, you can playback the
entire test script and ensure that it properly plays back from the beginning to the end with
one or more sets of data.
        Always create a test plan that will assist in the creation of the regression test
script. A test script is only as good as the planning that takes place before it is written.
This saves time and organizes the process.
        Remember that all regression test scripts will be written to run in the QA
environment as well as the production environment. The automated regression test use
will be a part of the production test used to determine if a build truly does function as
expected in production.
To manage the creation and edit of our automated regression tests QA will create
automated tests in the following manner:
    1.             Record each individual process such as logging in and logging out. Save
             those recordings on your desktop.
    2.             Verify that the script will play back with no errors.
    3.             Continue recording and playing back throughout the test script creation
             process, verifying the script will play back with each step taken.
    4.             Add multiple sets of data driven tests for each individual portion of each
             test where that kind of test is applicable.
    5.             Verify the individual test scripts with multiple sets of data will play back
             with no errors.
    6.             Add various check points throughout the test.
    7.              Verify the individual test scripts with various check points will play
             back with no errors.
    8.             Now integrate all recorded processes into one large test script.
    9.             Verify the large test script will play back with no errors.
The key here is to ensure that each recorded process plays back successfully before
proceeding to record the remaining portions of the entire test script. Do not string the
individual tests together for playback without first verifying that all of the processes
could play back successfully as individual processes.
Lesson to be learned here is to never, EVER wait to debug a script until the entire test
script has been recorded.

Synchronization

Since QTP can play back recorded test scripts much faster than an end-user‘s manual
keystrokes all tests must be synchronized. Introduce artificial wait times in the test
scripts to make sure the script will run appropriately without errors unattended. Take into
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 47
VLearn Technologies
                               www.mysaptesting.com

account the fact that there will be times when the script will need to run slower than a
manual test due to network issues, etc. The goal here is we want to make sure the scripts
will run unattended through Test Director. Slowing down a script with wait times is not
very scientific and does not contribute to the creation of a robust automated test script
that plays back successfully without user intervention. That said, sync times will be
edited after the test script has been written in its entirety and has been tested to ensure it
runs with no errors.

Signed-off, Peer Reviewed

As part of the test readiness review criteria, test scripts will be formally accepted and
approved prior to starting the test cycle. QA, Business Analysts and Developers should
be involved in approving recorded test scripts. The QA Analyst writing the automated
test script should demonstrate that the test script successfully plays back in the QA
environment and, if possible, with various sets of data.

Recording, Playing Back Against Hidden Objects

Scripts might be recorded to populate or double click values for a field within a table grid
or an array where the location of this field is not fixed. If the field‘s location within a
table grid or array changes from the time it was recorded, the script might fail during play
back. Test scripts often fail during play back because the locations of objects that are not
displayed or visible within the screen have changed.
In order to play back scripts that are location sensitive or where the location is subject to
change, it might be necessary to enhance the script with functionality such as ‗scroll
down‘, ‗next page‘, or ‗find‘. Including such utilities ensures that hidden objects
requiring play back will be identified, and/or double clicked regardless of their location
within an array, table grid, or the displayed screen.

Create Automatic Notification for Critical Scripts

Test scripts should be enhanced with error handling programming logic that instantly
sends error messages to a tester‘s e-mail address when problems occur. Since some test
scripts are business critical and must run as batch jobs in the middle of the night we need
to know if something failed as soon as possible. The proper and successful execution of
these business critical test scripts can serve as a dependency or pre-condition for other
automated tasks. Always include logic in business critical test scripts that automatically
sends notification in the event of a failure.

Documentation

To make test scripts reusable and easier to maintain, please document all relevant
information for executing the test script, a test script header, and any special conditions
for execution of the test script. Example:


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 48
VLearn Technologies
                               www.mysaptesting.com

   1.                Adjust dates within the application in QA environment for running
             reports.
    2.             Update any fields that require unique data.
    3.             Display settings for context sensitive/analog/bitmap recording.
    4.             List other test scripts that are dependencies.
    5.              Specify necessary authorization levels or user roles for executing the
             script.
    6.               Conditions under which the script can fail and work around for re-
             launching the script.
    7.              Applications that need to be either opened or closed during the script
             execution.
    8.             Specific data formats, etc.
Scripts should contain a header with a description (example: what it is used for) and its
particular purpose (example: regression testing). The script header should also include
the script author and owner, creation and modification date, requirement identifiers that
the script traces back to, the product the script supports and the number of variables and
parameters of the script. Providing this information in the test script header facilitates the
execution, modification, and maintenance of the script for future testing efforts.
//Descriptive Programming to find number of unread messages in yahoo mail

SystemUtil.Run"iexplore","http://www.yahoomail.com"
Set g=Browser("name:=Yahoo.*").Page("title:=Yahoo.*")
g.WebEdit("name:=login").Set "xyz"
g.WebEdit("name:=passwd").Set "abc"
g.WebButton("name:=Sign In").Click
a=g.Link("name:=Inbox.*").getroproperty("innertext")
b=len(a)
If b=5 Then
Msgbox"u have zero unread messages"
else
c=mid(a,8,len(a)-1)
d=left(c,len(c)-1)
msgbox "number of unread messages=" &d
End If

I can not read the unread mails no using the descriptive program

SystemUtil.Run"iexplore","http://www.yahoomail.com"
Set g=Browser("name:=Yahoo.*").Page("title:=Yahoo.*")
g.WebEdit("name:=login").Set "xyz"
g.WebEdit("name:=passwd").Set "abc"
g.WebButton("name:=Sign In").Click
a=g.Link("name:=Inbox.*").getroproperty("innertext")
b=len(a)
If b=5 Then
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 49
VLearn Technologies
                               www.mysaptesting.com

Msgbox"u have zero unread messages"
else
c=mid(a,8,len(a)-1)
d=left(c,len(c)-1)
msgbox "number of unread messages=" &d
End If


the following error

Run Error Cannot identify the object "[ Link ]" (of class Link). Verify that this object's
properties match an object currently displayed in your application.
Line (7): "a=g.Link("name:=Inbox.*").getroproperty("innertext")".
Failed 6/12/2008 - 14:12:22

Am using the New Version of Y!mail hope your script was for Old/Classic version
pl do change the script accordingly


// Orkut Login

Set IE=CreateObject("Internetexplorer.Application")
IE.Visible= True
IE.Navigate "www.orkut.com"
Set a=browser("name:=orkut.*").page("title:=orkut.*")
a.webedit("name:=Email").set"abc"
a.webedit("name:=Passwd").set"123"
a.webbutton("name:=Sign in").Click
a.Link("name:=Logout").Click

// Yahoo Login

SystemUtil.Run"iexplore","http://www.yahoomail.com"
Set g=Browser("name:=Yahoo.*").Page("title:=Yahoo.*")
g.WebEdit("name:=login").Set "aaa"
g.WebEdit("name:=passwd").SetSecure "bbb"
g.WebButton("name:=Sign In").Click
g.Link("name:=Inbox.*",
"html id:=WelcomeInboxFolderLink").Click
g.Link("name:=Sign Out").Click

SystemUtil.Run"iexplore","http://www.yahoomail.com" statement opens yahoo login
page
aaa=username
bbb=password
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 50
VLearn Technologies
                                 www.mysaptesting.com




Over and above features provided with QTP 8.2, QTP 9.0 provides following features:
Object Repository Manager:

        You can use the Object Repository Manager to manage all of the shared object
repositories in your organization from one, central location. This includes adding and
defining objects, modifying objects and their descriptions, parameterize test object property
values, maintaining and organizing repositories, and importing and exporting repositories in
XML format.
You can open multiple object repositories at the same time. Each object repository opens in
its own resizable document window. This enables you to compare the content of the
repositories, to copy or move objects from one object repository to another, and so forth.

Object Repository Merge Tool:
        You can use the Object Repository Merge Tool to merge the objects from two shared
object repositories into a single shared object repository. You can also use the Object
Repository Merge Tool to merge objects from the local object repository of one or more
actions or components into a shared object repository.
When you merge objects from two source object repositories, the content is copied to a new,
target object repository, ensuring that the information in the source repositories remains
unchanged.
If any conflicts occur during the merge, for example, if two objects have the same name and
test object class, but different test object descriptions, the relevant objects are highlighted in
the source repositories, and the Resolution Options pane details the conflict and possible
resolutions.

Multiple Object Repositories per Action or Component:
        Quick Test provides several options for storing and accessing test objects. You can
store the test objects for each action or component in its corresponding local object
repository, which is unique for each action and component. You can also store test objects in
one or more shared object repositories that can be used in multiple actions and components.
Alternatively, you can use a combination of objects from the local object repository and one
or more shared object repositories. You choose the combination that matches your testing
needs.

XML Object Repository Format:


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 51
VLearn Technologies
                                www.mysaptesting.com
        Quick test now enables you to import and export object repositories from and to
XML format. This enables you to modify object repositories using the XML editor of your
choice and then import them back into Quick Test. You can import and export files either
from and to the file system or a Quality Center project (if Quick Test is connected to Quality
Center).

Functions Library Editor:

        Quick Test now has a built-in function library editor, which enables you to create and
edit function libraries containing VBScript functions, subroutines, modules, and so forth, and
then call their functions from your test or component.

Handling Missing Actions and Resources:
        Whenever a testing document (test, component, or application area) contains a
resource that cannot be found, Quick Test opens the Missing Resources pane and lists the
missing resource(s). For example, a test may contain an action or a call to an action that
cannot be found; a testing document may use a shared object repository that cannot be found;
or a testing document may use an object repository parameter that does not have a default
value. In all of these cases, Quick Test indicates this in the Missing Resources pane, enabling
you to map a missing resource to an existing one, or remove it from the testing document, as
required.

1) How to add a constant number in a data table?
This is more to do with MS excel then QTP!! But useful to know because at times it becomes
frustrating to the novices. Just append ' to the number
Ex: if you wish to enter 1234567 in data table then write it as '1234567

2) How can I check if a parameter exists in Data Table or not?
The best way would be to use the below code:
on error resume next
Val=DataTable ("ParamName", dtGlobalSheet)
 if err. number<> 0 then 'Parameter does not exist
else 'Parameter exists end if

3) How can I check if a checkpoint passes or not?
chk_PassFail = Browser (...).Page (...).WebEdit (...).Check (Checkpoint ("Check1"))
 if chk_PassFail then MsgBox "Check Point passed"
 else MsgBox "Check Point failed"
 end if

4) my test fails due to checkpoint failing, Can I validate a checkpoint without my test
failing due to checkpoint failure?
Reporter. Filter = rfDisableAll 'Disables all the reporting stuff
chk_PassFail = Browser (...).Page (...).WebEdit (...).Check (Checkpoint ("Check1"))
Reporter. Filter = rfEnableAll 'Enable all the reporting stuff
 if chk_PassFail then MsgBox "Check Point passed"
else MsgBox "Check Point failed" end if
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 52
VLearn Technologies
                               www.mysaptesting.com

5) What is the difference between an Action and a function?
        Action is a thing specific to QTP while functions are a generic thing which is a
feature of VB Scripting. Action can have an object repository associated with it while a
function can't. A function is just lines of code with some/none parameters and a single return
value while an action can have more than one output parameters.

6) Where to use function or action?
        Well answer depends on the scenario. If you want to use the OR feature then you
have to go for Action only. If the functionality is not about any automation script i.e. a
function like getting a string between to specific characters, now this is something not
specific to QTP and can be done on pure VB Script, so this should be done in a function and
not an action. Code specific to QTP can also be put into a function using DP. Decision of
using function/action depends on what any one would be comfortable using in a given
situation.

7) When to use a Recovery Scenario and when to us on error resume next?
        Recovery scenarios are used when you cannot predict at what step the error can occur
or when you know that error won't occur in your QTP script but could occur in the world
outside QTP, again the example would be "out of paper", as this error is caused by printer
device driver. "On error resume next" should be used when you know if an error is expected
and dont want to raise it, you may want to have different actions depending upon the error
that occurred. Use err.number & err.description to get more details about the error.

 8) How to use environment variable?
        A simple definition could be... it is a variable which can be used across the reusable
actions and is not limited to one reusable action. There are two types of environment
variables: 1. User-defined 2. Built-in
We can retrieve the value of any environment variable. But we can set the value of only user-
defined environment variables. To set the value of a user-defined environment variable:
Environment (Variable Name) = NewValue To retrieve the value of a loaded environment
variable: CurrValue = Environment (VariableName) Example The following example
creates a new internal user-defined variable named MyVariable with a value of 10, and then
retrieves the variable value and stores it in the MyValue variable. Environment. Value
("MyVariable") =10 MyValue=Environment.Value ("MyVariable")

9) How to rename a checkpoint (QTP 9.0)?
Example:
Window ("Notepad").WinEditor ("Edit").Check Checkpoint ("Edit") in the above example,
the user would like to change the name of the Checkpoint object from "Edit" to something
more meaningful.

Note: This functionality is new to QuickTest Professional 9.0.This is not available for
QTP 8.2 and below.
1. Right-click on the Checkpoint step in the Keyword View or on the Checkpoint object in
Expert View. 2. Select "Checkpoint Properties" from the pop-up menu. 3. In the Name field,


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 53
VLearn Technologies
                                 www.mysaptesting.com
enter the new checkpoint name. 4. Click. The name of the checkpoint object will be updated
within the script.
Example:         Window        ("Notepad").WinEditor          ("Edit").Check       Checkpoint
("NewCheckPointName") Note: You must use the QuickTest Professional user interface to
change the name of the checkpoint. If you manually change the name of the checkpoint in the
script, QuickTest Professional will generate an error during replay. The error message will be
similar to the following:
"The "" Checkpoint object was not found in the Object Repository. Check the Object
Repository to confirm that the object exists or to find the correct name for the object." The
Checkpoint object is not a visible object within the object repository, so if you manually
modify the name, you may need to recreate the checkpoint to resolve the error.




Include the Windows Media Player's executable in the NoBBTApps section of the
mic.ini file
1. Close QuickTest Professional. 2. Go to binmic.ini. 3. Include wmplayer.exe in the
NoBBTApps section of mic.ini file.
Example: [NoBBTApps] wmplayer.exe=rek
4. Save the mic.ini file and restart QuickTest Professional.

13) What is the lservrc file in QTP? The lservrc file contains the license codes that have
been installed
The lservrc file contains the license codes that have been installed. Whenever a new license is
created, the license code is automatically added to this file. The lservrc file is a text file, with
no extension.

File Location: 1) For a Concurrent (Floating) license installation:
"#server installation directory##language#"
Example: C:Program FilesXYZ TechnologiesABC ServerEnglishlservrc
2) For a Seat (Stand-alone) license installation:
#AQT/QTP installation directory#bin"
Example: C:Program FilesMercury InteractiveQuickTest ProfessionalBinlservrc

14) What to do if you are not able to run QTP from quality center?
This is for especially for newbie‘s with QTP. Check that you have selected Allow other
mercury products to run tests and components from Tools--> Options--> Run Tab.

Test objects are the objects in your test that represent the objects in your website or
application. Runtime objects are the objects in your application during the test run. The Test
object properties set is created and maintained by QuickTest. The Runtime object property
set is created and maintained by the object creator (Microsoft for Internet Explorer objects,
Netscape for Netscape objects, the product developer for ActiveX objects, etc.).

Descriptive Programming:

Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 54
VLearn Technologies
                                www.mysaptesting.com
Whenever QTP records any action on any object of an application, it adds some description
on how to recognize that object to a repository of objects called object repository. QTP
cannot take action on an object until unless its object description is in the Object Repository.
But descriptive programming provides a way to perform action on objects which are not in
Object repository.

When and Why to use Descriptive programming?

Below are some of the situations when Descriptive Programming can be considered useful:
1. The objects in the application are dynamic in nature and need special handling to identify
the object. The best example would be of clicking a link which changes according to the user
of the application, Ex. ―Logout <>‖.
2. When object repository is getting huge due to the no. of objects being added. If the size of
Object repository increases too much then it decreases the performance of QTP while
recognizing an object.
3. When you don‘t want to use object repository at all. Well the first question would be why
not Object repository? Consider the following scenario which would help understand why not
Object repository Scenario 1: Suppose we have a web application that has not been
developed yet.Now QTP for recording the script and adding the objects to repository needs
the application to be up, that would mean waiting for the application to be deployed before
we can start of with making QTP scripts. But if we know the descriptions of the objects that
will be created then we can still start off with the script writing for testing

Scenario 2: Suppose an application has 3 navigation buttons on each and every page. Let the
buttons be ―Cancel‖, ―Back‖ and ―Next‖. Now recording action on these buttons would add 3
objects per page in the repository. For a 10 page flow this would mean 30 objects which
could have been represented just by using 3 objects. So instead of adding these 30 objects to
the repository we can just write 3 descriptions for the object and use it on any page. 4.
Modification to a test case is needed but the Object repository for the same is Read only or in
shared mode i.e. changes may affect other scripts as well.
5. When you want to take action on similar type of object i.e. suppose we have 20 textboxes
on the page and there names are in the form txt_1, txt_2, txt_3 and so on. Now adding all 20
the Object repository would not be a good programming approach.

How to use Descriptive Programming?
There are two ways in which descriptive programming can be used 1. By creating properties
collection object for the description. 2. By giving the description in form of the string
arguments.

Arrays

        An array is a contiguous area in the memory referred to by a common name. It is a
series of variables having the same data type. Arrays are used to store related data values.
VBScript allows you to store a group of common values together in the same location. These
values can be accessed with their reference numbers.
An array is made up of two parts, the array name and the array subscript. The subscript
indicates the highest index value for the elements within the array. Each element of an array
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 55
VLearn Technologies
                               www.mysaptesting.com
has a unique identifying index number by which it can be referenced. VBScript creates zero
based arrays where the first element of the array has an index value of zero.

Declaring Arrays
An array must be declared before it can be used. Depending upon the accessibility, arrays are
of two types:
· Local Arrays
A local array is available only within the function or procedure, where it is declared.
· Global Arrays
A global array is an array that can be used by all functions and procedures. It is declared at
the beginning of the VBScript Code.

The Dim statement is used to declare arrays. The syntax for declaring an array is as follows:
Dim ArrayName(subscriptvalue)
Where, ArrayName is the unique name for the array and SubscriptValue is a numeric value
that indicates the number of elements in the array dimension within the array.




Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 56
VLearn Technologies
                                www.mysaptesting.com
Example:
Dim No_Passengers(3)
The No_Passengers can store 4 values.

Assigning values to the array
No_Passengers(0) = 1
No_Passengers(1) = 2
No_Passengers(2) = 3
No_Passengers(3) = 4

Static and Dynamic Arrays:
VBScript provides flexibility for declaring arrays as static or dynamic.
A static array has a specific number of elements. The size of a static array cannot be altered
at run time.
A dynamic array can be resized at any time. Dynamic arrays are useful when size of the array
cannot be determined. The array size can be changed at run time.
Next we will deal with user defined procedures, functions and subroutines.
I have seen an umpteen no of posts in every QTP group I visited asking about Test
Automation frameworks. Here I would like to collate the useful inputs i received from

How do we associate a library file with a test ?

   • Library files are files containing normal VBScript code. The file can contain
      function, sub procedure, classes etc…. You can also use executefilefunction to
      include a file at run-time also. To associate a library file with your script go to
      Test->Settings… and add your library file to resourcestab.

When to associate a library file with a test and when to use execute file?

   • When we associate a library file with the test, then all the functions within that library
       are available to all the actions present in the test. But when we use Executefile
       function to load a library file, then the function is available in the action that called
       executefile. By associated a library toa test we share variables across action (global
       variables basically), using association also makes it possible to execute code as soon
       as the script runs because while loading the script on startup QTP executes all the
       code on the global scope. We can use executefile in a library file associated with the
       test to load dynamic files and they will be available to all the actions in the
       test.

Test and Run-time Object What is the difference between Test Objects and Run
Time Objects ?

   • Test objects are basic and generic objects that QTP recognize. Run time object
      means the actual object to which a test object maps.

Can i change properties of a test object




Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 57
VLearn Technologies
                               www.mysaptesting.com
   • Yes. You can use SetTOProperty to change the test object properties. It is
      recommended that you switch off the Smart Identification for theobject on
      which you use SetTOProperty function.

Can i change properties of a run time object?

   • No (but Yes also). You can use GetROProperty(”outerText”) to get the
      outerText of a object but there is no function like SetROProperty tochange
      this property. But you can use WebElement().object.outerText=”Something”
      to change the property.

Action & Functions what is the difference between an Action and a function?

   • Action is a thing specific to QTP while functions are a generic thing which is a
      feature of VB Scripting. Action can have a object repositoryassociated with it
      while a function can’t. A function is just lines of code with some/none
      parameters and a single return value while an action canhave more than one
      output parameters.

Where to use function or action?
  • Well answer depends on the scenario. If you want to use the OR feature then you have
       to go for Action only. If the functionality is not about any automation script i.e. a
       function like getting a string between to specific characters, now this is something not
       specific to QTP and can be done onpure VB Script, so this should be done in a
       function and not an action. Code specific to QTP can also be put into an function
       using DP. Decision of using function/action depends on what any one would be
       comfortable using in a given situation.

Checkpoint & Output value
What is checkpoint?

   • Checkpoint is basically a point in the test which validates for truthfulness of a
      specific things in the AUT. There are different types ofcheckpoints depending
      on the type of data that needs to be tested in the AUT. It can be text,
      image/bitmap, attributes, XML etc….

What’s the difference between a checkpoint and output value?

   • Checkpoint only checks for the specific attribute of an object in AUT while
      Output value can output those attributes value to a column in datatable.

How can i check if a checkpoint passes or not?
chk_PassFail = Browser(…).Page(…).WebEdit(…).Check
(Checkpoint(”Check1″))
if chk_PassFail then
MsgBox “Check Point passed”
else
MsgBox “Check Point failed”
end if



Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 58
VLearn Technologies
                             www.mysaptesting.com
My test fails due to checkpoint failing, Can i validate a checkpoint without
my test failing due to checpoint failure?

Reporter.Filter = rfDisableAll „Disables all the reporting stuff
chk_PassFail = Browser(…).Page(…).WebEdit(…).Check
(Checkpoint(”Check1″))
Reporter.Filter = rfEnableAll „Enable all the reporting stuff
if chk_PassFail then
MsgBox “Check Point passed”
else
MsgBox “Check Point failed”
end if

Environment How can i import environment from a file on disk

   • Environment.LoadFromFile “C:Env.xml”

How can i check if a environment variable exist or not?

   • When we use Environment(‖Param1″).value then QTP expects the environment
      variable to be already defined. But when we useEnvironment.value(‖Param1″)
      then QTP will create a new internal environment variable if it does not exists
      already. So to be sure that variable existin the environment try using
      Environment(‖Param1″).value

1. How Does Run time data (Parameterization) is handled in QTP?
A) You can then enter test data into the Data Table, an integrated spreadsheet with
the full functionality of Excel, to manipulate data sets and create multiple test
iterations, without programming, to expand test case coverage. Data can be typed in
or imported from databases, spreadsheets, or text files.

2) What is keyword view and Expert view in QTP?
A) QuickTest’s Keyword Driven approach, test automation experts have full access to
the underlying test and object propertyes, via an integrated scripting and debugging
environment that is round-trip synchronized with the Keyword View. Advanced
testers can view and edit their tests in the Expert View, which reveals the underlying
industry-standard VBScript that QuickTest Professional automatically generates. Any
changes made in the Expert View are automatically synchronized with the Keyword
View.

3) Explain about the Test Fusion Report of QTP ?
A) Once a tester has run a test, a TestFusion report displays all aspects of the test
run: a high-level results overview, an expandable Tree View of the test specifying
exactly where application failures occurred, the test data used, application screen
shots for every step that highlight any discrepancies, and detailed explanations of
each checkpoint pass and failure. By combining TestFusion reports with QuickTest
Professional, you can share reports across an entire QA and development team.

4) To which environments does QTP supports ?



Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 59
VLearn Technologies
                              www.mysaptesting.com
QuickTest Professional supports functional testing of all enterprise environments,
including Windows, Web, ..NET, Java/J2EE, SAP, Siebel, Oracle, PeopleSoft, Visual
Basic, ActiveX, mainframe terminal emulators, and Web services.

11) In how many ways we can add check points to an application using QTP.
A) We can add checkpoints while recording the application or we can add after
recording is completed using Active screen (Note : To perform the second one The
Active screen must be enabled while recording).

12) How does QTP identifes the object in the application
A) QTP identifies the object in the application by LogicalName and Class.
For example: The Edit box is identified by Logical Name: PSOPTIONS_BSE_TIME20
Cass: WebEdit

13) If an application name is changes frequently i.e while recording it has
name “Window1” and then while running its “Windows2” in this case how
does QTP handles?
A) QTP handles those situations using “Regular Expressions”.

14) What is Parameterizing Tests?
A) When you test your application, you may want to check how it performs the same
operations with multiple sets of data. For example, suppose you want to check how
your application responds to ten separate sets of data. You could record ten separate
tests, each with its own set of data. Alternatively, you can create a parameterized
test that runs ten times: each time the test runs, it uses a different set of data.


Handling Run Errors in QTP

The Run Error message box displayed during a run session offers a number of buttons for
dealing with errors encountered:


      Stop—Stops the run session.
       The run results are displayed if QuickTest is configured to show run results after
       the run.
      Retry—QuickTest attempts to perform the step again.
       If the step succeeds, the run continues.
      Skip—QuickTest skips the step that caused the error, and continues the run from
       the next step.
      Debug—QuickTest suspends the run, enabling you to debug the component and
       any associated function library that contains a function called by the component.

       You can perform any of the debugging operations described in this section. After
       debugging, you can continue the run session from the step where the component
       or function library stopped, or you can use the step commands to control the
       remainder of the run session.


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 60
VLearn Technologies
                               www.mysaptesting.com

      Help—Opens the QuickTest troubleshooting Help for the displayed error
       message. After you review the Help topic, you can select another button in the
       error message box.
      Details—Expands the message box to display additional information about the
       error.

How to use Watch in QTP??

You can view the current value of any variable or VBScript object in your function
library by adding it to the Watch tab. As you continue stepping into the subsequent steps
in your function library, QuickTest automatically updates the Watch tab with the current
value for any object or variable whose value changes. You can also change the value of
the variable manually when the function library pauses at a breakpoint.

To add an expression to the Watch tab:

Perform one of the following:

      Click the expression and choose Debug > Add to Watch
      Click the expression and press CTRL+T
      Right-click the expression and choose Add to Watch from the context menu
      In the Watch tab, paste or type the name of the object or variable into the Name
       column and press ENTER to view the current value in the Value column

Note: You can add an expression to the Watch tab from a function library (and not from
a business component).

Tip: You can also use the Variables tab to view the current values for all variables up to
the current step in the function library.

Run Error: Test run failed

Q: Run Error: Test run failed

The run session cannot continue due to an unknown error. Check the step where the
failure occurred.

If your component failed while referring to an external file, such as an associated
function library, check that the files are accessible from your computer and that the files
are saved in the appropriate format.

If your component failed while performing a QuickTest step in a function, refer to the
QuickTest Object Model Reference for more information on appropriate usage of the
function in your statement.

Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 61
VLearn Technologies
                               www.mysaptesting.com

If your component failed while performing a standard VBScript step in a function, refer
to the Microsoft VBScript Reference.

Run Error: The object's item is not unique

Q: Why this error occurs??

More than one item in a list or tree item has the name specified in the method argument.

Specify the item using the item's index (for example, "#4"). Note that different test
objects and methods may use a different syntax for specifying an item's index.

Run Error: Cannot identify item

QuickTest cannot identify a list or tree item specified in a method argument.

Confirm that the specified item exists in the object.

      If the object does not exist, delete the step or modify the item on which you want
       to perform the step.
      If the item exists, its name may have changed. Modify the name as necessary or
       specify the item using the item's index (for example, "#4"). Note that different test
       objects and methods may use a different syntax for specifying an item's index.

Run Error: Parent not found
Each object in your component is identified relative to its parent objects.

If you received a Parent not found message, try one of the following solutions:

      Fix the object description of the problematic parent object using the suggestions
       below
           o If you find that an object in your component has one or more property
               values in its description that differs from the corresponding object
               property in your application, determine whether the problem is with an
               individual object in your application, or whether the same problems apply
               to all or many of the objects in your application with the same object class.
      Find all instances of the old hierarchy in the Expert View and replace it with the
       correct object hierarchy as described below

Re-recording an Object to Identify Parent Object Description
Problems
Follow the instructions below to identify a problem with a parent object.

Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 62
VLearn Technologies
                              www.mysaptesting.com

To identify a problem with a parent object by re-recording the child object:

   1. Open your browser or application to the page containing the object that caused the
      error.
   2. Select the last step in the component in the Keyword View or place the cursor
      below the last statement in the Expert View.
   3. Click the Record button or choose Automation > Record.
   4. Click or perform another operation on the object.
   5. Click the Stop button or choose Automation > Stop.
   6. Right-click the new step and select Object Properties.
   7. In the Object Properties dialog box, click Repository. The Object Repository
      opens with the new object selected. Note the parent hierarchy of the new object.
   8. Find the old (problematic) object in the Object Repository and compare the parent
      hierarchy of the old object with that of the new object.

       Check to see whether the differences are due to one or more parent objects with
       different descriptions, or whether the actual objects in the parent hierarchy are
       different.

           o   If you find a problem with a parent description, try to fix it using the
               suggestions for Solving Object Description Problems.
           o   If the problem stems from a different set of parent objects in the hierarchy,
               find all instances of the old hierarchy and replace it with the new object
               hierarchy as described in the example below.

Example:

Suppose that on a Web site with frames, you recorded a step on an Image object named
Poster. In the Object Repository window, you can see that Image object's hierarchy is
similar to the following (the object class is listed in parentheses for this example):

MyCompany (Browser)
MyCompany (Page)
Main (Frame)
Poster (Image)

When you later run the component, the Web page looks the same, but you receive a
Cannot Identify Object error for the Poster image. When you re-record the step and view
the Image object in the Object Repository window, the hierarchy might look like this:

MyCompany (Browser)
MyCompany (Page)
Poster (Image)



Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 63
VLearn Technologies
                              www.mysaptesting.com

Now you can see that the frames have been removed from the Web page, so even though
the Poster image still has the same object description, its parent hierarchy is different.

In the object repository, you can see that there are actually two different poster objects:
the old one under the obsolete Frame object, and the new one directly under the
MyCompany page.

To fix the problem, you can replace the object in the step by clicking Select another
object and choosing the required object from the correct location in the hierarchy (tree).

To keep your Object Repository well-organized, you should also delete the obsolete
objects from the Object Repository by right-clicking the obsolete object and selecting
Delete.

Using Microsoft Outlook to Send Email

The code below illustrates two methods for sending email using the VBScript code in
QuickTest Professional, and two different COM objects.

' Example 1

Function SendMail(SendTo, Subject, Body, Attachment)
    Set ol=CreateObject("Outlook.Application")
    Set Mail=ol.CreateItem(0)
    Mail.to=SendTo
    Mail.Subject=Subject
    Mail.Body=Body
   If (Attachment <> "") Then
        Mail.Attachments.Add(Attachment)
    End If
    Mail.Send
    ol.Quit
    Set Mail = Nothing
    Set ol = Nothing
End Function

' Example 2

Function SendMail(SendFrom, SendTo, Subject, Body)
   Set objMail=CreateObject("CDONTS.Newmail")
   ObjMail.From = SendFrom
   ObjMail.To = SendTo
   ObjMail.Subject = Subject
   ObjMail.Body = Body
   ObjMail.Send
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 64
VLearn Technologies
                             www.mysaptesting.com

    Set objMail = Nothing
End Function

// To Close all Browsers Except One Gmail

Set oBrowser = Description.Create
oBrowser("micclass").Value = "Browser"
Set oPage = Description.Create
oPage("micclass").Value = "Page"
'Get all browsers
Set allBrowser = Desktop.ChildObjects(oBrowser)
Dim i, iCount
iCount = allBrowser.Count
Msgbox iCount

For i = 0 To iCount-1
        'Get the page object from the browser
        'Set oPg = allBrowser(i).ChildObjects(oPage)
        'Get the URL of the

       Msgbox allBrowser(i).GetRoProperty("title")

If InStr(1,allBrowser(i).GetRoProperty("title"),"Gmail", vbTextCompare) = 0 Then
               'Close the browser
               allBrowser(i).Close
        End If

Next

// To Close all Browsers Except One Gmail

Set oBrowser = Description.Create
oBrowser("micclass").Value = "Browser"
Set oPage = Description.Create
oPage("micclass").Value = "Page"
'Get all browsers
Set allBrowser = Desktop.ChildObjects(oBrowser)
Dim i, iCount
iCount = allBrowser.Count
Msgbox iCount

For i = 0 To iCount-1
        'Get the page object from the browser
        'Set oPg = allBrowser(i).ChildObjects(oPage)
        'Get the URL of the
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 65
VLearn Technologies
                              www.mysaptesting.com

       Msgbox allBrowser(i).GetRoProperty("title")

If InStr(allBrowser(i).GetRoProperty("title"),"Gmail") = 0 Then
               'Close the browser
               allBrowser(i).Close
        End If

Next


// To Close all Browsers except Quality Center

'Create a description for browser
Set oBrowser = Description.Create
oBrowser("micclass").Value = "Browser"
Set oPage = Description.Create
oPage("micclass").Value = "Page"
'Get all browsers
Set allBrowser = Desktop.ChildObjects(oBrowser)
Dim i, iCount
iCount = allBrowser.Count - 1
For i = 0 To iCount
           'Get the page object from the browser
           Set oPg = allBrowser(i).ChildObjects(oPage)(0)
           'Get the URL of the
           If InStr(oPg.GetROProperty("title"), "Quality Center", vbTextCompare) = 0
Then
                     'Close the browser
                     allBrowser(i).Close
           End If
Next
By now you must be wondering about the line
'Get the page object from the browser
Set oPg = allBrowser(i).ChildObjects(oPage)(0)

// script to check all checkboxes in a webpage.

Set a=Description.Create
a("html tag").value="input"
a("type").value="checkbox"

Set b=Browser("name:=").Page("title:=").childobjects(a)
c=b.count
msgbox c
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 66
VLearn Technologies
                             www.mysaptesting.com

For i=0 to c-1
b(i).set "on"
Next

// To Close all Browsers

Call Closebrowser()

Function Closebrowser
While Browser("CreationTime:=.*").Exist
Browser("CreationTime:=.*").Close
Wend
End Function


//To Close QTP after execution

Private Function CloseQTP
Set objWMIService = GetObject("winmgmts:.rootCIMV2")
Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where
Name = 'QTPro.exe'")
For Each objProcess in colProcess
objProcess.Terminate()
Next
Set objWMIService = Nothing
Set colProcess = Nothing
End Function

Call CloseQTP

//

Set Desc= description.Create()

desc("micclass").value ="WebCheckBox"

Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc)

s=data.count()

msgbox "Buttons" & VBNewLine &s

For i = 0 to s - 1


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 67
VLearn Technologies
                             www.mysaptesting.com

        msgbox data(i).getroproperty("name")

Next

//

Set Desc= description.Create()

desc("micclass").value ="WebEdit"

Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc)

s=data.count()

msgbox "Buttons" & VBNewLine &s

For i = 0 to s - 1

        msgbox data(i).getroproperty("name")

Next



//

Set Desc= description.Create()

desc("micclass").value ="WebRadioButton"

Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc)

s=data.count()

msgbox "Buttons" & VBNewLine &s

For i = 0 to s - 1

        msgbox data(i).getroproperty("name")

Next

//

Set Desc= description.Create()
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 68
VLearn Technologies
                             www.mysaptesting.com

desc("micclass").value ="WebButton"

Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc)

s=data.count()

msgbox "Buttons" & VBNewLine &s

For i = 0 to s - 1

        msgbox data(i).getroproperty("name")

Next


//


Dim vcol_Handles, vCtr, vHwnd, Flag, vLastHWnd

vCtr = 0
Flag = 1

Set vcol_Handles = CreateObject("Scripting.Dictionary")
While (Window("regexpwndclass:=IEFrame","index:=" & vCtr).Exist )
wait 1
vHwnd = Window("regexpwndclass:=IEFrame","index:=" &
vCtr).getroproperty("Hwnd")
If (vLastHWnd=vHwnd) Then
Flag = 0
Else
vcol_Handles.Add CStr(vcol_Handles.Count),vHwnd
vCtr = vCtr+1
End If
vLastHWnd = vHwnd
msgbox vLastHWnd
Wend
msgbox vCtr
For vCtr = vcol_Handles.Count-1 to 0 step-1
Wait 1
vHwnd = vcol_Handles.Item(CStr(vCtr))
vBrowser = Window("regexpwndclass:=IEFrame","index:=" &
vCtr).getroproperty("text")
If Instr(vBrowser, "Mercury") then
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 69
VLearn Technologies
                             www.mysaptesting.com

Reporter.ReportEvent 2, "Not closed " & vBrowser, "The browser '" & vBrowser & "'
was not closed"


Else
Reporter.ReportEvent 2, "Closed " & vBrowser, "The browser '" & vBrowser & "' was
closed"
Window("hwnd:=" & vHwnd).Close
End If
Next



In above code use SystemUtil.CloseProcessByHwnd (vHwnd)
instead of Window("hwnd:=" & vHwnd).Close, because .Close won't work if you have
popups.

Also replace the following lines:
vBrowser = Window("regexpwndclass:=IEFrame","index:=" &
vCtr).getroproperty("text")
If Instr(vBrowser, "Mercury") then

vBrowser = Window("regexpwndclass:=IEFrame","hwnd:="&
vHwnd).getroproperty("text")
If Instr(vBrowser, "Mercury Quality")<>0 OR Instr(vBrowser, "TestDirector")<>0 then

You can also give a try with this code:

do while("True")
TrueOrFalse = Browser("opnedbytestingtool:=True").Exist
if(TrueOrFalse = "False") then
exit do
else
Browser("opnedbytestingtool:=True").close
end if
loop



This works:
Do while("True")
TrueOrFlase = Browser("index:=0").Exist
if(TrueOrFlase = "False") then
exit do
else
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 70
VLearn Technologies
                               www.mysaptesting.com

'if Browser("index:=0").Window("regexpwndclass:=Internet
Explorer_TridentDlgFrame").exist(5) then
' Browser("index:=0").Window("regexpwndclass:=Internet
Explorer_TridentDlgFrame").close
' TIM - I changed the .exist period from 5 to 1 to, hopefully, speed up this process.
if Browser("index:=0").Dialog("nativeclass:=#32770").exist(1) then
Browser("index:=0").Dialog("nativeclass:=#32770").close
end if
Browser("index:=0").close
end if
loop

The above code will close all the browser that are opened.

Here instead of creation time other ordinal identifier can also be used.

Dim windows2Close
'Initialize with negative upper bound
ReDim windows2Close( -1)
'Create the shell application object
Set shlApp = CreateObject("Shell.Application")
'Get all open windows collection
Set allWins = shlApp.Windows
'Loop through each window and close if IE
For Each window In allWins
           'Close all IE windows but ignore Quality Center
           If InStr(window.fullName, "iexplore.exe") And InStr(Window.LocationURL,
"/qcbin/") = 0 Then
                      'Increase the array size by 1
                      ReDim Preserve windows2Close(UBound(windows2Close) + 1)
                      Set windows2Close(UBound(windows2Close)) = Window
           End If
Next
'Loop through all array elements and close each window
For Each Window In windows2Close
           Window.Quit
Next

'Create the shell application object

Set shlApp = CreateObject("Shell.Application")
'Get all open windows collection
Set allWins = shlApp.Windows
'Loop through each window and close if IE
For Each window In allWins
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 71
VLearn Technologies
                               www.mysaptesting.com

         If InStr(window.fullName, "iexplore.exe") Then
                   'Close the IE window
                   window.Quit
         End If
Next




'Launch a notepad window
SystemUtil.Run "notepad.exe"

'Close the window just launched using the exact title
SystemUtil.CloseProcessByWndTitle "Untitled - Notepad"

'Launch a notepad window
SystemUtil.Run "notepad.exe"

'Close the window just launched using a pattern string
SystemUtil.CloseProcessByWndTitle ".*Notepad", True

SystemUtil.CloseDescendentProcesses

CloseDescendentProcesses can be used to close any process launched by QTP. The code
below illustrates the usage

'Launch explorer
SystemUtil.Run "iexplore.exe"

'Launch excel using COM
Set oXL = CreateObject("Excel.Application")
oXL.Visible = True

'Close processes launched by QTP. This will close
'the internet explorer and Excel as well
SystemUtil.CloseDescendentProcesses

'Close all internet explorer windows
closedCount = SystemUtil.CloseProcessByName("iexplore.exe")

'Display # of closed windows
MsgBox closedCount


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 72
VLearn Technologies
                            www.mysaptesting.com

'Run internet explorer
SystemUtil.Run "iexplore.exe"

'Run internet explorer and open knowledgeinbox.com
SystemUtil.Run "iexplore.exe", "http://www.knowledgeinbox.com"

'Run a IE Process in Maximized window
Const SHOW_MAXIMIZED = 3 'Activates the window and displays it as a maximized
window.
SystemUtil.Run "iexplore.exe", "http://www.knowledgeinbox.com", , ,
SHOW_MAXIMIZED

1. Getting Number from String

Function extract_number(msg)
 Dim re, matches, item, result
 Set re = New RegExp
 re.pattern = "[A-Za-z -.]*(d+).*"
 Set matches = re.Execute(msg)
 If matches.Count > 0 Then
   Set item = matches(0)
   If item.SubMatches.Count > 0 Then
     result = item.SubMatches(0)
   Else
     result = -1
   End If
 Else
       result = -1
 End If
 extract_number = result
End Function

MsgBox extract_number("This user belongs to 10 groups")
MsgBox extract_number("206 features assigned to the user.")

2. Close All the opened Browsers Except QC opened browser

On Error Resume Next
Dim intWndCnt
Dim oDesc, oWnd
'Create Object description
Set oDesc = Description.Create '
Set oWnd = Desktop.ChildObjects(oDesc)
intWndCnt = oWnd.Count
For i = 0 to intWndCnt - 1
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 73
VLearn Technologies
                              www.mysaptesting.com

Set TmpObj = oWnd.item(i)
strTmpTitle = oWnd.item(i).GetROProperty("Text")
If instr(1,strTmpTitle, "Microsoft Internet Explorer",1) > 0 Then
  If instr(1,strTmpTitle, "Mercury Quality Center",1) > 0 Then
     'msgbox "Title :" & oWnd.item(i).GetROProperty("Text")
  Else
     'msgbox "Close :" & oWnd.item(i).GetROProperty("Text")
     oWnd.item(i).close
  End if
End If
Next
'Clean up
Set oDesc = nothing
Set oWnd = nothing
3. Close all opened Excel files

Public Function fn_close_all_excel_files()
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & strComputer & "rootcimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where
Name = 'EXCEL.EXE'")
For Each objProcess in colProcessList
  objProcess.Terminate()
Next
End Function

4. Excel sheet column count

Public Function dtGetColCount (sSheetName)
 On Error Resume Next
 Do
 i=i+1
 sColName = DataTable.GetSheet(sSheetName).GetParameter(i).Name
 Loop While 0 = Err.Number
 'GetParameter throws an error when using an index that is out of bounds ...
 'We can use this functionality to ASSUME that it's an unused column.
 'We've come to the end of our USED columns
 dtGetColCount = i - 1
 On Error GoTo 0
End Function

5. Count Number of files in any Folder

iFileCount = 0
Set objFileSysOb = CreateObject("Scripting.FileSystemObject")
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 74
VLearn Technologies
                             www.mysaptesting.com

Set colFolderName = objFileSysOb.GetFolder("C:Automation") ' Folder Path
Set vFiles =colFolderName.Files
For each vFileItem in vFiles
  print vFileItem
  iFileCount = iFileCount + 1
Next
print iFileCount

6. Create Dynamic Array

For i = 0 to 20
 Redim Preserve arrFileLines(i)
 arrFileLines(i) = "test" & i
Next

7. Close Dialog box

Function DialogClose (obj)
If obj.Dialog("nativeclass:=#32770").Exist(0) Then
  obj.Dialog("nativeclass:=#32770").WinButton("nativeclass:=Button","index:=0").Click
End If
RegisterUserFunc "Browser", "DialogClose", "DialogClose"
End Function

8. Create Dynamic Value

iDynamicValue = now
iDynamicValue = replace(iDynamicValue,"/","")
iDynamicValue = replace(iDynamicValue,":","")
iDynamicValue = replace(iDynamicValue," ","")
iDynamicValue = replace(iDynamicValue,"PM","")
iDynamicValue = replace(iDynamicValue,"AM","")
msgbox iDynamicValue

9. Get QTP file path

Set qtApp = CreateObject("QuickTest.Application") ' Create the Application
objectqtpApp.Test.Location
TestLoc = qtApp.Test.Location
MsgBox TestLoc

10. IS QC Connected?

Set qtApp = CreateObject("QuickTest.Application")
If qtApp.TDConnection.IsConnected Then
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 75
VLearn Technologies
                             www.mysaptesting.com

  msgbox "QC"
Else
  msgbox "Local"
End If

(or)

if QCUtil.IsConnected then
  Reporter.ReportEvent 0, "Connected", "Connected to server: " +
QCUtil.QCConnection.ServerName + chr (13) +"Project: " +
  QCUtil.QCConnection.ProjectName + chr (13) + "Domain: " +
QCUtil.QCConnection.DomainName
else
  Reporter.ReportEvent 1, "Not connected", "Not connected to Quality Center"
end if

11. Keyboard Key Press through QTP Script

'Create Shell Object
Set WshShell = CreateObject("WScript.Shell")
'Send any Functinal Keys
' ALT = %
' F4 = {F4}
WshShell.SendKeys "%{F4}"
' Set shell object to Null
Set WshShell=nothing




1. BEEP from QTP

' Three methods of issuing a BEEP from QTP

' Method 1
Extern.Declare micLong,"MessageBeep","User32","MessageBeep",micLong
retVal = Extern.MessageBeep(&HFFFFFFFF)
MsgBox retVal 'The return value should be 1.

' Method 2
Err.Number = 0
On Error Resume Next
Extern.Declare micLong,"MessageBeep","User32","MessageBeep",micLong
Extern.MessageBeep(&HFFFFFFFF)
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 76
VLearn Technologies
                             www.mysaptesting.com

If (Err.Number <> 0) Then
MsgBox Err.Description
End If

' Method 3
Extern.Declare micLong,"Beep","Kernel32","Beep",micLong,micLong
retVal = Extern.Beep(1000,250) 'The first number is frequency the second is duration.

MsgBox extract_number("This user belongs to 10 groups")
MsgBox extract_number("206 features assigned to the user.")

2. Check for Required URL

startURL = "www.google.com" ' Amend this to your required URL

' If no browser open, open browser and navigate to required URL
If Not Browser("CreationTime:=0").Exist Then
   Call launch(startURL)
Else

' Get the URL of the current open browser
currentURL=Browser("CreationTime:=0").GetROProperty("OpenURL")
' If not correct URL navigate to required URL
If Not currentURL = "www.google.com" Then
   Call launch(startURL)
End If
End If

Function launch(startURL)
' Create IE object and navigate
' to required URL
set IE = CreateObject("InternetExplorer.Application")
IE.Visible = true
IE.Navigate startURL
End function

3. Close QTP with QTP script

Private Function CloseQTP
 Set objWMIService = GetObject("winmgmts:.rootCIMV2")
 Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where
Name = 'QTPro.exe'")
 For Each objProcess in colProcess
  objProcess.Terminate()
 Next
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 77
VLearn Technologies
                              www.mysaptesting.com

 Set objWMIService = Nothing
 Set colProcess = Nothing
End Function

4. Open any Appllication through QTP

 ' Function OpenApp
 ' ------------------
 ' Open a specified application
 ' Parameter: application - the application full name (including location)
 '@Description Opens an application
 '@Documentation Open the application.

 Function OpenApp (application)
  systemUtil.Run application
 End Function

5. Adding any information to QTP Results

 ' AddToTestResults
 ' --------------
 ' Add a Report.Event step to the Test Results
 'Parameters:
 ' status - Step status (micPass, micFail, micDone or micWarning)
 ' StepName - Name of the intended step in the report (object name)
 ' details - Description of the report event '
 '@Description Reports an event to the Test Results
 '@Documentation Report an event to the Test Results.

 Public Function AddToTestResults (status, StepName, details)
   Reporter.ReportEvent status, StepName, details
 End Function

6. Enable Doubleclick Event in QTP

Enable the ondblclick event in the Web Event Recording Configuration

To enable special event handling, use the Web Event Recording Configuration utility.
1. Go to Tools -> Web Event Recording Configuration.
2. Click .
3. Expand the Standard Objects branch.
4. Select the object you want to configure.
5. Go to Event -> Add -> ondblclick. The event will be added to the list on the right.
6. Select "If Handler" in the Listen column.
7. Select "Enabled" in the Record column.
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 78
VLearn Technologies
                                 www.mysaptesting.com

8. Click to close the dialogs.

7. DSN - Less Connection

Public sconn
uid = "UID"
pwd = "PWD"
ServerName = "Server Name"

Connection()

Function Connection()
Set sconn = CreateObject("ADODB.connection")
sconn.Open "Driver=Microsoft ODBC for Oracle;Server="& ServerName &";Uid="&
uid &";Pwd="& pwd &""
End Function

8. High-Level Automation Framework Information

At a very high level the framework components can be divided into two categories
software part and documentation part. Here is my list of components ? you can add your
item if anything is missing.

---------------------------------------------
All software code part
---------------------------------------------
Supporting libraries for Logging, error handling, Execution management
1. Tool specific code
2. Setup and configuration scripts
3. Test management code
4. Test data and Test data management code
5. Platform/OS specific scripts

---------------------------------------------
Non software part
---------------------------------------------
Folder structure
Documents
i. Coding guidelines
ii. Procedure for creating scripts
iii. Planning, design and review procedures
iv. Approach for automation
v. Approach for Testing automation code
vi. Automation documentation - how scripts work
vii. Setup and implementation procedures
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 79
VLearn Technologies
                               www.mysaptesting.com

viii. Defect tracking procedure for Automation scripts
ix. Source control procedures
x. Project plan
xi. Templates for effort estimation
xii. Template for test case categorization
xiii. Template for ROI calculation

9. Get Input Parameter Data and Use in Script

Set qtApp = CreateObject("QuickTest.Application") ' Create the Application object
Set pDefColl = qtApp.Test.ParameterDefinitions
Set pDef = pDefColl.Item(1)
MsgBox pDef.DefaultValue

10. Pass Test Data from MQC to QTP?

1) Create Test parameters in QTP (via file>Settings>Parameters) [These are the
parameters that you see in QC, on the automated tab of the Configuration page in the Test
Instance Propertirs.]

2) Create action parameters (Action Properties> Parameters)

3)Link action & test parameters together. To do this, go into Action Call
Properties>Parameters. You'll see your action parameters here. Click in the Value column
for a parameter and press the Configure Value button. This will open up the Value
Configuration Options dialogue. In the parameter drop down list, select Test/action
parameter and then, from the following Test parameters; Parameter drop down list, select
the Test parameter that you want to link to your Action parameter.

This should then link the Test parameters to the Action parameters.

Then in your script, you'll use the parameters as follows: -

Browser("Browser_Name").Page("Page_Name").WebEdit("Edit_Name").Set
Parameter("Parameter_Name")

11. Get the Attachement from QC to local machine

To get attachment from test

Public Function GetTestAttachmentPath(TDAttachmentName) 'Returns File Path
'Test Director TDAPIOLELib object variables
Dim otaAttachmentFactory 'As TDAPIOLELib.AttachmentFactory
Dim otaAttachment 'As TDAPIOLELib.Attachment
Dim otaAttachmentList 'As TDAPIOLELib.List
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 80
VLearn Technologies
                             www.mysaptesting.com

Dim otaAttachmentFilter 'As TDAPIOLELib.TDFilter
Dim otaExtendedStorage 'As TDAPIOLELib.ExtendedStorage
Dim strPath 'As String

Set otaAttachmentFactory = QCUtil.CurrentTest.Attachments
Set otaAttachmentFilter = otaAttachmentFactory.Filter
otaAttachmentFilter.Filter("CR_REFERENCE") = "'TEST_" & QCUtil.CurrentTest.Id &
"_" & TDAttachmentName & "'"
Set otaAttachmentList = otaAttachmentFilter.NewList
If otaAttachmentList.Count = 1 Then
Set otaAttachment = otaAttachmentList.Item(1)
otaAttachment.Load True, ""
strPath = otaAttachment.FileName
ElseIf otaAttachmentList.Count > 1 Then
Reporter.ReportEvent micFail, "Failure in library function 'GetTestAttachmentPath'", _
"Found more than one attachment '" & TDAttachmentName & "' in test '" & _
QCUtil.CurrentTest.Name & "'."
strPath = ""
ElseIf otaAttachmentList.Count < 1 Then
Reporter.ReportEvent micFail, "Failure in library function 'GetTestAttachmentPath'", _
"Found 0 attachments '" & TDAttachmentName & "' in test '" & _
QCUtil.CurrentTest.Name & "'."
strPath = ""
End If

GetTestAttachmentPath = strPath
Set otaAttachmentFactory = Nothing
Set otaAttachment = Nothing
Set otaAttachmentList = Nothing
Set otaAttachmentFilter = Nothing

End Function

To get attachment from folder

Public Function GetFolderAttachmentPath(TDAttachmentName, TDFolderPath) 'Returns
File Path

'Test Director TDAPIOLELib object variables
Dim otaAttachmentFactory 'As TDAPIOLELib.AttachmentFactory
Dim otaAttachment 'As TDAPIOLELib.Attachment
Dim otaAttachmentList 'As TDAPIOLELib.List
Dim otaAttachmentFilter 'As TDAPIOLELib.TDFilter
Dim otaTreeManager 'As TDAPIOLELib.TreeManager
Dim otaSysTreeNode 'As TDAPIOLELib.SysTreeNode
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 81
VLearn Technologies
                             www.mysaptesting.com

Dim otaExtendedStorage 'As TDAPIOLELib.TreeManager
Dim intNdId
Dim strPath 'As String
Set otaTreeManager = QCUtil.TDConnection.TreeManager
Set otaSysTreeNode = otaTreeManager.NodeByPath(TDFolderPath)
Set otaAttachmentFactory = otaSysTreeNode.Attachments
Set otaAttachmentFilter = otaAttachmentFactory.Filter
intNdId = otaSysTreeNode.NodeID
otaAttachmentFilter.Filter("CR_REFERENCE") = "'ALL_LISTS_" & intNdId & "_" &
TDAttachmentName & "'"
Set otaAttachmentList = otaAttachmentFilter.NewList
If otaAttachmentList.Count > 0 Then
Set otaAttachment = otaAttachmentList.Item(1)
otaAttachment.Load True, ""
strPath = otaAttachment.FileName
Else
Reporter.ReportEvent micFail,"Failure in library function 'GetFolderAttachmentPath'", _
"Failed to find attachment '" & TDAttachmentName & "' in folder '" & TDFolderPath &
"'."
End If
GetFolderAttachmentPath = strPath
Set otaAttachmentFactory = Nothing

Set otaAttachment = Nothing
Set otaAttachmentList = Nothing
Set otaAttachmentFilter = Nothing
Set otaTreeManager = Nothing
Set otaSysTreeNode = Nothing

End Function


1. Can I change the Active Screen which is shown on every new test?

You can change the Active Screen to any valid HTML page. The page can be located
either locally or on the network.

For example, if you want your entire organization to view the same Active Screen when
opening QuickTest Professional, open the NewTest.inf file located in QuickTest
ProfessionaldatSnapShots folder and add the following line:

FileName1= "any full path to an HTML file"

For example:
FileName1=mercurypublicMainPage.html
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 82
VLearn Technologies
                              www.mysaptesting.com


2. How do I create an action template?

If you want to include one or more statements in every new action in your test, you can
create an action template. For example, if you always enter your name as the author of an
action, you can add this comment line to your action template. An action template applies
only to actions created on your computer.

To create an action template, create a text file containing the comments, function calls,
and other statements that you want to include in your action template. The text file must
be in the structure and format used in the Expert View.

Save the text file as ActionTemplate.mst in your QuickTest Professionaldat folder. All
new actions you create contain the script lines from the action template.

3. How can I configure the report to show only errors by default?

You can configure the report to show only errors by default by adding the following
section to the QTReport.ini file in your QuickTest Professionalbin folder.

[FilterDialog]

ReportAppDefaultFilter=1 # for error only

ReportAppDefaultFilter=3 # shows all messages (default)

4. How do I use environment variables?

QuickTest supports using environment variables. Environment variables can be either
system variables or user-defined variables.

You can define the user-defined variables in an external file QuickTest reads when it is
launched.

5. I have a Microsoft Access database that contains data I would like to use in my
test. How do I do this?

The Expert View enables you to access databases using ADO and ODBC. Below is a
sample test that searches for books written by an author in the "Authors" table of the
database.

Dim MyDB
Dim MyEng
Set MyEng = CreateObject("DAO.DBEngine.35")
Dim Td
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 83
VLearn Technologies
                              www.mysaptesting.com

Dim rs
' Specify the database to use.
Set MyDB = MyEng.OpenDatabase("BIBLIO.MDB")
' Read and use the name of the first 10 authors.
Set Td = MyDB.TableDefs("Authors")
Set rs = Td.OpenRecordset
rs.MoveFirst
For i = 1 To 10
   Browser("Book Club").Page("Search Books").WebEdit("Author Name").Set
rs("Author")
   Browser("Book Club").Page("Search Books").WebButton("Search").Click
Next

6. How do I add a manual wait step to my test?

A manual wait (think time) can be added to a QuickTest Professional test using the
following command:

Call Wait()

7. How do I make the test prompt the user for input while it is running?

The VBScript InputBox function enables you to display a dialog box that prompts the
user for input and then continues running the test. You can use the value that was entered
by the user later in the test. For more information on the InputBox function, refer to the
VBScript Reference.

The following example shows the InputBox function used to prompt the user for a
password.

Browser("Mercury Tours").Page("Mercury Tours").WebEdit("username").Set
"administrator"

Passwd = InputBox ("Enter password", "User Input")

Browser("Mercury Tours").Page("Mercury Tours").WebEdit("password").Set Passwd

8. How can I configure the report to show only errors by default?

You can configure the report to show only errors by default by adding the following
section to the QTReport.ini file in your QuickTest Professionalbin folder.

[FilterDialog]

ReportAppDefaultFilter=1 # for error only
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 84
VLearn Technologies
                               www.mysaptesting.com

ReportAppDefaultFilter=3 # shows all messages (default)

9. How can I remove test result files from old tests?

You can use the Test Results Deletion Tool to view a list of all the test results in a
specific location in your file system or in a Quality Center project. You can then delete
any test results that you no longer require.

The Test Results Deletion Tool enables you to sort the test results by name, date, size,
and so forth, so that you can easily identify the results you want to delete.

You can find this utility in Start > Programs > QuickTest Professional > Tools > Test
Results Deletion Tool.

10. How can I launch a new browser from a test?

A new browser window (and any other application) can be launched from within a test by
adding the following step to your test:

SystemUtil.Run "iexplore.exe", "http://www.testingfaqs.co.in"

11. How can I record on nonstandard menus?

You can modify how QuickTest behaves when it records menus.

The options that control this behavior are located in the Advanced Windows Applications
Options dialog box. (Tools > Options > Windows Applications > Advanced).

12. How can I terminate an application that is not responding?

You can terminate any standard application while running a test in QuickTest by adding
one of the following steps to the test:

SystemUtil.CloseProcessByName "app.exe"
SystemUtil.CloseProcessByWndTitle "Some Title"

13. Can I copy and paste to and from the Clipboard during a test run?

You can use the Clipboard object to copy, cut, and paste text during a QuickTest test run.

The object has the same methods as the Clipboard object available in Visual Basic:

Clear
GetData
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 85
VLearn Technologies
                               www.mysaptesting.com

GetFormat
GetText
SetData
SetText

Below is an example of Clipboard object usage:

Set MyClipboard = CreateObject("Mercury.Clipboard")
MyClipboard.Clear
MyClipboard.SetText "TEST"
MsgBox MyClipboard.GetText

14. How do I close QuickTest after "n" test runs when running from Quality
Center?

When running multiple QuickTest tests from Quality Center, you can specify that you
want to close QuickTest after a specified number of tests are executed.

To do so, add the following lines to the end of the mic.ini file, located in your QuickTest
Professionalbin folder:
[RemoteAgent]
CloseToolAfterRuns= (number)

15. Adding Defects to Quality Center

Connects to Quality Center (TestDirector) from a QuickTest test and adds a bug to the
database.

Dim TDConnection
Set TDConnection = CreateObject("TDApiOle.TDConnection")
TDConnection.InitConnection "http://yovav/tdbin" ' URL for the DB
TDConnection.ConnectProject "TD76","bella","pino" ' Valid login information
If TDConnection.Connected Then
MsgBox("Connected to " + chr (13) + "Server " + TDConnection.ServerName _
+ chr (13) +"Project " + TDConnection.ProjectName )
Else
MsgBox("Not Connected")
End If
'Get the IBugFactory
Set BugFactory = TDConnection.BugFactory
'Add a new empty bug
Set Bug = BugFactory.AddItem (Nothing)
'Fill the bug with relevant parameters
Bug.Status = "New"
Bug.Summary = "Connecting to TD"
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 86
VLearn Technologies
                               www.mysaptesting.com

Bug.Priority = "4-Very High" ' depends on the DB
Bug.AssignedTo = "admin" ' user that must exist in the DB's users list
Bug.DetectedBy = "admin" ' user that must exist in the DB's users list
'Post the bug to database (commit)
Bug.Post

16. Using Message Boxes That Close Automatically

The function below shows a message box that disappears after the specified timeout (in
seconds). The script execution then continues.

Public Sub MsgBoxTimeout (Text, Title, TimeOut)
 Set WshShell = CreateObject("WScript.Shell")
 WshShell.Popup Text, TimeOut, Title
End Sub

If TimeOut is 0, it behaves just like a normal message box. If TimeOut is greater than 0,
the dialog box disappears after the specified number of seconds.

17. Using Microsoft Word Spell Check

The following code shows a function for checking the number of spelling and grammar
errors in a string. This function is also used to check the accuracy of a specific property in
all the objects of a given application.

Function NumberOfSpellErrors(strText)
Dim objMsWord
Set objMsWord = CreateObject("Word.Application")
objMsWord.WordBasic.FileNew
objMsWord.WordBasic.Insert strText
NumberOfSpellErrors = objMsWord.ActiveDocument.SpellingErrors.Count
objMsWord.Documents.Close (False)
objMsWord.Quit ' close the application
Set objMsWord = Nothing' Clear object memory
End Function

' The following function uses the Spell errors function to check a specific property
' of all the objects with a given description which are under a given parent

Sub CheckAllObjects(ParentObj, ObjDesc, PropName)
Dim ObjCol, idx, PropValue, OldReportMode
OldReportMode = Reporter.Filter
Reporter.Filter = 2 ' Report only errors
If (IsNull(ParentObj)) Then
Set ObjCol = Desktop.ChildObjects(ObjDesc)
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 87
VLearn Technologies
                                www.mysaptesting.com

Else
Set ObjCol = ParentObj.ChildObjects(ObjDesc)
End If
For idx=0 to ObjCol.count-1
PropValue = ObjCol.Item(idx).GetROProperty(PropName)
RetVal = NumberOfSpellErrors(PropValue) ' The actual spell check result
If (RetVal > 0) Then
ReportText = "Object #" & idx+1 & ": The '" & PropName & "' Property has " & RetVal
& " spell errors (" & PropValue & ")"
Reporter.ReportEvent 1, "Spell Check", ReportText
End If
Next
Reporter.Filter = OldReportMode
End Sub

'''''''''''''''''''''''''''''''''''''
' An example of usage:
' Go over all the static objects in the Login window of the Flight Application
' and for each object check the text for spelling and grammatical errors
'''''''''''''''''''''''''''''''''''''

' Go over all the links in the page and report all the ones that fail the spellcheck
Set Desc = Description.Create()
Desc("nativeclass").Value = "Static"
Set Obj = Dialog("nativeclass:=#32770", "text:=Login")
' Invoke the Flight Application before calling the function
CheckAllObjects Obj, Desc, "text"


18. Using Microsoft Outlook to Send Email

The code below illustrates two methods for sending email using the VBScript code in
QuickTest Professional, and two different COM objects.

' Example 1

Function SendMail(SendTo, Subject, Body, Attachment)
Set ol=CreateObject("Outlook.Application")
Set Mail=ol.CreateItem(0)
Mail.to=SendTo
Mail.Subject=Subject
Mail.Body=Body
If (Attachment <> "") Then
Mail.Attachments.Add(Attachment)
End If
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 88
VLearn Technologies
                            www.mysaptesting.com

Mail.Send
ol.Quit
Set Mail = Nothing
Set ol = Nothing
End Function

' Example 2

Function SendMail(SendFrom, SendTo, Subject, Body)
Set objMail=CreateObject("CDONTS.Newmail")
ObjMail.From = SendFrom
ObjMail.To = SendTo
ObjMail.Subject = Subject
ObjMail.Body = Body
ObjMail.Send
Set objMail = Nothing
End Function

19. DP Example

SetEditBox "userID", 0, "Sairam"

Sub SetEditBox(ObjName, index, TestData)
strHandle = Window("RegExpWndClass:=IEFrame","index:=0"
).GetROProperty("hWnd")
Set gobjBrowser = Browser("hWnd:=" & strHandle)
Set gobjPage = gobjBrowser.Page("index:=0")
Set objDescription = Description.Create()
objDescription("Class Name").Value = "WebEdit"
objDescription("html tag").Value = "INPUT"
objDescription("name").Value =ObjName
objDescription("index").Value = index
gobjPage.WebEdit(objDescription).Set TestData
set gobjBrowser = nothing
Set gobjPage = nothing
End Sub

20. SaveAs Excel file with QTP

Set xl = CreateObject("Excel.Application")
xl.visible = True
xl.Application.Workbooks.open "C:sai.xls"
xl.Worksheets(1).Activate
xl.Application.Visible = True
xl.Cells(1,1).Value = "mum"
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 89
VLearn Technologies
                              www.mysaptesting.com

xl.Cells(1,2).Value = "dad"
xl.activeworkbook.SaveAs("C:sai1.xls")
xl.Application.Quit

// Excel

Dim ExcelApp 'As Excel.Application
Dim excelSheet 'As Excel.worksheet
Dim excelBook 'As Excel.workbook
Dim fso 'As Scripting.FileSystemObject

' This function will return a new Excel Object with a default new Workbook

Function CreateExcel() 'As Excel.Application
 Dim excelSheet 'As Excel.worksheet
 Set ExcelApp = CreateObject("Excel.Application") 'Create a new excel Object
 ExcelApp.Workbooks.Add
 ExcelApp.Visible = True
 Set CreateExcel = ExcelApp
End Function

'This function will close the given Excel Object

'excelApp - an Excel application object to be closed

Sub CloseExcel(ExcelApp)
 Set excelSheet = ExcelApp.ActiveSheet
 Set excelBook = ExcelApp.ActiveWorkbook
 Set fso = CreateObject("Scripting.FileSystemObject")
 On Error Resume Next
 fso.CreateFolder "C:Temp"
 fso.DeleteFile "C:TempExcelExamples.xls"
 excelBook.SaveAs "C:TempExcelExamples.xls"
 ExcelApp.Quit
 Set ExcelApp = Nothing
 Set fso = Nothing
 Err = 0
 On Error GoTo 0
End Sub

'The SaveWorkbook method will save a workbook according to the
workbookIdentifier

'The method will overwrite the previously saved file under the given path
'excelApp - a reference to the Excel Application
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 90
VLearn Technologies
                                www.mysaptesting.com

'workbookIdentifier - The name or number of the requested workbook
'path - the location to which the workbook should be saved
'Return "OK" on success and "Bad Workbook Identifier" on failure

Function SaveWorkbook(ExcelApp, workbookIdentifier, path) 'As String
 Dim workbook 'As Excel.workbook
 On Error Resume Next
 Set workbook = ExcelApp.Workbooks(workbookIdentifier)
 On Error GoTo 0
 If Not workbook Is Nothing Then
 If path = "" Or path = workbook.FullName Or path = workbook.Name Then
 workbook.Save
 Else
 Set fso = CreateObject("Scripting.FileSystemObject")
 'if the path has no file extension then add the 'xls' extension
 If InStr(path, ".") = 0 Then
 path = path & ".xls"
 End If
 On Error Resume Next
 fso.DeleteFile path
 Set fso = Nothing
 Err = 0
 On Error GoTo 0
 workbook.SaveAs path
 End If
 SaveWorkbook = "OK"
 Else
 SaveWorkbook = "Bad Workbook Identifier"
 End If
End Function

'The SetCellValue method sets the given 'value' in the cell which is identified by

'its row column and parent Excel sheet
'excelSheet - the excel sheet that is the parent of the requested cell
'row - the cell's row in the excelSheet
'column - the cell's column in the excelSheet
'value - the value to be set in the cell

Sub SetCellValue(excelSheet, row, column, value)
 On Error Resume Next
 excelSheet.Cells(row, column) = value
 On Error GoTo 0
End Sub


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 91
VLearn Technologies
                               www.mysaptesting.com

'The GetCellValue returns the cell's value according to its row column and sheet

'excelSheet - the Excel Sheet in which the cell exists
'row - the cell's row
'column - the cell's column
'return 0 if the cell could not be found

Function GetCellValue(excelSheet, row, column)
 value = 0
 Err = 0
 On Error Resume Next
 tempValue = excelSheet.Cells(row, column)
  If Err = 0 Then
  value = tempValue
  Err = 0
 End If
  On Error GoTo 0
  GetCellValue = value
End Function

'The GetSheet method returns an Excel Sheet according to the sheetIdentifier

'ExcelApp - the Excel application which is the parent of the requested sheet
'sheetIdentifier - the name or the number of the requested Excel sheet
'return Nothing on failure

Function GetSheet(ExcelApp, sheetIdentifier) 'As Excel.worksheet
  On Error Resume Next
  Set GetSheet = ExcelApp.Worksheets.Item(sheetIdentifier)
  On Error GoTo 0
End Function

'The InsertNewWorksheet method inserts an new worksheet into the active
workbook or

'the workbook identified by the workbookIdentifier, the new worksheet will get a default
'name if the sheetName parameter is empty, otherwise the sheet will have the sheetName
'as a name.
'Return - the new sheet as an Object
'ExcelApp - the excel application object into which the new worksheet should be added
'workbookIdentifier - an optional identifier of the worksheet into which the new
worksheet should be added
'sheetName - the optional name of the new worksheet.

Function InsertNewWorksheet(ExcelApp, workbookIdentifier, sheetName) 'As
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 92
VLearn Technologies
                              www.mysaptesting.com

Excel.worksheet
 Dim workbook 'As Excel.workbook
  Dim worksheet 'As Excel.worksheet
  'In case that the workbookIdentifier is empty we will work on the active workbook
  If workbookIdentifier = "" Then
  Set workbook = ExcelApp.ActiveWorkbook
  Else
  On Error Resume Next
  Err = 0
  Set workbook = ExcelApp.Workbooks(workbookIdentifier)
  If Err <> 0 Then
  Set InsertNewWorksheet = Nothing
  Err = 0
  Exit Function
  End If
  On Error GoTo 0
  End If
  sheetCount = workbook.Sheets.Count
  workbook.Sheets.Add , sheetCount
  Set worksheet = workbook.Sheets(sheetCount + 1)
  'In case that the sheetName is not empty set the new sheet's name to sheetName
  If sheetName <> "" Then
  worksheet.Name = sheetName
  End If
  Set InsertNewWorksheet = worksheet
End Function

'The RenameWorksheet method renames a worksheet's name

'ExcelApp - the excel application which is the worksheet's parent
'workbookIdentifier - the worksheet's parent workbook identifier
'worksheetIdentifier - the worksheet's identifier
'sheetName - the new name for the worksheet

Function RenameWorksheet(ExcelApp, workbookIdentifier, worksheetIdentifier,
sheetName) 'As String
  Dim workbook 'As Excel.workbook
  Dim worksheet 'As Excel.worksheet
  On Error Resume Next
  Err = 0
  Set workbook = ExcelApp.Workbooks(workbookIdentifier)
  If Err <> 0 Then
  RenameWorksheet = "Bad Workbook Identifier"
  Err = 0
  Exit Function
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 93
VLearn Technologies
                            www.mysaptesting.com

  End If
  Set worksheet = workbook.Sheets(worksheetIdentifier)
  If Err <> 0 Then
  RenameWorksheet = "Bad Worksheet Identifier"
  Err = 0
  Exit Function
  End If
  worksheet.Name = sheetName
  RenameWorksheet = "OK"
End Function

'The RemoveWorksheet method removes a worksheet from a workbook

'ExcelApp - the excel application which is the worksheet's parent
'workbookIdentifier - the worksheet's parent workbook identifier
'worksheetIdentifier - the worksheet's identifier
Function RemoveWorksheet(ExcelApp, workbookIdentifier, worksheetIdentifier) 'As
String
  Dim workbook 'As Excel.workbook
  Dim worksheet 'As Excel.worksheet
  On Error Resume Next
   Err = 0
   Set workbook = ExcelApp.Workbooks(workbookIdentifier)
  If Err <> 0 Then
   RemoveWorksheet = "Bad Workbook Identifier"
   Exit Function
   End If
   Set worksheet = workbook.Sheets(worksheetIdentifier)
  If Err <> 0 Then
   RemoveWorksheet = "Bad Worksheet Identifier"
   Exit Function
   End If
   worksheet.Delete
   RemoveWorksheet = "OK"
End Function

'The CreateNewWorkbook method creates a new workbook in the excel application

'ExcelApp - the Excel application to which an new Excel workbook will be added
Function CreateNewWorkbook(ExcelApp)
  Set NewWorkbook = ExcelApp.Workbooks.Add()
  Set CreateNewWorkbook = NewWorkbook
End Function

'The OpenWorkbook method opens a previously saved Excel workbook and adds it
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 94
VLearn Technologies
                             www.mysaptesting.com

to the Application

'excelApp - the Excel Application the workbook will be added to
'path - the path of the workbook that will be opened
'return Nothing on failure
Function OpenWorkbook(ExcelApp, path)
   On Error Resume Next
   Set NewWorkbook = ExcelApp.Workbooks.Open(path)
   Set OpenWorkbook = NewWorkbook
   On Error GoTo 0
End Function

'The ActivateWorkbook method sets one of the workbooks in the application as
Active workbook

'ExcelApp - the workbook's parent excel Application
'workbookIdentifier - the name or the number of the workbook
Sub ActivateWorkbook(ExcelApp, workbookIdentifier)
On Error Resume Next
ExcelApp.Workbooks(workbookIdentifier).Activate
On Error GoTo 0
End Sub

'The CloseWorkbook method closes an open workbook

'ExcelApp - the parent Excel application of the workbook
'workbookIdentifier - the name or the number of the workbook
Sub CloseWorkbook(ExcelApp, workbookIdentifier)
  On Error Resume Next
  ExcelApp.Workbooks(workbookIdentifier).Close
  On Error GoTo 0
End Sub

'The CompareSheets method compares between two sheets.

'if there is a difference between the two sheets then the value in the second sheet
'will be changed to red and contain the string:
'"Compare conflict - Value was 'Value2', Expected value is 'value2'"
'sheet1, sheet2 - the excel sheets to be compared
'startColumn - the column to start comparing in the two sheets
'numberOfColumns - the number of columns to be compared
'startRow - the row to start comparing in the two sheets
'numberOfRows - the number of rows to be compared
Function CompareSheets(sheet1, sheet2, startColumn, numberOfColumns, startRow,
numberOfRows, trimed) 'As Boolean
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 95
VLearn Technologies
                              www.mysaptesting.com

   Dim returnVal 'As Boolean
   returnVal = True
    'In case that one of the sheets doesn't exists, don't continue the process
    If sheet1 Is Nothing Or sheet2 Is Nothing Then
    CompareSheets = False
    Exit Function
   End If
    'loop through the table and fill values into the two worksheets
   For r = startRow to (startRow + (numberOfRows - 1))
    For c = startColumn to (startColumn + (numberOfColumns - 1))
    Value1 = sheet1.Cells(r, c)
    Value2 = sheet2.Cells(r, c)
    'if 'trimed' equels True then used would like to ignore blank spaces
    If trimed Then
    Value1 = Trim(Value1)
    Value2 = Trim(Value2)
    End If
    'in case that the values of a cell are not equel in the two worksheets
    'create an indicator that the values are not equel and set return value
    'to False
    If Value1 <> Value2 Then
    Dim cell 'As Excel.Range
    sheet2.Cells(r, c) = "Compare conflict - Value was '" & Value2 & "', Expected value is
'" & Value1 & "'."
    Set cell = sheet2.Cells(r, c)
    cell.Font.Color = vbRed
    returnVal = False
    End If
    Next
    Next
    CompareSheets = returnVal
End Function

// To Check File Exist or Not

 Function ReportFileStatus(filespec)
 Dim fso, msg
  Set fso = CreateObject("Scripting.FileSystemObject")
 If (fso.FileExists(filespec)) Then
   msg = filespec & " exists."
 Else
   msg = filespec & " doesn't exist."
 End If
 ReportFileStatus = msg
End Function
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 96
VLearn Technologies
                             www.mysaptesting.com

Or

 filePath="c:testlog.txt"
 Set fso = CreateObject("Scripting.FileSystemObject")
 If (fso.FileExists(filePath)) Then
    Msgbox "File Exists at : " &filePath
 Else
    Msgbox "File doesn't exist at :" &filePath
 End If

// Folder Exists

Function ReportFolderStatus(fldr)
 Dim fso, msg
 Set fso = CreateObject("Scripting.FileSystemObject")
 If (fso.FolderExists(fldr)) Then
   msg = fldr & " exists."
 Else
   msg = fldr & " doesn't exist."
 End If
 ReportFolderStatus = msg
End Function


Or

 fldr="c:wmpub"
  Set fso = CreateObject("Scripting.FileSystemObject")
  If (fso.FolderExists(fldr)) Then
    Msgbox "Folder exists at :" &fldr
  Else
    Msgbox "Folder doesn't exist at :" &fldr
  End If


// File Created at Date

Function ShowFileInfo(filespec)
 Dim fso, f
 Set fso = CreateObject("Scripting.FileSystemObject")
 Set f = fso.GetFile(filespec)
 ShowFileInfo = "Created: " & f.DateCreated
End Function


Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 97
VLearn Technologies
                             www.mysaptesting.com

Or


 filespec="c:testlog.txt"
 Set fso = CreateObject("Scripting.FileSystemObject")
 Set f = fso.GetFile(filespec)
 Msgbox "Created: " & f.DateCreated

// To Check File Extension

 Function GetAnExtension(DriveSpec)
 Dim fso
 Set fso = CreateObject("Scripting.FileSystemObject")
 GetAnExtension = fso.GetExtensionName(Drivespec)
 End Function

Or

 Drivespec="c:testlog.txt"
 Set fso = CreateObject("Scripting.FileSystemObject")
 GetAnExtension = fso.GetExtensionName(Drivespec)

 Msgbox GetAnExtension




// Regular Expression

Function SubMatchTest(inpStr)
 Dim oRe, oMatch, oMatches
 Set oRe = New RegExp
 ' Look for an e-mail address (not a perfect RegExp)
 oRe.Pattern = "(w+)@(w+).(w+)"
 ' Get the Matches collection
 Set oMatches = oRe.Execute(inpStr)
 ' Get the first item in the Matches collection
 Set oMatch = oMatches(0)
 ' Create the results string.
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 98
VLearn Technologies
                             www.mysaptesting.com

 ' The Match object is the entire match - dragon@xyzzy.com
 retStr = "Email address is: " & oMatch & vbNewline
 ' Get the sub-matched parts of the address.
 retStr = retStr & "Email alias is: " & oMatch.SubMatches(0) ' dragon
 retStr = retStr & vbNewline
 retStr = retStr & "Organization is: " & oMatch. SubMatches(1)' xyzzy
 SubMatchTest = retStr
End Function

MsgBox(SubMatchTest("Please send mail to ramana@xyzzy.com. Thanks!"))


Function RegExpTest(patrn, strng)
 Dim regEx, Match, Matches ' Create variable.
 Set regEx = New RegExp ' Create a regular expression.
 regEx.Pattern = patrn ' Set pattern.
 regEx.IgnoreCase = True ' Set case insensitivity.
 regEx.Global = True ' Set global applicability.
 Set Matches = regEx.Execute(strng) ' Execute search.
 For Each Match in Matches ' Iterate Matches collection.
   RetStr = RetStr & "Match found at position "
   RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
   RetStr = RetStr & Match.Value & "'." & vbCRLF
 Next
 RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))


// To Send Mail from outlook Application

SendTo=".......@........com"
SendToCC=".......@........com"
Subject="QTP mail"
Body1="This mail is generated from QTP Environment"
Attachment="C:Spec.xls"

Call SendMail(SendTo, Subject, Body1, Attachment)

Function SendMail(SendTo, Subject, Body, Attachment)
Set ol=CreateObject("Outlook.Application")
Set Mail=ol.CreateItem(0)
'ol.DisplayAlerts = False
Mail.to=SendTo
Mail.CC=SendToCC
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad  Page 99
VLearn Technologies
                                  www.mysaptesting.com

Mail.Subject=Subject
Mail.Body=Body
If (Attachment <> "") Then
Mail.Attachments.Add(Attachment)
End If
Mail.Send
ol.Quit
Set Mail = Nothing
Set ol = Nothing
End Function

// Automation Object Model (From Command Line )

Dim qtApp 'As QuickTest.Application ' Declare the Application object variable
Dim qtTest 'As QuickTest.Test ' Declare a Test object variable

Set qtApp = CreateObject("QuickTest.Application") ' Create the Application object
qtApp.Launch ' Start QuickTest
qtApp.Visible = True ' Make the QuickTest application visible

qtApp.Open "C:Tempsimple_test", True ' Open the test in read-only mode

' set run settings for the test
Set qtTest = qtApp.Test
qtTest.Run ' Run the test

WScript.StdOut.Write "Status is:" & qtTest.LastRunResults.Status ' Check the results of
the test run
qtTest.Close ' Close the test

Set qtResultsOpt = Nothing ' Release the Run Results Options object
Set qtTest = Nothing ' Release the Test object
Set qtApp = Nothing ' Release the Application object


C:cscript /nologo filename.vbs

How to use automation object to load the library

Dim qtApp
Dim qtLibraries

Set qtApp = CreateObject("QuickTest.Application")
Set qtLibraries = qtApp.Test.Settings.Resources.Libraries ' Get the libraries collection
object
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 100
VLearn Technologies
                               www.mysaptesting.com

If qtLibraries.Find("C:sai1.vbs") = -1 Then ' If the library cannot be found in the
collection
ExecuteFile "C:sai1.vbs"
End If

Call test1()

Function In File Sai1.vbs
Function test1()
MsgBox "Hi Manish"
End Function

How to use automation object to load the library

Store the Library file along with the entire path in a variable.

EG: sPath = "D:/Files/Functions.vbs"

Executfile (sPath)

OR

Executfile ("D:/Files/Functions.vbs")

Below this call which ever function you want to call from the library file
Call FunctName(argument list)

Can a function return dictonary object
Yes.

Functions can return a dictonary object.

Dim dicObj
Set dicObj = CreateObject("Scripting.Dictionary")

Set obj=getname
MsgBox(obj.item("name"))

Public Function getname()
dicObj.add "name","Uday Kumar"
Set getname=dicObj
End function

How the Message Boxes Close Automatically
Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 101
VLearn Technologies
                               www.mysaptesting.com

The following script shows a message box that disappears after the specified timeout (in
seconds). The script execution then continues.

If TimeOut is 0, it behaves just like a normal message box. If TimeOut is greater than 0,
the dialog box disappears after the specified number of seconds.

Set wShellObj=createobject("WScript.shell")
wShellObj.popup "Hello Uday, How are you",10,"This is sample" ' Displays like this:




The message box automatically closes after 10 sec.s

Even we can handle the error messages from the error handling mechanism like this:
Set fileSysObj=createobject("Scripting.filesystemobject")
On Error resume next
fileSysObj.opentextfile("c:uday.txt")
str=Err.description
wShellObj.popup str,3,"This is for file not found"

How to find out the number of links in a web page

Here i am writing the link names in a text file

Set fileSysObject=createobject("Scripting.FileSystemObject")
Set linksFileName=fileSysObject.opentextfile("D:samplelinkfile.txt",2,true)

Set linkDescObj=description.Create
linkDescObj("micclass").value="Link"
Set noOfLinks=browser("Browser").Page("Yahoo! India").ChildObjects(linkDescObj)

For i=0 to noOfLinks.count-1
linkName=noOfLinks(i).getROProperty("name")
linksFileName.writeline(linkName)
Next
linksFileName.close
Set fileSysObject=nothing



Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 102
VLearn Technologies
                               www.mysaptesting.com

How to specify the environment variables to be loaded when QTP is started

You can either define individual values in the .vbs file or specify an environment file to
load.

Example:
Here is what the .vbs file could look like:
Dim App ‗As Application
‗ Launch QTP
Set App = CreateObject(‖QuickTest.Application‖)
App.Launch
App.Visible = True
‗ Load an INI file with user-defined parameters
App.Test.Environment.LoadFromFile ―C:Test_Paramsenvironment_file1.ini‖
‗ Set the value of a specific user-defined Environment variable
App.Test.Environment.Value(‖newvariable‖) = ―new value‖
As you can see from the example, the Environment variable file is actually an .ini file.
The structure would be:
  [Environment]
  var1=value1
  var2=value2
  …




Name: Govind                                Mail ID: mysaptesting@gmail.com
Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 103

More Related Content

PPTX
QTP Power Point Presentation
PPT
Qtp Training
PDF
JUnit Kung Fu: Getting More Out of Your Unit Tests
DOC
Interview qutions
PPTX
Unit Testing in Java
PPTX
Testing And Mxunit In ColdFusion
DOC
Interview questions in qtp
PPT
Qtp 92 Tutorial
QTP Power Point Presentation
Qtp Training
JUnit Kung Fu: Getting More Out of Your Unit Tests
Interview qutions
Unit Testing in Java
Testing And Mxunit In ColdFusion
Interview questions in qtp
Qtp 92 Tutorial

What's hot (20)

DOC
Qtp faqs
PPT
Test strategy for web development
DOC
Qtp interview questions
PPT
Hp Quick Test Professional
PPT
Ppt Qtp
PDF
PPT
3 j unit
PPT
QTP Training by INFOTECH
PDF
Effective Unit Testing
PPT
QTP Slides Presentation.
PPTX
Pragmatic unittestingwithj unit
PDF
Unit testing, principles
PDF
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
PPTX
Thread & concurrancy
PPTX
Grails Spock Testing
PPTX
Dependency injection with unity 2.0 Dmytro Mindra Lohika
PDF
Unit test-using-spock in Grails
PPT
Unit testing with java
PPTX
JUNit Presentation
PDF
JUnit Pioneer
Qtp faqs
Test strategy for web development
Qtp interview questions
Hp Quick Test Professional
Ppt Qtp
3 j unit
QTP Training by INFOTECH
Effective Unit Testing
QTP Slides Presentation.
Pragmatic unittestingwithj unit
Unit testing, principles
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
Thread & concurrancy
Grails Spock Testing
Dependency injection with unity 2.0 Dmytro Mindra Lohika
Unit test-using-spock in Grails
Unit testing with java
JUNit Presentation
JUnit Pioneer
Ad

Similar to QTP Faqs (20)

DOC
Some useful tips with qtp
DOC
Qtp commands
PPS
About Qtp 92
PPS
About Qtp_1 92
PPS
About QTP 9.2
DOC
What are the features in qtp
PDF
Qtp certification training_material
DOC
Qtp interview questions and answers
DOC
Qtp interview questions and answers
PPT
QTP Online Training
PDF
Qtp Interview Questions
PPTX
Automation Tool QTP
PPT
HP Quick Test Professional
DOC
Qtp Summary
PPT
Qtp Basics
DOC
Qtp interview questions
DOC
Qtp (basics to advanced)
PPT
Qtp with descriptive programming
PPT
Qtp With Descriptive Programming
PPT
QTP with Descriptive programming
Some useful tips with qtp
Qtp commands
About Qtp 92
About Qtp_1 92
About QTP 9.2
What are the features in qtp
Qtp certification training_material
Qtp interview questions and answers
Qtp interview questions and answers
QTP Online Training
Qtp Interview Questions
Automation Tool QTP
HP Quick Test Professional
Qtp Summary
Qtp Basics
Qtp interview questions
Qtp (basics to advanced)
Qtp with descriptive programming
Qtp With Descriptive Programming
QTP with Descriptive programming
Ad

Recently uploaded (20)

PPTX
History ATA Presentation.pptxhttps://www.slideshare.net/slideshow/role-of-the...
DOCX
Lambutchi Calin Claudiu had a discussion with the Buddha about the restructur...
PDF
Rakshabandhan – Celebrating the Bond of Siblings - by Meenakshi Khakat
PDF
Commercial arboriculture Commercial Tree consultant Essex, Kent, Thaxted.pdf
PPTX
E8 ssssssssssssssssssssssssssssssssssQ1 0101 PS.pptx
PPTX
Understanding Colour Prediction Games – Explained Simply
PDF
WKA #29: "FALLING FOR CUPID" TRANSCRIPT.pdf
PDF
A New Kind of Director for a New Kind of World Why Enzo Zelocchi Matters More...
PDF
Keanu Reeves Beyond the Legendary Hollywood Movie Star.pdf
PDF
Between the Reels and the Revolution Enzo Zelocchi’s Unscripted Path Through ...
PPT
business model and some other things that
PDF
oppenheimer and the story of the atomic bomb
PPTX
asdmadsmammmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm.pptx
PPTX
providenetworksystemadministration.pptxhnnhgcbdjckk
PDF
TAIPANQQ SITUS MUDAH MENANG DAN MUDAH MAXWIN SEGERA DAFTAR DI TAIPANQQ DAN RA...
PDF
Songlyrics.net-website for lyrics song download
PPTX
TOEFL ITP Grammar_ Structure & Written Expression.pptx
PDF
EVs U-5 ONE SHOT Notes_c49f9e68-5eac-4201-bf86-b314ef5930ba.pdf
PDF
Gess1025.pdfdadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
PPTX
genderandsexuality.pptxjjjjjjjjjjjjjjjjjjjj
History ATA Presentation.pptxhttps://www.slideshare.net/slideshow/role-of-the...
Lambutchi Calin Claudiu had a discussion with the Buddha about the restructur...
Rakshabandhan – Celebrating the Bond of Siblings - by Meenakshi Khakat
Commercial arboriculture Commercial Tree consultant Essex, Kent, Thaxted.pdf
E8 ssssssssssssssssssssssssssssssssssQ1 0101 PS.pptx
Understanding Colour Prediction Games – Explained Simply
WKA #29: "FALLING FOR CUPID" TRANSCRIPT.pdf
A New Kind of Director for a New Kind of World Why Enzo Zelocchi Matters More...
Keanu Reeves Beyond the Legendary Hollywood Movie Star.pdf
Between the Reels and the Revolution Enzo Zelocchi’s Unscripted Path Through ...
business model and some other things that
oppenheimer and the story of the atomic bomb
asdmadsmammmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm.pptx
providenetworksystemadministration.pptxhnnhgcbdjckk
TAIPANQQ SITUS MUDAH MENANG DAN MUDAH MAXWIN SEGERA DAFTAR DI TAIPANQQ DAN RA...
Songlyrics.net-website for lyrics song download
TOEFL ITP Grammar_ Structure & Written Expression.pptx
EVs U-5 ONE SHOT Notes_c49f9e68-5eac-4201-bf86-b314ef5930ba.pdf
Gess1025.pdfdadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
genderandsexuality.pptxjjjjjjjjjjjjjjjjjjjj

QTP Faqs

  • 1. VLearn Technologies www.mysaptesting.com QTP 9.2 provides following features: Mercury Screen Recorder: Capture your entire run session in a movie clip or capture only the segments with errors, and then view your movie from the Test Results window. Dynamic Management of Object Repositories: Quick Test now has a new Repositories Collection reserved object that you can use to programmatically manage the set of object repositories that are associated with an action during a run session. Object Repository Manager: You can use the Object Repository Manager to manage all of the shared object repositories in your organization from one, central location. This includes adding and defining objects, modifying objects and their descriptions, parameterize test object property values, maintaining and organizing repositories, and importing and exporting repositories in XML format. You can open multiple object repositories at the same time. Each object repository opens in its own resizable document window. This enables you to compare the content of the repositories, to copy or move objects from one object repository to another, and so forth. Object Repository Merge Tool: You can use the Object Repository Merge Tool to merge the objects from two shared object repositories into a single shared object repository. You can also use the Object Repository Merge Tool to merge objects from the local object repository of one or more actions or components into a shared object repository. When you merge objects from two source object repositories, the content is copied to a new, target object repository, ensuring that the information in the source repositories remains unchanged. If any conflicts occur during the merge, for example, if two objects have the same name and test object class, but different test object descriptions, the relevant objects are highlighted in the source repositories, and the Resolution Options pane details the conflict and possible resolutions. Multiple Object Repositories per Action or Component: Quick Test provides several options for storing and accessing test objects. You can store the test objects for each action or component in its corresponding local object repository, which is unique for each action and component. You can also store test objects in one or more shared object repositories that can be used in multiple actions and components. Alternatively, you can use a combination of objects from the local object repository and one or more shared object repositories. You choose the combination that matches your testing needs. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 1
  • 2. VLearn Technologies www.mysaptesting.com XML Object Repository Format: Quick test now enables you to import and export object repositories from and to XML format. This enables you to modify object repositories using the XML editor of your choice and then import them back into Quick Test. You can import and export files either from and to the file system or a Quality Center project (if Quick Test is connected to Quality Center). Functions Library Editor: Quick Test now has a built-in function library editor, which enables you to create and edit function libraries containing VBScript functions, subroutines, modules, and so forth, and then call their functions from your test or component. Handling Missing Actions and Resources: Whenever a testing document (test, component, or application area) contains a resource that cannot be found, Quick Test opens the Missing Resources pane and lists the missing resource(s). For example, a test may contain an action or a call to an action that cannot be found; a testing document may use a shared object repository that cannot be found; or a testing document may use an object repository parameter that does not have a default value. In all of these cases, Quick Test indicates this in the Missing Resources pane, enabling you to map a missing resource to an existing one, or remove it from the testing document, as required. How can I check if a parameter exists in Data Table or not? on error resume next Val=DataTable ("ParamName", dtGlobalSheet) if err. number<> 0 then 'Parameter does not exist else 'Parameter exists end if How can I check if a checkpoint passes or not? chk_PassFail = Browser (...).Page (...).WebEdit (...).Check (Checkpoint ("Check1")) if chk_PassFail then MsgBox "Check Point passed" else MsgBox "Check Point failed" end if My test fails due to checkpoint failing, Can I validate a checkpoint without my test failing due to checkpoint failure? Reporter. Filter = rfDisableAll 'Disables all the reporting stuff Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 2
  • 3. VLearn Technologies www.mysaptesting.com chk_PassFail = Browser (...).Page (...).WebEdit (...).Check (Checkpoint ("Check1")) Reporter. Filter = rfEnableAll 'Enable all the reporting stuff if chk_PassFail then MsgBox "Check Point passed" else MsgBox "Check Point failed" end if What is the difference between an Action and a function? Action is a thing specific to QTP while functions are a generic thing which is a feature of VB Scripting. Action can have an object repository associated with it while a function can't. A function is just lines of code with some/none parameters and a single return value while an action can have more than one output parameters. Where to use function or action? Well answer depends on the scenario. If you want to use the OR feature then you have to go for Action only. If the functionality is not about any automation script i.e. a function like getting a string between to specific characters, now this is something not specific to QTP and can be done on pure VB Script, so this should be done in a function and not an action. Code specific to QTP can also be put into a function using DP. Decision of using function/action depends on what any one would be comfortable using in a given situation. When to use a Recovery Scenario and when to us on error resume next? Recovery scenarios are used when you cannot predict at what step the error can occur or when you know that error won't occur in your QTP script but could occur in the world outside QTP, again the example would be "out of paper", as this error is caused by printer device driver. "On error resume next" should be used when you know if an error is expected and dont want to raise it, you may want to have different actions depending upon the error that occurred. Use err.number & err.description to get more details about the error. How to use environment variable? A simple definition could be... it is a variable which can be used across the reusable actions and is not limited to one reusable action. There are two types of environment variables: 1. User-defined 2. Built-in We can retrieve the value of any environment variable. But we can set the value of only user-defined environment variables. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 3
  • 4. VLearn Technologies www.mysaptesting.com To set the value of a user-defined environment variable: Environment (Variable Name) = NewValue To retrieve the value of a loaded environment variable: CurrValue = Environment (VariableName) Example The following example creates a new internal user-defined variable named MyVariable with a value of 10, and then retrieves the variable value and stores it in the MyValue variable. Environment. Value ("MyVariable") =10 MyValue=Environment.Value ("MyVariable") How to rename a checkpoint (QTP 9.0)? Example: Window ("Notepad").WinEditor ("Edit").Check Checkpoint ("Edit") in the above example, the user would like to change the name of the Checkpoint object from "Edit" to something more meaningful. Note: This functionality is new to QuickTest Professional 9.0.This is not available for QTP 8.2 and below. 1. Right-click on the Checkpoint step in the Keyword View or on the Checkpoint object in Expert View. 2. Select "Checkpoint Properties" from the pop-up menu. 3. In the Name field, enter the new checkpoint name. 4. Click. The name of the checkpoint object will be updated within the script. Example: Window ("Notepad").WinEditor ("Edit").Check Checkpoint ("NewCheckPointName") Note: You must use the QuickTest Professional user interface to change the name of the checkpoint. If you manually change the name of the checkpoint in the script, QuickTest Professional will generate an error during replay. The error message will be similar to the following: "The "" Checkpoint object was not found in the Object Repository. Check the Object Repository to confirm that the object exists or to find the correct name for the object." The Checkpoint object is not a visible object within the object repository, so if you manually modify the name, you may need to recreate the checkpoint to resolve the error. What is the lservrc file in QTP? The lservrc file contains the license codes that have been installed The lservrc file contains the license codes that have been installed. Whenever a new license is created, the license code is automatically added to this file. The lservrc file is a text file, with no extension. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 4
  • 5. VLearn Technologies www.mysaptesting.com File Location: 1) For a Concurrent (Floating) license installation: Example: C:Program FilesXYZ TechnologiesABC ServerEnglishlservrc 2) For a Seat (Stand-alone) license installation Example: C:Program FilesMercury InteractiveQuickTest ProfessionalBinlservrc What to do if you are not able to run QTP from quality center? This is for especially for newbie‘s with QTP. Check that you have selected Allow other mercury products to run tests and components from QTP  Tools  Options  Run Tab. Understanding the Smart Identification Process If QuickTest activates the Smart Identification mechanism during a run session (because it was unable to identify an object based on its learned description), it follows the following process to identify the object: 1. QuickTest "forgets" the learned test object description and creates a new object candidate list containing the objects (within the object's parent object) that match all of the properties defined in the Base Filter Properties list. 2. QuickTest filters out any object in the object candidate list that does not match the first property listed in the Optional Filter Properties list. The remaining objects become the new object candidate list. Walking Through a Smart Identification Example The following example walks you through the object identification process for an object. Suppose you have the following statement in your test or component: Browser("Mercury Tours").Page("Mercury Tours").Image("Login").Click 22,17 When you created your test or component, QuickTest learned the following object description for the Login image: However, at some point after you created your test or component, a second login button Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 5
  • 6. VLearn Technologies www.mysaptesting.com (for logging into the VIP section of the Web site) was added to the page, so the Web designer changed the original Login button's alt tag to: basic login. The default description for Web Image objects (alt, html tag, image type) works for most images in your site, but it no longer works for the Login image, because that image's alt property no longer matches the learned description. Therefore, when you run your test or component, QuickTest is unable to identify the Login button based on the learned description. However, QuickTest succeeds in identifying the Login button using its Smart Identification definition. The explanation below describes the process that QuickTest uses to find the Login object using Smart Identification: 1. According to the Smart Identification definition for Web image objects, QuickTest learned the values of the following properties when you recorded the click on the Login image: 2. QuickTest begins the Smart Identification process by identifying the five objects on the Mercury Tours page that match the base filter properties definition (html tag = INPUT and image type = Image Button). QuickTest considers these to be the object candidates and begins checking the object candidates against the Optional Filter Properties list. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 6
  • 7. VLearn Technologies www.mysaptesting.com 3. QuickTest checks the alt property of each of the object candidates, but none have the alt value: Login, so QuickTest ignores this property and moves on to the next one. 4. QuickTest checks the name property of each of the object candidates, and finds that two of the objects (both the basic and VIP Login buttons) have the name: login. QuickTest filters out the other three objects from the list, and these two login buttons become the new object candidates. 5. QuickTest checks the file name property of the two remaining object candidates. Only one of them has the file name login.gif, so QuickTest correctly concludes that it has found the Login button and clicks it. Step-by-Step Instructions for Configuring a Smart Identification Definition you use the Smart Identification Properties dialog box, accessible from the Object Identification dialog box, to configure the Smart Identification definition for a test object class. To configure Smart Identification properties: 1. Choose Tools > Object Identification. The Object Identification dialog box opens. 2. Select the appropriate environment in the Environment list. The test object classes associated with the selected environment are displayed in the Test object classes list. Note: The environments included in the Environment list are those that correspond to the loaded add-in environments. 3. Select the test object class you want to configure. 4. Click the Configure button next to the Enable Smart Identification check box. The Configure button is enabled only when the Enable Smart Identification option is selected. The Smart Identification Properties dialog box opens: Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 7
  • 8. VLearn Technologies www.mysaptesting.com 5. In the Base Filter Properties list, click Add/Remove. The Add/Remove Properties dialog box for base filter properties opens. 6. Select the properties you want to include in the Base Filter Properties list and/or clear the properties you want to remove from the list. Tip: You can also add property names to the set of available properties for Web objects using the attribute/ notation. To do this, click New. The New Property dialog box opens. Enter a valid property in the format attribute/ and click OK. The new property is added to the Base Filter Properties list. For example, to add a property called MyColor, enter attribute/MyColor. 7. Click OK to close the Add/Remove Properties dialog box. The updated set of base filter properties is displayed in the Base Filter Properties list. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 8
  • 9. VLearn Technologies www.mysaptesting.com 8. In the Optional Filter Properties list, click Add/Remove. The Add/Remove Properties dialog box for optional filter properties opens. 9. Select the properties you want to include in the Optional Filter Properties list and/or clear the properties you want to remove from the list. Note: You cannot include the same property in both the base and optional property lists. You can specify a new property by clicking New and specifying a valid property name in the displayed dialog box. Tip: You can also add property names to the set of available properties for Web objects using the attribute/ notation. To do this, click New. The New Property dialog box opens. Enter a valid property in the format attribute/ and click OK. The new property is added to the Optional Filter Properties list. For example, to add a property called MyColor, enter attribute/MyColor. 10. Click OK to close the Add/Remove Properties dialog box. The properties are displayed in the Optional Filter Properties list. 11. Use the up and down arrows to set your preferred order for the optional filter properties. When QuickTest uses the Smart Identification mechanism, it checks the remaining object candidates against the optional properties one-by-one according to the order you set in the Optional Filter Properties list until it filters the object candidates down to one object. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 9
  • 10. VLearn Technologies www.mysaptesting.com How to verify that the Siebel Test Automation module is installed? Check that the list of running processes in the Windows Task Manager includes a process named SiebelAx_Test_A. This process will appear only after you have logged into the Siebel application. Does Mercury QTP care what mode the Siebel application is in (HI vs. SI)? Support for High Interactivity applications is different from support for Standard Interactivity applications. When recording a script against a HI application, the script mostly contains calls into the Siebel-provided test automation API. In contrast, when recording a script against a pure SI application or against a SI component that is embedded within an HI application (e.g. customer dashboard, query assistant, search center), the script mostly contains calls that use Mercury‘s native scripting syntax. Descriptive Programming: Whenever QTP records any action on any object of an application, it adds some description on how to recognize that object to a repository of objects called object repository. QTP cannot take action on an object until unless its object description is in the Object Repository. But descriptive programming provides a way to perform action on objects which are not in Object repository Object Identification: To identify an object during the play back of the scripts QTP stores some properties which helps QTP to uniquely identify the object on a page. Below screen shots shows an example Object repository: Now to recognize a radio button on a page QTP had added 2 properties the name of the radio button and the html tag for it. The name the left tree view is the logical name Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 10
  • 11. VLearn Technologies www.mysaptesting.com given by QTP for the object. This can be changed as per the convenience of the person writing the test case. QTP only allows UNIQUE logical name under same level of hierarchy. As we see in the snapshot the two objects in Browser->Page node are ―WebTable‖ and ―testPath‖, they cannot have the same logical name. But an object under some other node can have the same name. Now with the current repository that we have, we can only write operation on objects which are in the repository. Some of the example operations are given below Browser("Browser").Page("Page").WebRadioGroup ("testPath").Select "2" CellData = Browser("Browser").Page("Page").WebTable ("WebTable").GetCellData (1,1) Browser("Example2").Page("Page").WebEdit("testPath").Set "Test text" When and Why to use Descriptive programming? Below are some of the situations when Descriptive Programming can be considered useful: 1. The objects in the application are dynamic in nature and need special handling to identify the object. The best example would be of clicking a link which changes according to the user of the application, Ex. ―Logout <>‖. 2. When object repository is getting huge due to the no. of objects being added. If the size of Object repository increases too much then it decreases the performance of QTP while recognizing an object. 3. When you don‘t want to use object repository at all. Well the first question would be why not Object repository? Consider the following scenario which would help understand why not Object repository Scenario 1: Suppose we have a web application that has not been developed yet.Now QTP for recording the script and adding the objects to repository needs the application to be up, that would mean waiting for the application to be deployed before we can start of with making QTP scripts. But if we know the descriptions of the objects that will be created then we can still start off with the script writing for testing Scenario 2: Suppose an application has 3 navigation buttons on each and every page. Let the buttons be ―Cancel‖, ―Back‖ and ―Next‖. Now recording action on these buttons would add 3 objects per page in the repository. For a 10 page flow this would mean 30 objects which could have been represented just by using 3 objects. So instead of adding these 30 objects to the repository we can just write 3 descriptions for the object and use it on any page. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 11
  • 12. VLearn Technologies www.mysaptesting.com 4. Modification to a test case is needed but the Object repository for the same is Read only or in shared mode i.e. changes may affect other scripts as well. 5. When you want to take action on similar type of object i.e. suppose we have 20 textboxes on the page and there names are in the form txt_1, txt_2, txt_3 and so on. Now adding all 20 the Object repository would not be a good programming approach. How to use Descriptive Programming? There are two ways in which descriptive programming can be used 1. By creating properties collection object for the description. 2. By giving the description in form of the string arguments. 1. By creating properties collection object for the description. To use this method you need first to create an empty description Dim obj_Desc ‗Not necessary to declare Set obj_Desc = Description.Create Now we have a blank description in ―obj_Desc‖. Each description has 3 properties ―Name‖, ―Value‖ and ―RegularExpression‖. obj_Desc(―html tag‖).value= ―INPUT‖ When you use a property name for the first time the property is added to the collection and when you use it again the property is modified. By default each property that is defined is a regular expression. Suppose if we have the following description obj_Desc (―html tag‖).value= ―INPUT‖ obj_Desc (―name‖).value= ―txt.*‖ This would mean an object with html tag as INPUT and name starting with txt. Now actually that ―.*‖ was considered as regular expression. So, if you want the property ―name‖ not to be recognized as a regular expression then you need to set the ―regular expression‖ property as FALSE obj_Desc(―html tag‖).value= ―INPUT‖ obj_Desc(―name‖).value= ―txt.*‖ obj_Desc(―name‖).regularexpression= ―txt.*‖ This is how we create a description. Now below is the way we can use it Browser(―Browser‖).Page(―Page‖).WebEdit(obj_Desc).set ―Test‖ When we say .WebEdit(obj_Desc) we define one more property for our description that Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 12
  • 13. VLearn Technologies www.mysaptesting.com was not earlier defined that is it‘s a text box (because QTPs WebEdit boxes map to text boxes in a web page). If we know that we have more than 1 element with same description on the page then we must define ―index‖ property for the that description Now the html code has two objects with same description. So distinguish between these 2 objects we will use the ―index‖ property. Here is the description for both the object For 1st textbox: obj_Desc(―html tag‖).value= ―INPUT‖ obj_Desc(―name‖).value= ―txt_Name‖ obj_Desc(―index‖).value= ―0‖ For 2nd textbox: obj_Desc(―html tag‖).value= ―INPUT‖ obj_Desc(―name‖).value= ―txt_Name‖ obj_Desc(―index‖).value= ―1‖ We can use the same description for both the objects and still distinguish between both of them obj_Desc(―html tag‖).value= ―INPUT‖ obj_Desc(―name‖).value= ―txt_Name‖ When I want to refer to the textbox then I will use the inside a WebEdit object and to refer to the radio button I will use the description object with the WebRadioGroup object. Browser(―Browser‖).Page(―Page‖).WebEdit(obj_Desc).set ―Test‖ ‗Refers to the text box Browser(―Browser‖).Page(―Page‖).WebRadioGroup(obj_Desc).set ―Test‖ ‗Refers to the radio button But if we use WebElement object for the description then we must define the ―index‖ property because for a webelement the current description would return two objects. Hierarchy of test description: When using programmatic descriptions from a specific point within a test object hierarchy, you must continue to use programmatic descriptions from that point onward within the same statement. If you specify a test object by its object repository name after other objects in the hierarchy have been described using programmatic descriptions, QuickTest cannot identify the object. For example, you can use Browser(Desc1).Page(Desc1).Link(desc3), since it uses programmatic descriptions throughout the entire test object hierarchy. You can also use Browser("Index").Page(Desc1).Link(desc3), since it uses programmatic descriptions from a certain point in the description (starting Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 13
  • 14. VLearn Technologies www.mysaptesting.com from the Page object description). However, you cannot use Browser(Desc1).Page(Desc1).Link("Example1"), since it uses programmatic descriptions for the Browser and Page objects but then attempts to use an object repository name for the Link test object (QuickTest tries to locate the Link object based on its name, but cannot locate it in the repository because the parent objects were specified using programmatic descriptions). Getting Child Object: We can use description object to get all the objects on the page that matches that specific description. Suppose we have to check all the checkboxes present on a web page. So we will first create an object description for a checkboxe and then get all the checkboxes from the page Dim obj_ChkDesc Set obj_ChkDesc=Description.Create obj_ChkDesc(―html tag‖).value = ―INPUT‖ obj_ChkDesc(―type‖).value = ―checkbox‖ Dim allCheckboxes, singleCheckBox Set allCheckboxes = Browse(―Browser‖).Page(―Page‖).ChildObjects(obj_ChkDesc) For each singleCheckBox in allCheckboxes singleCheckBox.Set ―ON‖ Next The above code will check all the check boxes present on the page. To get all the child objects we need to specify an object description i.e. we can‘t use the string arguments that will be discussed later in the 2nd way of using the programming description. Possible Operation on Description Object Consider the below code for all the solutions Dim obj_ChkDesc Set obj_ChkDesc=Description.Create obj_ChkDesc(―html tag‖).value = ―INPUT‖ obj_ChkDesc(―type‖).value = ―checkbox‖ Q: How to get the no. of description defined in a collection A: obj_ChkDesc.Count ‗Will return 2 in our case Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 14
  • 15. VLearn Technologies www.mysaptesting.com Q: How to remove a description from the collection A: obj_ChkDesc.remove ―html tag‖ ‗would delete the html tag property from the collection Q: How do I check if property exists or not in the collection? A: The answer is that it‘s not possible. Because whenever we try to access a property which is not defined its automatically added to the collection. The only way to determine is to check its value that is use an if statement ―if obj_ChkDesc(―html tag‖).value = empty then‖. 2. By giving the description in form of the string arguments. This is a more commonly used method for Descriptive Programming. You can describe an object directly in a statement by specifying property:=value pairs describing the object instead of specifying an object‘s name. The general syntax is: TestObject("PropertyName1:=PropertyValue1", "..." , "PropertyNameX:=PropertyValueX") TestObject—the test object class could be WebEdit, WebRadioGroup etc…. Browser(―Browser‖).Page(―Page‖).WebRadioGroup(―Name:=txt_Name‖,‖html tag:=INPUT‖).set ―Test‖ If we refer to them as a web element then we will have to distinguish between the 2 using the index property Browser(―Browser‖).Page(―Page‖).WebElement(―Name:=txt_Name‖,‖html tag:=INPUT‖,‖Index:=0‖).set ―Test‖ ‗ Refers to the textbox Browser(―Browser‖).Page(―Page‖).WebElement(―Name:=txt_Name‖,‖html tag:=INPUT‖,‖Index:=1‖).set ―Test‖ ‗ Refers to the radio button Four different ways to launch your application are mentioned below: SystemUtil.Run SystemUtil.Run ( FileName, Parameters, Path, Operation ) FileName - The name of the file you want to run. Parameters - If the specified FileName is an executable file, use the Parameters argument to specify any parameters to be passed to the application. Path - The default directory of the application or file. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 15
  • 16. VLearn Technologies www.mysaptesting.com Operation - The action to be performed. If this argument is blank (""), the open operation is performed. The following operations can be specified for the operation argument of the SystemUtil.Run method: Example: SystemUtil.Run ―c:flight.exe‖ InvokeApplication InvokeApplication("Full URL as Parameter") Static and Dynamic Arrays: VBScript provides flexibility for declaring arrays as static or dynamic. A static array has a specific number of elements. The size of a static array cannot be altered at run time. A dynamic array can be resized at any time. Dynamic arrays are useful when size of the array cannot be determined. The array size can be changed at run time. Next we will deal with user defined procedures, functions and subroutines. I have seen an umpteen no of posts in every QTP group I visited asking about Test Automation frameworks. Here I would like to collate the useful inputs i received from various QTP groups and discussion forums. Data-driven Testing: Data-driven testing is a framework where test input and output values are read from data files (datapools, ODBC sources, csv files, Excel files, DAO objects, ADO objects, and such) and are loaded into variables in captured or manually coded scripts. In this framework, variables are used for both input values and output verification values. Navigation through the program, reading of the data files, and logging of test status and information are all coded in the test script Modularity-driven testing The test script modularity framework requires the creation of small, independent scripts that represent modules, sections, and functions of the application-under-test. These small scripts are then used in a hierarchical fashion to construct larger tests, realizing a particular test case. '#################################################### '# Descriptive Programming Objects '#################################################### '# Modifications: Enter changes to the code in this space Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 16
  • 17. VLearn Technologies www.mysaptesting.com '#################################################### '# Public Sub WebTableLink (strWebLink) '#################################################### '# Modifications: Enter changes to the code in this space '#################################################### Public Sub DPWebEdit (strWebEdit,strInValue) If strInValue <> "" Then Set obj_WebEdit = Description.Create obj_WebEdit ("Class Name").value = "WebEdit" obj_WebEdit ("name").value= strWebEdit Browser(strBrowser).page(strPage).Sync Browser(strBrowser).Page(strPage).WebEdit(obj_WebEdit).Set strInValue End If End Sub '######################################################## Public Sub DPWebEditSetSecure (strWebEdit,strInValue) If strInValue <> "" Then Set obj_WebEdit = Description.Create obj_WebEdit ("Class Name").value = "WebEdit" obj_WebEdit ("name").value= strWebEdit Browser(strBrowser).page(strPage).Sync Browser(strBrowser).Page(strPage).WebEdit(obj_WebEdit).SetSecure strInValue End If End Sub '######################################################## Public Sub DPWebList (strWebList,strInValue) If strInValue <> "" Then Set obj_WebList = Description.Create obj_WebList ("Class Name").value = "WebList" obj_WebList ("name").value= strWebList Reporter.Filter = 3 'Turn Reporting of Call TestListValues (obj_WebList,strInValue) 'Check for valid item in list Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 17
  • 18. VLearn Technologies www.mysaptesting.com Reporter.Filter = 0 'Turn Reporting on Browser(strBrowser).page(strPage).Sync Browser(strBrowser).Page(strPage).WebList(obj_WebList).Select strInValue End If End Sub '######################################################## Public Sub DPRadioGroup (strWebRadioGroup,strInValue) Set obj_WebRadioGroup = Description.Create obj_WebRadioGroup ("Class Name").value = "WebRadioGroup" obj_WebRadioGroup ("name").value= strWebRadioGroup Browser(strBrowser).page(strPage).Sync Browser(strBrowser).Page(strPage).WebRadioGroup(obj_WebRadioGroup).Sele ct strInValue End Sub '#################################################### Public Sub DPWebImage (strImage) Set obj_Image = Description.Create obj_Image ("Class Name").value = "Image" obj_Image ("name").value= strImage Browser(strBrowser).page(strPage).Sync Browser(strBrowser).Page(strPage).Image(obj_Image).Click '6,7 End Sub '#################################################### Public Sub DPWebCheckBox (strWebCheckBox,strInValue) Set obj_WebRadioGroup = Description.Create obj_WebCheckBox ("Class Name").value = "WebCheckBox" obj_WebCheckBox ("name").value= strWebRadioGroup Browser(strBrowser).page(strPage).Sync Browser(strBrowser).Page(strPage).WebCheckBox(obj_WebCheckBox).Select strInValue Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 18
  • 19. VLearn Technologies www.mysaptesting.com End Sub '#################################################### Public Sub DPWebLink (strWebLink) Set obj_WebLink = Description.Create obj_WebLink ("Class Name").value = "Link" obj_WebLink ("name").value= strWebLink Count = 1 Do until Browser(strBrowser).Page(strPage).Link(obj_WebLink).Exist if Browser(strBrowser).Page(strPage).Link(obj_WebLink).Exist Then Exit Do End If Count = Count + 1 If Count = 20 Then Exit Do end if Loop Browser(strBrowser).Page(strPage).Link(obj_WebLink).Click End Sub '#################################################### Public Sub DPWebButton (strWebButton) Set obj_WebButton = Description.Create obj_WebButton ("Class Name").value = "WebButton" obj_WebButton ("name").value= strWebButton Browser(strBrowser).page(strPage).Sync Browser(strBrowser).Page(strPage).WebButton(obj_WebButton).Click End Sub Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 19
  • 20. VLearn Technologies www.mysaptesting.com '#################################################### ' Close all opened browsers ‗#################################################### Public Function CloseBrowsers If Browser("micclass:=Browser").Exist (0) Then Browser("micclass:=Browser").Close End If While Browser("micclass:=Browser", "index:=1").Exist (0) Browser("index:=1").Close Wend If Browser("micclass:=Browser").Exist (0) Then Browser("micclass:=Browser").Close End If End Function ‗##################################################### Set myBrowser = Description.Create myBrowser("version").value = "internet explorer 7" Set eachBrowser = Desktop.ChildObjects(myBrowser) b= eachBrowser.count() msgbox "No of Windows Browsers Opened" & VBNewLine &b For i = 1 to b - 1 msgbox "Browser Names" &eachBrowser(i).getroproperty("text") eachBrowser(i).close Next ‗#################################################### ‗ Launch Application ' returns - always returns true ‗#################################################### Public Function Launch (apptype, val) If "website" = apptype Then thirdlevel = "" Report micPass, "Initialize", "Initializing Framework" level = split(webLevels, leveldelimiter, -1, 1) desc = split(webLevelsDesc, leveldescdelimiter, -1, 1) object = split(objects, objectdelimiter, -1, 1) objectDescription = split(objectsDescription, objectsDescriptiondelimiter, -1, 1) CloseBrowsers Set IE = CreateObject("InternetExplorer.Application") Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 20
  • 21. VLearn Technologies www.mysaptesting.com IE.visible = true IE.Navigate val While IE.Busy wait 1 Wend End If initialized = true Launch = true End Function ‗#################################################### ‗ WebElement Items ‗#################################################### Set oDesc = Description.Create() oDesc("Class Name").Value = "WebElement" oDesc("Class").Value = "hp_hclist_box" rc = Browser("WebMD - Better information.").Page("WebMD - Better information.").WebElement(oDesc).GetROProperty("innertext") sp = Split(rc, " ") Msgbox sp(4) ‗#################################################### Set Desc= description.Create() desc("micclass").value ="WebCheckBox" Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc) s=data.count() msgbox "Buttons" & VBNewLine &s For i = 0 to s - 1 msgbox data(i).getroproperty("name") Next ‗#################################################### Set Desc= description.Create() desc("micclass").value ="WebEdit" Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc) s=data.count() msgbox "Buttons" & VBNewLine &s Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 21
  • 22. VLearn Technologies www.mysaptesting.com For i = 0 to s - 1 msgbox data(i).getroproperty("name") Next ‗#################################################### Set Desc= description.Create() desc("micclass").value ="WebRadioButton" Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc) s=data.count() msgbox "Buttons" & VBNewLine &s For i = 0 to s - 1 msgbox data(i).getroproperty("name") Next ‗#################################################### Set Desc= description.Create() desc("micclass").value ="WebButton" Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc) s=data.count() msgbox "Buttons" & VBNewLine &s For i = 0 to s - 1 msgbox data(i).getroproperty("name") Next ‗#################################################### ‗ Links and URL‘s ‗#################################################### Set oDesc = Description.Create() oDesc("html tag").Value = "A" Set rc = Browser("Google").Page("Google").ChildObjects(oDesc) num = rc.Count() For i=0 to num-1 tag = rc(i).GetROProperty("innertext") href = rc(i).GetROProperty("href") Reporter.ReportEvent 0, "Links in Page", "name: " & tag &"; url:" & href Next ‗#################################################### ‗ Automation Object Model Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 22
  • 23. VLearn Technologies www.mysaptesting.com ‗#################################################### Dim App 'As Application Set App = CreateObject("QuickTest.Application") App.Launch App.Visible = True App.Test.Settings.Launchers("Web").Active = False App.Test.Settings.Launchers("Web").Browser = "IE" App.Test.Settings.Launchers("Web").Address = "http://newtours.mercury.com " App.Test.Settings.Launchers("Web").CloseOnExit = True App.Test.Settings.Launchers("Windows Applications").Active = False App.Test.Settings.Launchers("Windows Applications").Applications.RemoveAll App.Test.Settings.Launchers("Windows Applications").RecordOnQTDescendants = True App.Test.Settings.Launchers("Windows Applications").RecordOnExplorerDescendants = True App.Test.Settings.Launchers("Windows Applications").RecordOnSpecifiedApplications = True App.Test.Settings.Run.ObjectSyncTimeOut = 20000 App.Test.Settings.Run.DisableSmartIdentification = False App.Test.Settings.Run.OnError = "Dialog" App.Test.Settings.Resources.Libraries.RemoveAll App.Test.Settings.Resources.Libraries.Add("E:childobject3.vbs") App.Test.Settings.Resources.Libraries.Add("E:WriteToexcel.vbs") App.Test.Settings.Resources.Libraries.Add("E:SugarCRM.vbs") App.Test.Settings.Web.BrowserNavigationTimeout = 60000 App.Test.Settings.Web.ActiveScreenAccess.UserName = "" App.Test.Settings.Web.ActiveScreenAccess.Password = "" App.Test.Settings.Recovery.Enabled = True App.Test.Settings.Recovery.SetActivationMode "OnError" App.Test.Settings.Recovery.Add "E:aaaa.qrs", "Recov_Popup", 1 App.Test.Settings.Recovery.Item(1).Enabled = True App.Test.Environment.LoadFromFile("E:InputDataSheet.ini") ' ************************************************** Function Library ‗******************************** ' Registering both functions RegisterUserFunc "WebTable", "ObjectsByMicClass", "ObjectsByMicClass" Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 23
  • 24. VLearn Technologies www.mysaptesting.com RegisterUserFunc "WebTable", "ItemByKeyColumn", "ItemByKeyColumn" ' Function: ObjectsByMicClass ' Description: Returns a collection of objects all the objects in a ' WebTable that have the specified MicClass ' Return Value: A Collection of Objects ' Arguments: ' Obj - Test Object (WebTable) ' micClass - The micClass of the objects to retrieve '################################################## Function ObjectsByMicClass(Obj, micClass) Set Table = Obj ' Create a collection object to hold the items Set objCollection = CreateObject("Scripting.Dictionary") ' Go over all the cells in the table, and look for objects with the specified micClass For row=1 to Table.RowCount ColumnCount=Table.ColumnCount(row) For col=1 to ColumnCount For ItemIndex=0 to Table.ChildItemCount(row, col, micClass)-1 Set childItem=Nothing Set childItem = Table.ChildItem(row, col, micClass, ItemIndex) If Not childItem is Nothing Then ' If the cell contains a micClass object, add it to the collection ItemKey = objCollection.Count + 1 objCollection.Add ItemKey, childItem End if Next Next Next Set ObjectsbyMicClass = objCollection End Function ‗####################################################### ' Function: ItemByKeyColumn ' Description: Returns an item from a column, based on the value of a ' key column ' Return Value: Object ' Arguments: ' Obj - Test Object (WebTable) ' KeyColumnIndex - Index of the KeyColumn ' KeyColumnValue - Value to search for in the key column ' KeyItemIndex - Index of the value in the key column (if there is ' more than one). If 0, the first item will be used. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 24
  • 25. VLearn Technologies www.mysaptesting.com ' TargetColumnIndex - Column from which to retrieve the target item ' micClass - The micClass of the target item ' TargetItemIndex - Index of the target item to retrieve (if there is ' more than one). If 0, the first item will be used. ‗####################################################### Function ItemByKeyColumn(Obj, KeyColumnIndex, KeyColumnValue, KeyItemIndex, TargetColumnIndex, micClass, TargetItemIndex) Table = Obj rowCount = Table.RowCount ' if TargetItemIndex was not specified, use 1 as deafult If TargetItemIndex < 1 Then TargetItemIndex = 1 End If ' if KeyColumnIndex was not specified, use 1 as default If KeyItemIndex < 1 Then KeyItemIndex = 1 End If ' look for KeyColumnValue in the key column to determine which ' row to retrieve the targe item from Row = 0 foundIndex = 0 While Row <= RowCount And foundIndex < KeyItemIndex Row = Row + 1 CellData = Table.GetCellData(Row, KeyColumnIndex) If CellData = KeyColumnValue Then foundIndex = foundIndex + 1 End If Wend If foundIndex < KeyItemIndex Then Exit Function End If ' Now that we know the row, retrieve the item (according to its micClass) ' from the target column. ChildItemsCount = Table.ChildItemCount(Row, TargetColumnIndex, micClass) If ChildItemsCount > =1 And ChildItemsCount >= TargetItemIndex Then Set GetItemByKeyColumn = Table.ChildItem(Row, TargetColumnIndex, micClass, TargetItemIndex-1) End If End Function Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 25
  • 26. VLearn Technologies www.mysaptesting.com ' ************************************ ' Using the ItemByKeyColumn Function ‗################################################## Set obj = Browser("Table with objects").Page("Itenerary: Mercury Tours").WebTable("Acapulco to Zurich").ItemByKeyColumn(1,"FLIGHT",2,3,"WebElement",1) msgbox obj.GetROProperty("innerhtml") ' Using the ObjectsByMicClass function Set collection = Browser("Browser").Page("Page").WebTable("Table").ObjectsByMicClass("WebCheck Box") For i=1 to collection.count If collection(i).GetROProperty("checked") Then collection(i).Set "OFF" Else collection(i).Set "ON" End If Next ‗########################################## ' Example 1 ‗############################################# Function SendMail(SendTo, Subject, Body, Attachment) Set ol=CreateObject("Outlook.Application") Set Mail=ol.CreateItem(0) Mail.to=SendTo Mail.Subject=Subject Mail.Body=Body If (Attachment <> "") Then Mail.Attachments.Add(Attachment) End If Mail.Send ol.Quit Set Mail = Nothing Set ol = Nothing End Function Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 26
  • 27. VLearn Technologies www.mysaptesting.com ‗################################################## ' Example 2 ‗############################################### Function SendMail(SendFrom, SendTo, Subject, Body) Set objMail=CreateObject("CDONTS.Newmail") ObjMail.From = SendFrom ObjMail.To = SendTo ObjMail.Subject = Subject ObjMail.Body = Body ObjMail.Send Set objMail = Nothing End Function ‗############################ ‗ InString ‗############################ Dim SearchString, SearchChar, MyPos SearchString ="XXpXXpXXPXXP" ' String to search in. SearchChar = "P" ' Search for "P". MyPos = Instr(4, SearchString, SearchChar,1) ' A textual comparison starting at position 4. Returns 6. msgbox mypos MyPos = Instr(1, SearchString, SearchChar, 0) ' A binary comparison starting at position 1. Returns 9. msgbox mypos MyPos = Instr(SearchString, SearchChar) ' Comparison is binary by default (last argument is omitted). Returns 9. msgbox mypos MyPos = Instr(1, SearchString, "W") ' A binary comparison starting at position 1. Returns 0 ("W" is not found). msgbox mypos ‗######################################## QTP 10.0 Features 1. QC integration – Which (mostly) down to Resource Management and Source Resource Management: Although you could keep saving your resources as attachments (for backward compatibility), you can upgrade to a new, fuller mode of work. This includes a whole new Resource module in QC, and allows for some very neat tricks on Function Libraries, Tests and Object Repositories etc. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 27
  • 28. VLearn Technologies www.mysaptesting.com It should be noted, though, that other types of files (external excel / XML files, for example), remain as unmanaged attachments. Resources have full meta-data, and have a special view pane – you can view Object- Repositories, data-tables, and function libraries code right from QC. This looks quite nice; however, I missed the ability to open the resource for editing in QTP with a single click. Automatically updated path system – When moving a function library between folders, QC will automatically update all the tests which depend on it, so they will use it at its new location. This makes the once critical problem of hard-path-link a non-issue. Very impressive. A word about the user interface – when opening a QC resource / test from QTP, the file dialog shows the items with large, crisp icons, very similar to Word‘s save dialog. Everything is very clear and intuitive, as is the ability to revert back to saving / opening a test from the File-System. What about your existing projects? Well, when upgrading to QC 10, a wizard will automatically transform all you unmanaged attachments to managed resources (if you‘d like it to). Source Control: This includes a very rich line of features which are very well executed, and effectively allow you to manage a QTP project as any other code project: First, the basics – QTP and QC 10 introduce a new Check-in/Check-out ability. It works similar to what you‘d expect – a checked out item will be locked to all other users, and you can immediately know an item‘s status by looking at its icon (green/red locks). An interesting twist regards manner in which a test / resource is locked – it‘s at the user level (not the local machine level). This means that if you log into QC from a different machine, you‘ll have access to all your checked-out items, even if they were originally checked-out on a different local machine. The ability is implemented very well, both from QTP‘s end, as well as from QC‘s end. A major enabler for source control is the new versioning feature of QC. It manifests both with a kind of instant versioning for a single resource, and with a project-wide ―base-line version‖, which allows you to revert your entire test framework to a previous version. Both types of versioning are supported by a surprisingly robust comparison mechanism. You can select two versions of a resource / test, a see a very detailed comparison of their respective changes. For function libraries this amounts to a ―simple‖ text comparison, but this feature truly shines in full test comparisons. It will present changes in the different actions and their resources (data-table, object repositories, inner code), as well as in the global test-settings, associated function Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 28
  • 29. VLearn Technologies www.mysaptesting.com libraries, recovery scenarios, and pretty much anything you could think of. The ability to drill-down into the data is very impressive; and the effective, concise manner in which the data is presented in the top level view is downright unbelievable. A nice touch is a small screen capture of the change, in case you don‘t remember what ―Run all rows – >Changed into-> Run a single iteration only‖ means (for example). Now to the versioning mechanism itself: Whenever you check and item in, a new ―version‖ will be created, and you‘ll be able to revert back to it with ease. As this is a version of a single, isolated resource, I found it better to refer to it as a SnapShot – my terminology, not HP‘s. The snapshots are visible both from QC and QTP, and you can very easily choose which one to open. This allows you a kind of an instant undo to a single file which worked in the past, but is broken in the present. The second mechanism presents the ability to select several folders, and create a full blown ―base-line version‖ of them and everything they relate to. Defects, inner- connections, tests, history data, resources – all these and more will be ―frozen‖ and preserved as a base-line. You can then choose to revert back to an old baseline, and truly regain all the abilities that were present at that time. As all the resources, attachments tests and reports will be restored, you don‘t have to worry about forgetting anything, or leaving some minor resource at the wrong version. This is versioning with a vengeance – it allows you to track the AUT‘s versions with your own automation versions, enabling, among other things, running automation efforts on several AUT versions at once. For conclusion – The new abilities inherit in the connection of QTP and QC Atlantis are (or at least seem to be) revolutionary. At last, QTP projects can be natively managed as code projects; and some of the supporting infrastructure is surprisingly robust and useful. As a ―raving‖ anti-QC-ist, I must admit QC Atlantis seem tempting, and for me, that‘s saying a lot! I must contrast these very positive impressions with some dire problems: The versioning feature will put a stain on your storage capabilities (though less than creating a simple copy the data); all these wonderful features are available only if both your QTP and QC are upgraded to Atlantis; and a critical issue – Previous versions of QTP will not work with QC Atlantis. Yes, this is not a misunderstanding, there is no backward compatibility between QC to QTP (although QTP Atlantis will work with any version of QC). On top of these, performance may become an issue, though we were unable to precisely evaluate it, as our QC was installed on an already overtaxed personal computer. 2. Report improvements The native QTP report includes several new improvements: Tracability: Selecting a report-node will automatically focus on the relevant code-line in the script. This may sound like a cool feature at first, but a closer look revels that it only works for actions (not functions); and that in any case, using a custom report function (as Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 29
  • 30. VLearn Technologies www.mysaptesting.com most of us do) completely nullifies the feature (since you‘re always at the same code line when performing the report). Exporting: The report now has a two-click export feature, which comes with a built-in ability to export to Word and PDF documents, as well as the ability to export through a custom XSL of your choosing. You can choose between Short and Long formats (corresponding to PShort.XSL and PDetails.XSL) to get a document relevant to your needs. This blessed feature has one major flaw – It has no API support. This means that you cannot export the results automatically at the end of a test run, which is quite a miss, to say the least. Resource Monitor: QTP can now hook onto the Windows Performance Monitor and present it as part of the test results. You can select several counters to monitor (e.g. GDI objects, memory usage etc.), and the monitor output graph will be available in special tab in the result window. You can set up a ―checkpoint‖ for a counter (e.g. Fail the test if there are more than 500 GDI objects), facilitating a kind of a poor-man‘s version of load- testing. The fact that clicking the graph focuses on the relevant test step (as well as the other way around), provides an effective way to quickly locate problematic actions and resource usage spikes. This feature is well executed, and HP has even went the extra mile and added several unified counters that simplify monitoring the application. However, the fact that you can only monitor one process per test may leave the more advanced users with their own implementation of a resource monitor. Considering the simple design and implementation of this feature, I believe it will become a popular tool in every automation project that uses QTP 10. Native image integration: This is a small, yet long-awaited feature. The ReportEvent command now has a new optional parameter – you can specify a path to a picture file, and it will be attached to the report node of the current event. When used in conjunction with the CaptureBitmap method, this presents a technical, yet revolutionary upgrade to the native QTP report. Finally, users can attach screenshots to their custom report events without any special functions or frameworks. 3. IDE improvements Intellisense: Perhaps I‘m doing injustice to the other features, but the IDE improvements, and the new intellisense engine in particular, is what got me excited about QTP Atlantis. So I was pretty much on the edge of my seat when we‘ve gotten to this last part of the presentation. I‘m very pleased to say that it was every bit what I imagined it to be, with the exception of intellisense for VBScript classes, and intellisense in the debug viewer (both won‘t be implemented). Luckily, there are workarounds for both these issues through the PDM hack (for debug intellisense), and WSC registration (for VBScript Class intellisense through COM). Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 30
  • 31. VLearn Technologies www.mysaptesting.com We saw a demonstration of how creating an Excel COM object provided a full intellisense for all its methods and properties, for as many levels as we‘d like. Every variable set to this object also presented the same intellisense, and the autocomplete caught every variable we‘ve defined or used (yes, there‘s autocomplete for variable names!). The autocomplete and intellisense features worked smoothly, and presented no apparent performance issue. It‘s still left to be seen how it functions in a real script, with hundreds / thousands code lines. Tasks and Comment Pane: QTP has a new bottom pane which includes a run-of-the- mill implementation of tasks and comments. Double clicking a comment will take you to the relevant code-line, though strangely enough, you cannot do this with a task (i.e., tasks cannot be linked to specific code lines). It was mentioned that enabling the comments feature for function libraries may sometimes cause performance issues. Dynamic code-zones: When standing inside a code block like If, While, Do, etc, the IDE will mark the relevant block with blue lines, making it much more easy to make your way inside nested blocks of this sort (somewhat like highlighting left-right bracket pairs). While it will surely make our life easier, a more robust mechanism like collapsible code- regions is still needed. Custom Toolbars: You can add your own buttons and commands to QTP toolbars and menus. While this does not include inner-QTP macros, you can assign a program / File shortcut to your own button / menu item. It‘s nice, but i think it will only gain power once QTP‘s inner mechanisms will be bindable to such buttons. 4. Miscellaneous features General look and feel: QTP has departed from the old Tab layout, and into the more modern settings-tree layout (similar to Office, EMule, Adobe, and pretty much every other program). It‘s nice, but nothing as groundbreaking as the transformation in QTP 9.0. Bitmap Checkpoint improvements: These include presenting the size of the selected area when choosing to check only a part of an Image, as well as the ability to plug your own custom DLL for comparing images. I suppose that there are some projects for which this can actually be quite revolutionary. Another great addition is the ability to see the difference between the expected and actual bitmaps in a separate tab. API changes: QTP Automation API will receive several upgrades, the most noteworthy of which is the ability to read and write that code of the test you‘ve opened. Writing the code will not effect an ongoing run-session (there goes my ambitious try-catch implementation for QTP), but it still opens the door for some creative tweaks and hacks… Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 31
  • 32. VLearn Technologies www.mysaptesting.com Saving a test with all linked resources: For those who‘re working with QC, this is a real blessing. Up until QTP 10, copying a QC saved test to your local system was a hellish procedure of changing each and every resource and action reference to your local file- system. QTP and QC Atlantis offer a one-click solution for copying a test and all its resources to your local file-system, and automatically changing all the references accordingly. Dynamic Action Call: I‘ve saved the best for last. QTP 10 presents a new native command – LoadAndRunAction. It allows you to load external actions during the run- session, without having to associate them with your test beforehand. All the run-time debug abilities will be available for these dynamically added actions, so you‘re not giving anything up by using this feature. I think it‘s a long awaited feature, and a well executed one. What surprises are in store in QTP? 1. Stronger than ever Quality Center integration. An external resources manager: No more hellish workarounds for saving resources as attachments (function libraries, shared OR etc.). From now on, an external resource will become a fully-fledged QC entity, with its own meta-data (which means it‘s searchable!), fields and versions. Versions: QTP tests and all the external resources will now have full versioning support. This will include reverting back to an old version (immediately, from the open file menu if you‘d wish), as well as comparing versions - from the attached resources of the tests, though the objects in the SOR, to the changed lines in the function library files. Versioning is available for manual tests as well, thus allowing for a very smooth integration of automation with manual testing. I must say that this is one feature I would consider migrating my tests to Quality Center for. 2. Intellisense It’s a known fact that the QTP intellisense popup can be quite annoying – just when you‘re dealing with a very complex .Net/Java object, the window proves to be too narrow to fully display the object‘s properties and methods. Tarun has continued his great work on providing productivity enhancing tools and code libraries, and has posted a resizer for the intellisense popup window. COM objects intellisense - for example, if you‘d use an Excel.Application object, you‘d see all its inner methods and properties, up to the N-th level Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 32
  • 33. VLearn Technologies www.mysaptesting.com Variable bridge intellisense - which means that if you‘d assign some object to a variable, the variable will have the same intellisense as the original object These three abilities present the bulk of abilities you would like to have in an intellisense system. It‘s not that there isn‘t room for more abilities, but these three are sure to make working with the new QTP an entirely different experience. It‘s unclear if this would include auto-complete for script variables, but my guess is that it will. I was told that all these intellisense features will not apply to VBScript classes, but only to COM objects and RO objects. As one who relays heavily on my own VBScript classes, I was very disappointed. However, it must be said that not a lot of QTP programmers work with their own VBScript classes, so it‘s a shortcoming that only a handful of people should mind. 3. More IDE improvements These include the integration of a comment driven To-Do pane, as well as a jump-to- comment ability. Not anything out of the ordinary, but a blessed addition to the very limited QTP IDE environment. Further more, and three versions too late – Toolbar customizations! You could rearrange existing icons, as well as add calls to external commands (e.g. launch the AUT) as separate icons. 4. Reporter improvements The reporter will now be able to natively export the HTML to PDF (and perhaps some other formats). A completely new feature will be an integrated performance counter which would monitor the computer resources throughout the test. This, combined with a new ability to jump to the relevant script live from the report will facilitate a whole new level of testing – almost like a poor-man‘s version of a load test. However, there‘s still no word on filtering, searching, and running several reporters concurrently (although the infrastructure exists since QTP 8.2). Another overlooked issue is the report‘s availability in case of a mid-run crash. 5. New checkpoint abilities You could set up a whole new kind of checkpoint for the computed resources – for example, fail the test if the application uses more than 500 GDI objects, and other parameters. This ability is closely coupled with the new resource monitor report. Another welcomed improvement is the ability to hook up your own algorithm for image comparison straight into QTP‘s native image checkpoint mechanism. 6. New environments Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 33
  • 34. VLearn Technologies www.mysaptesting.com It will include at least: Windows XP SP3, Windows 2008, Windows Vista SP1, IE8, FireFox 3, the new cirtrix client. PRODUCT ENHANCEMENTS Upgrade from QuickTest 9.5 - If you have QTP 9.5 Installed on the system, you can choose to upgrade to version 10.0. This will allow you to preserve some of the configuration settings and options that you already have set up. Improved IntelliSense Functionality - QTP now provides full IntelliSense for objects created by a step or function (i.e. objects created by Create Object method), variables to which an object is assigned, reserved objects, COM objects and properties that return objects. In addition, Intellisense sentence completion now provides lists of local variables. Added Control for Editing and Managing Actions in Automation Scripts - The QTP Automation Object Model has a new set of objects and methods for manipulating test actions and action parameters. You can use automation scripts to create new actions, modify and validate the syntax of action scripts, create and modify action parameters, and more. Improved Debugger Pane Design and Functionality - The Debug Viewer pan has a new look, including icons to help you identify the type of information displayed. New Object Identification Solutions in Maintenance Run Mode - In addition to helping you update your steps and object repositories when objects in application change, the Maintenance Run Wizard can now help you solve problems dealing with test failures due to missing objects, or objects that can only be recognized via Smart Identification. Additional Configuration Settings for Text Recognition Mechanism - You can now set all text recognition configuration settings from the QuickTest Options Dialog Box New Look for Options, Settings, and File Dialog Boxes - The QuickTest Options and Settings dialog boxes have changed from their former ta-based design to a more easily navigable tree-based structure. The tree contains only the options relevant for the add-ins that are currently loaded. QuickTest Toolbar Customization Options - You can use the new Customize Dialog box to customize the appearance of existing menus and toolbars, and to create your own user-defined menus, toolbar buttons, and shortcuts. Improved Web Extensibility - QTP Web Add-in Extensibility enables you to develop packages that provide high level support for thir-party and custom Web controls that are not supported out-of-the-box by the Web Add-in. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 34
  • 35. VLearn Technologies www.mysaptesting.com NET Add-in and Extensibility Improvements - The .NET Add-in has several new objects and methods, including the SwfPropertyGrid test object (for working with .NET Windows Forms property grids), GetErrorProviderText method and ErrorProviderText identification property. New Terminal Emulator Configuration Validation - The new Terminal Emulator pane of the Options dialog box now includes a Validate button. When you click this button, QTP checks the current configurations of the selected emulator. If a problem is detected, a brief description is displayed in the pane. NEW SUPPORTED OPERATING SYSTEMS AND ENVIRONMENTS  Microsoft Windows 2008 Server 32-bit Edition  Microsoft Windows 2008 Server 64-bit Edition  Microsoft Windows Vista, Service Pack 1, 32-bit Edition  Microsoft Windows Vista, Service Pack 1, 64-bit Edition  Microsoft Windows XP Professional 32-bit Edition -- Service Pack 3  Citrix Presentation Server 4.5  Microsoft Internet Explorer 8, Beta 2  Mozilla firefox 3.0.x  Delphi: IDE, versions 6, 7, and 2007 (for controls based on the Win32 VCL library)  SAP: CRM 2007 (For controls that support test mode enhancements  Java: IBM 32-bit JDK 1.5.x, SWT toolkit version 3.4  Java Extensibility: Eclipse IDE 3.4 NET: .NET Framework 3.5 -- Service Pack 1 // ** TO Count Broken Links in Web Page Using VBScript 1. Set obj=Browser(―name:=Blackboard.*‖).Page(―title:=Blackboard.*‖). Frame(―name:=main.*‖).object.all.tags(―IMG‖) Msgbox obj.length For each element in obj s1=element.nameProp If Browser().Page().Frame().Image(―filename:=―&s1,‖index:=0‖).exist(0) then If Browser().Page().Frame().Image(―filename:=―&s1,‖index:=0‖). Object.complete=―True‖ then Msgbox ―pass‖ Else Msgbox ―fail‖ End if End if Next // TO Count Broken Links in Web Page Using VBScript Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 35
  • 36. VLearn Technologies www.mysaptesting.com If Browser(―my_web‖).Page(―GlobalPage‖).Link(―Logout‖). GetROProperty(―href‖)<>―javascript:__doPostBack('ctl00$lkLogout','Logout')‖ Then Reporter.ReportEvent micFail ,‖href‖,Browser(―my_web‖). Page(―GlobalPage‖).Link(―Logout‖).GetROProperty(―href‖) End If // // TO Count Broken Links in Web Page Using VBScript Verify Broken Links using VBscript (without checkpoints) One of my friends just wanted to check for the broken links (both textlinks and image links) on the page with VB script and not the checkpoints. Set obj=Browser("name:=Blackboard.*").Page("title:=Blackboard.*"). Frame("name:=main.*").object.all.tags("IMG") Msgbox obj.length For each element in obj s1=element.nameProp If Browser().Page().Frame().Image("filename:="&s1,"index:=0").exist(0) then If Browser().Page().Frame().Image("filename:="&s1,"index:=0").Object.complete="True" then Msgbox "pass" Else Msgbox "fail" End if End if Next // TO Count Broken Links in Web Page Broken Links also sometimes called as dead links are those links on the web which are permanently unavailable. Commonly found, 404 error is one example of such link. Now the question is how can we identify broken links with the help of QTP during the run session? There can be two ways to do this: 1. Using Automatic Page checkpoint. 2. By manually creating a Page checkpoint. Using Automatic Page checkpoint: Go to Tools > Options > Web > Advanced and check the two boxes labeled ―Create a checkpoint for each page while recording‖ and ―Broken Links‖ Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 36
  • 37. VLearn Technologies www.mysaptesting.com Now every time you record a new page, QTP will automatically include a checkpoint for broken links. By manually creating a Page checkpoint: QTP does not provide a direct menu option to incorporate a page checkpoint. You need to take the help of standard checkpoint. Start recording session > Insert > Checkpoint > Standard Checkpoint (OR press F12). Place and click the hand pointer anywhere on your web page. Select Page (As shown in picture below) and Click OK. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 37
  • 38. VLearn Technologies www.mysaptesting.com You will get the following screen: Check ―Broken Link‖ checkbox down below and click OK. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 38
  • 39. VLearn Technologies www.mysaptesting.com Now, how will you verify page checkpoint and hence broken links? Run the above script. Go To Test Results > Your Check Point. Check the status of all links under ―Broken Links Result‖ If you want to verify links pointing only to the current host check the box titled “Broken Links- check only links to current host” under Tools > Options > Web. Similarly if you want to verify links pointing to other hosts as well, uncheck it. // TO Count No of Links in Web Page How to return the total number of links in a webpage and their names and URLs Solution: Use ChildObjects to get the link collection, then retrieve the properties Use the ChildObjects method to retrieve all the links on the specified webpage. Once you have the collection, you can use the GetROProperty method to retrieve the innertext (name) and href (URL) values. object.ChildObjects (pDescription) Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 39
  • 40. VLearn Technologies www.mysaptesting.com Example: ‗ The sample was created against www.google.com Set oDesc = Description.Create() oDesc(―html tag‖).Value = ―A‖ Set rc = Browser(―Google‖).Page(―Google‖).ChildObjects(oDesc) num = rc.Count() For i=0 to num-1 tag = rc(i).GetROProperty(―innertext‖) href = rc(i).GetROProperty(―href‖) Reporter.ReportEvent 0, ―Links in Page‖, ―name: ― & tag & ―; url: ― & href Next // TO Count No of Links in Web Page Simple Code To Check All Links Set oDesc = Description.Create() oDesc(―html tag‖).Value = ―A‖ Set rc = Browser(―title:=.*‖).Page(―title:=.*‖).ChildObjects(oDesc) num = rc.Count() For i=0 to num-1 Set rc = Browser(―title:=.*‖).Page(―title:=.*‖).ChildObjects(oDesc) ref = rc(i).GetROProperty(―href‖) Browser(―title:=.*‖).Page(―title:=.*‖).link(―text:=.*‖,‖index:=―&i).click Browser(―title:=.*‖).sync title1=Browser(―title:=.*‖).getRoproperty(―title‖) MsgBox title1 Browser(―title:=.*‖).navigate(ref) ‘Navigates to the url taken from ―href‖ property Browser(―title:=.*‖).sync title2=Browser(―title:=.*‖).getRoproperty(―title‖) ‘get the tile of the tNavigated page MsgBox title2 If title1=title2 Then ‘condition to check for the targetted page and Navigated page Reporter.ReportEvent 0, ―Navigated To Correct Page‖,‖―&title1 ′Reports if correct else Reporter.ReportEvent 1,‖―&title1,‖―&title2 End If Browser(―title:=.*‖).back ‘Navigates back to main page Browser(―title:=.*‖).sync Next Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 40
  • 41. VLearn Technologies www.mysaptesting.com // Chaild Objects Set desc = Description.Create() Set col = Browser(―name:=Google‖).Page(―title:=Google‖).ChildObjects(desc) ct = col.Count() msgbox ct Set desc2 = Description.Create() desc2(―micclass‖).Value = ―WebElement‖ Set col2 = Browser(―name:=Google‖).Page(―title:=Google‖).ChildObjects(desc) ct2 = col.Count() msgbox ct2 Set desc3 = Description.Create() desc3(―html tag‖).Value = ―INPUT‖ Set col3 = Browser(―name:=Google‖).Page(―title:=Google‖).ChildObjects(desc) ct3 = col.Count() msgbox ct3 // Get Each Radio in RadioGroup And Check Set opt=Description.Create opt(―html tag‖).value=―INPUT‖ opt(―type‖).value = ―radio‖ Dim allOptions,all Set allOptions=Browser(―a‖).Page(―b‖).Frame(―c‖).ChildObjects(opt) all=allOptions.count MsgBox all for i= 0 to all eName=allOptions(i).getROProperty(―name‖) noofradio=allOptions(i).getElementsByName(eName).length for j= 0 to noofradio-1 radioname=allOptions(i).object.document.getElementsByName(eName).item(j).GetAdju centText(―afterend‖)allOptions(i).object.document.getElementsByName(eName).item(j). checked=true msgbox radioname next next // Copy an excel sheet to another excel Following is the code to copy the conntents of a sheet in one excel to another excel sheet Set objExcel = CreateObject(―Excel.Application‖) objExcel.Visible = True Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 41
  • 42. VLearn Technologies www.mysaptesting.com Set objWorkbook1= objExcel.Workbooks.Open(―C:Documents and Settingsmohan.kakarlaDesktop1.xls‖) Set objWorkbook2= objExcel.Workbooks.Open(―C:Documents and Settingsmohan.kakarlaDesktop2.xls‖) objWorkbook1.Worksheets(―Sheet1″).UsedRange.Copy objWorkbook2.Worksheets(―Sheet1″).Range(―A1″).PasteSpecial Paste =xlValues objWorkbook1.save objWorkbook2.save objWorkbook1.close objWorkbook2.close set objExcel=nothing //Compare 2 Excel sheets cell by cell This code will open two excel sheet and compare each sheet cell by cell, if any changes there in cells , it will highlight the cells in red color in the first sheet. Set objExcel = CreateObject(―Excel.Application‖) objExcel.Visible = True Set objWorkbook1= objExcel.Workbooks.Open(―C:Documents andSettingsmohan.kakarlaDesktopDocs1.xls‖) Set objWorkbook2= objExcel.Workbooks.Open(―C:Documents and Settingsmohan.kakarlaDesktopDocs2.xls‖) Set objWorksheet1= objWorkbook1.Worksheets(1) Set objWorksheet2= objWorkbook2.Worksheets(1) For Each cell In objWorksheet1.UsedRange If cell.Value <> objWorksheet2.Range(cell.Address).Value Then cell.Interior.ColorIndex = 3′Highlights in red color if any changes in cells Else cell.Interior.ColorIndex = 0 End If Next set objExcel=nothing // Excel Sorting By Row: Const xlAscending = 1 Const xlNo = 2 Const xlSortRows = 2 Set objExcel = CreateObject(―Excel.Application‖) objExcel.Visible = True Set objWorkbook = objExcel.Workbooks.Open(―C:Documents and Settingsmohan.kakarlaDesktopDocs1.xls‖) Set objWorksheet = objWorkbook.Worksheets(1) objWorksheet.Cells(1,1).activate Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 42
  • 43. VLearn Technologies www.mysaptesting.com Set objRange = objExcel.ActiveCell.EntireRow objRange.Sort objRange, xlAscending, , , , , , xlNo, , , xlSortRows set objExcel=nothing Excel Sorting By Colum : Const xlAscending = 1 ′represents the sorting type 1 for Ascending 2 for Desc Const xlYes = 1 Set objExcel = CreateObject(―Excel.Application‖) ‘Create the excel object objExcel.Visible = True ‘Make excel visible Set objWorkbook = _ objExcel.Workbooks.Open(―C:Documents and Settingsmohan.kakarlaDesktopDocs1.xls‖) ‘Open the document Set objWorksheet = objWorkbook.Worksheets(1) ‘select the sheet based on the index .. 1,2 ,3 … Set objRange = objWorksheet.UsedRange ‘which select the range of the cells has some data other than blank Set objRange2 = objExcel.Range(―A1″) ‘ select the column to sort objRange.Sort objRange2, xlAscending, , , , , , xlYes set objExcel=nothing // DELETE ROWS FROM XL SHEET Public Function BIP_xlsDeleteRowRange (sSrcPath, sDestPath, sStartRow, sEndRow) ‗Create Excel object Set oExcel = CreateObject(―Excel.Application‖) ‗Sets the application to raise no app alerts ‗In this case it will allow a file overwrite w/o raising a ‗yes/no‘ dialog oExcel.DisplayAlerts = False ‗Open Book in Excel Set oBook = oExcel.Workbooks.Open(sSrcPath) ‗Set Activesheet Set oSheet = oExcel.Activesheet ‗Delete row range oSheet.Rows(sStartRow +‖:‖+ sEndRow).Delete ‗Save new book to Excel file oBook.SaveAs (sDestPath) ‗Close the xls file oExcel.Workbooks.Close() Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 43
  • 44. VLearn Technologies www.mysaptesting.com End Function // DELETE COLUMNS FROM XL SHEET Public Function BIP_xlsDeleteColumnRange (sSrcPath, sDestPath, sStartCol, sEndCol) ‗Create Excel object Set oExcel = CreateObject(―Excel.Application‖) ‗Sets the application to raise no app alerts ‗In this case it will allow a file overwrite w/o raising a ‗yes/no‘ dialog oExcel.DisplayAlerts = False‗Open Book in Excel Set oBook = oExcel.Workbooks.Open(sSrcPath) ‗Set Activesheet Set oSheet = oExcel.Activesheet ‗Delete row range oSheet.Columns(sStartCol + ―:‖ + sEndCol).Delete ‗Save new book to Excel file oBook.SaveAs (sDestPath) ‗Close the xls file oExcel.Workbooks.Close() End Function // ADODB CONNECTION TO READ DATA FROM EXCEL SHEET Function obj_UDF_getRecordset (strFileName, strSQLStatement) Dim objAdCon, objAdRs Set objAdCon = CreateObject(―ADODB.Connection‖) objAdCon.Open ―DRIVER={Microsoft Excel Driver (*.xls)};DBQ=―&strFileName & ―;Readonly=True‖ If Err <> 0 Then Reporter.ReportEvent micFail,‖Create Connection‖, ―[Connection] Error has occured. Error : ― & Err Set obj_UDF_getRecordset = Nothing Exit Function End If Set objAdRs = CreateObject(―ADODB.Recordset‖) objAdRs.CursorLocation=3 ‗ set the cursor to use adUseClient - disconnected recordset objAdRs.Open strSQLStatement, objAdCon, 1, 3 MsgBox objAdRs.fields(4).name While objAdRs.EOF=false For i=0 to 4 varConcat= varConcat&‖ ―& objAdRs.fields(i) Next Reporter.ReportEvent 0,‖Here is the Full Contents‖,‖―& varConcat varConcat=―― Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 44
  • 45. VLearn Technologies www.mysaptesting.com objAdRs.moveNext Wend If Err<>0 Then Reporter.ReportEvent micFail,‖Open Recordset‖, ―Error has occured.Error Code : ― & Err Set obj_UDF_getRecordset = Nothing Exit Function End If Set objAdRs.ActiveConnection = Nothing objAdCon.Close Set objAdCon = Nothing Set obj_UDF_getRecordset = objAdRs End Function Set rsAddin = obj_UDF_getRecordset(―C:Documents and SettingsmohankDesktopLogin.xls‖, ―Select * from [Login$]‖) //Use the CompareFiles function The following function can be used to check and compare the content of the two files. Note: This function is not part of QuickTest Professional/Astra QuickTest. It is not guaranteed to work and is not supported by Mercury Interactive Technical Support. You are responsible for any and all modifications that may be required.CompareFiles (FilePath1, FilePath2) FilePath1 The path to the first file to compare FilePath2 The path to the second file to compare Public Function CompareFiles (FilePath1, FilePath2) Dim FS, File1, File2 Set FS = CreateObject(―Scripting.FileSystemObject‖) If FS.GetFile(FilePath1).Size <> FS.GetFile(FilePath2).Size Then CompareFiles = True Exit Function End If Set File1 = FS.GetFile(FilePath1).OpenAsTextStream(1, 0) Set File2 = FS.GetFile(FilePath2).OpenAsTextStream(1, 0) CompareFiles = False Do While File1.AtEndOfStream = False Str1 = File1.Read(1000) Str2 = File2.Read(1000) CompareFiles = StrComp(Str1, Str2, 0) Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 45
  • 46. VLearn Technologies www.mysaptesting.com If CompareFiles <> 0 Then CompareFiles = True Exit Do End If Loop File1.Close() File2.Close() End Function Return value: The function returns 0 or False if the two files are identical, otherwise True.Example: File1 = ―C:countriesapple1.jpg‖ File2 = ―C:countriesapple3.jpg‖ If CompareFiles(File1, File2) = False Then MsgBox ―Files are identical.‖ Else MsgBox ―Files are different.‖ End If // GET NAMES OF ALL OPEN BROWSERS Set browserDesc = Description.Create() browserDesc(―application version‖).Value = ―internet explorer 6″ Set browserColl = DeskTop.ChildObjects(browserDesc) browserCnt = browserColl.Count MsgBox ―There are ―&browserCnt&‖ instances of a browser‖ For i = 0 To (browserCnt -1) MsgBox ―Browser # ―&i&‖ has title = ―& browserColl(i).GetROProperty(―title‖) Next ‗ i Set browserColl = Nothing Set browserDesc = Nothing // How to run the scripts in 8.2 those are recorded in 9.0 or higher Step 1: Delete the object repository of 9.0 Step 2: open a Blank test in 8.2 Step 3: Create the shared object repository in 8.2 that should contain all the objects in 9.0 and save. Step 4: create the action structure in 8.2 should contain the same num of actions, same names and structure as the script of 9.0. Step 5: save the test. (From now we call this as 8.2 scripts) Step 6: from 8.2 script copy Test.tsp file to the 9.0 script. Step 7: copy all Resource.MTR file found in Action0, Action 1, etc to 9.0 scripts Step 8: now u can run the scripts with little modifications if require Automated Test Script Creation Process Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 46
  • 47. VLearn Technologies www.mysaptesting.com Debugging and troubleshooting test scripts becomes extremely tedious when the test script has hundreds of lines of code, verification points, branching logic, error handling, parameters, and test correlation among various recorded business processes. A more manageable approach to debugging complex and lengthy test scripts is to record portions of the script and debug those portions individually before recording other parts of the test script. After testing individual portions, you can determine how one portion of the test script works with another portion and how data flows from one recorded process to the other. After all sections for a test script have been recorded, you can playback the entire test script and ensure that it properly plays back from the beginning to the end with one or more sets of data. Always create a test plan that will assist in the creation of the regression test script. A test script is only as good as the planning that takes place before it is written. This saves time and organizes the process. Remember that all regression test scripts will be written to run in the QA environment as well as the production environment. The automated regression test use will be a part of the production test used to determine if a build truly does function as expected in production. To manage the creation and edit of our automated regression tests QA will create automated tests in the following manner: 1. Record each individual process such as logging in and logging out. Save those recordings on your desktop. 2. Verify that the script will play back with no errors. 3. Continue recording and playing back throughout the test script creation process, verifying the script will play back with each step taken. 4. Add multiple sets of data driven tests for each individual portion of each test where that kind of test is applicable. 5. Verify the individual test scripts with multiple sets of data will play back with no errors. 6. Add various check points throughout the test. 7. Verify the individual test scripts with various check points will play back with no errors. 8. Now integrate all recorded processes into one large test script. 9. Verify the large test script will play back with no errors. The key here is to ensure that each recorded process plays back successfully before proceeding to record the remaining portions of the entire test script. Do not string the individual tests together for playback without first verifying that all of the processes could play back successfully as individual processes. Lesson to be learned here is to never, EVER wait to debug a script until the entire test script has been recorded. Synchronization Since QTP can play back recorded test scripts much faster than an end-user‘s manual keystrokes all tests must be synchronized. Introduce artificial wait times in the test scripts to make sure the script will run appropriately without errors unattended. Take into Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 47
  • 48. VLearn Technologies www.mysaptesting.com account the fact that there will be times when the script will need to run slower than a manual test due to network issues, etc. The goal here is we want to make sure the scripts will run unattended through Test Director. Slowing down a script with wait times is not very scientific and does not contribute to the creation of a robust automated test script that plays back successfully without user intervention. That said, sync times will be edited after the test script has been written in its entirety and has been tested to ensure it runs with no errors. Signed-off, Peer Reviewed As part of the test readiness review criteria, test scripts will be formally accepted and approved prior to starting the test cycle. QA, Business Analysts and Developers should be involved in approving recorded test scripts. The QA Analyst writing the automated test script should demonstrate that the test script successfully plays back in the QA environment and, if possible, with various sets of data. Recording, Playing Back Against Hidden Objects Scripts might be recorded to populate or double click values for a field within a table grid or an array where the location of this field is not fixed. If the field‘s location within a table grid or array changes from the time it was recorded, the script might fail during play back. Test scripts often fail during play back because the locations of objects that are not displayed or visible within the screen have changed. In order to play back scripts that are location sensitive or where the location is subject to change, it might be necessary to enhance the script with functionality such as ‗scroll down‘, ‗next page‘, or ‗find‘. Including such utilities ensures that hidden objects requiring play back will be identified, and/or double clicked regardless of their location within an array, table grid, or the displayed screen. Create Automatic Notification for Critical Scripts Test scripts should be enhanced with error handling programming logic that instantly sends error messages to a tester‘s e-mail address when problems occur. Since some test scripts are business critical and must run as batch jobs in the middle of the night we need to know if something failed as soon as possible. The proper and successful execution of these business critical test scripts can serve as a dependency or pre-condition for other automated tasks. Always include logic in business critical test scripts that automatically sends notification in the event of a failure. Documentation To make test scripts reusable and easier to maintain, please document all relevant information for executing the test script, a test script header, and any special conditions for execution of the test script. Example: Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 48
  • 49. VLearn Technologies www.mysaptesting.com 1. Adjust dates within the application in QA environment for running reports. 2. Update any fields that require unique data. 3. Display settings for context sensitive/analog/bitmap recording. 4. List other test scripts that are dependencies. 5. Specify necessary authorization levels or user roles for executing the script. 6. Conditions under which the script can fail and work around for re- launching the script. 7. Applications that need to be either opened or closed during the script execution. 8. Specific data formats, etc. Scripts should contain a header with a description (example: what it is used for) and its particular purpose (example: regression testing). The script header should also include the script author and owner, creation and modification date, requirement identifiers that the script traces back to, the product the script supports and the number of variables and parameters of the script. Providing this information in the test script header facilitates the execution, modification, and maintenance of the script for future testing efforts. //Descriptive Programming to find number of unread messages in yahoo mail SystemUtil.Run"iexplore","http://www.yahoomail.com" Set g=Browser("name:=Yahoo.*").Page("title:=Yahoo.*") g.WebEdit("name:=login").Set "xyz" g.WebEdit("name:=passwd").Set "abc" g.WebButton("name:=Sign In").Click a=g.Link("name:=Inbox.*").getroproperty("innertext") b=len(a) If b=5 Then Msgbox"u have zero unread messages" else c=mid(a,8,len(a)-1) d=left(c,len(c)-1) msgbox "number of unread messages=" &d End If I can not read the unread mails no using the descriptive program SystemUtil.Run"iexplore","http://www.yahoomail.com" Set g=Browser("name:=Yahoo.*").Page("title:=Yahoo.*") g.WebEdit("name:=login").Set "xyz" g.WebEdit("name:=passwd").Set "abc" g.WebButton("name:=Sign In").Click a=g.Link("name:=Inbox.*").getroproperty("innertext") b=len(a) If b=5 Then Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 49
  • 50. VLearn Technologies www.mysaptesting.com Msgbox"u have zero unread messages" else c=mid(a,8,len(a)-1) d=left(c,len(c)-1) msgbox "number of unread messages=" &d End If the following error Run Error Cannot identify the object "[ Link ]" (of class Link). Verify that this object's properties match an object currently displayed in your application. Line (7): "a=g.Link("name:=Inbox.*").getroproperty("innertext")". Failed 6/12/2008 - 14:12:22 Am using the New Version of Y!mail hope your script was for Old/Classic version pl do change the script accordingly // Orkut Login Set IE=CreateObject("Internetexplorer.Application") IE.Visible= True IE.Navigate "www.orkut.com" Set a=browser("name:=orkut.*").page("title:=orkut.*") a.webedit("name:=Email").set"abc" a.webedit("name:=Passwd").set"123" a.webbutton("name:=Sign in").Click a.Link("name:=Logout").Click // Yahoo Login SystemUtil.Run"iexplore","http://www.yahoomail.com" Set g=Browser("name:=Yahoo.*").Page("title:=Yahoo.*") g.WebEdit("name:=login").Set "aaa" g.WebEdit("name:=passwd").SetSecure "bbb" g.WebButton("name:=Sign In").Click g.Link("name:=Inbox.*", "html id:=WelcomeInboxFolderLink").Click g.Link("name:=Sign Out").Click SystemUtil.Run"iexplore","http://www.yahoomail.com" statement opens yahoo login page aaa=username bbb=password Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 50
  • 51. VLearn Technologies www.mysaptesting.com Over and above features provided with QTP 8.2, QTP 9.0 provides following features: Object Repository Manager: You can use the Object Repository Manager to manage all of the shared object repositories in your organization from one, central location. This includes adding and defining objects, modifying objects and their descriptions, parameterize test object property values, maintaining and organizing repositories, and importing and exporting repositories in XML format. You can open multiple object repositories at the same time. Each object repository opens in its own resizable document window. This enables you to compare the content of the repositories, to copy or move objects from one object repository to another, and so forth. Object Repository Merge Tool: You can use the Object Repository Merge Tool to merge the objects from two shared object repositories into a single shared object repository. You can also use the Object Repository Merge Tool to merge objects from the local object repository of one or more actions or components into a shared object repository. When you merge objects from two source object repositories, the content is copied to a new, target object repository, ensuring that the information in the source repositories remains unchanged. If any conflicts occur during the merge, for example, if two objects have the same name and test object class, but different test object descriptions, the relevant objects are highlighted in the source repositories, and the Resolution Options pane details the conflict and possible resolutions. Multiple Object Repositories per Action or Component: Quick Test provides several options for storing and accessing test objects. You can store the test objects for each action or component in its corresponding local object repository, which is unique for each action and component. You can also store test objects in one or more shared object repositories that can be used in multiple actions and components. Alternatively, you can use a combination of objects from the local object repository and one or more shared object repositories. You choose the combination that matches your testing needs. XML Object Repository Format: Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 51
  • 52. VLearn Technologies www.mysaptesting.com Quick test now enables you to import and export object repositories from and to XML format. This enables you to modify object repositories using the XML editor of your choice and then import them back into Quick Test. You can import and export files either from and to the file system or a Quality Center project (if Quick Test is connected to Quality Center). Functions Library Editor: Quick Test now has a built-in function library editor, which enables you to create and edit function libraries containing VBScript functions, subroutines, modules, and so forth, and then call their functions from your test or component. Handling Missing Actions and Resources: Whenever a testing document (test, component, or application area) contains a resource that cannot be found, Quick Test opens the Missing Resources pane and lists the missing resource(s). For example, a test may contain an action or a call to an action that cannot be found; a testing document may use a shared object repository that cannot be found; or a testing document may use an object repository parameter that does not have a default value. In all of these cases, Quick Test indicates this in the Missing Resources pane, enabling you to map a missing resource to an existing one, or remove it from the testing document, as required. 1) How to add a constant number in a data table? This is more to do with MS excel then QTP!! But useful to know because at times it becomes frustrating to the novices. Just append ' to the number Ex: if you wish to enter 1234567 in data table then write it as '1234567 2) How can I check if a parameter exists in Data Table or not? The best way would be to use the below code: on error resume next Val=DataTable ("ParamName", dtGlobalSheet) if err. number<> 0 then 'Parameter does not exist else 'Parameter exists end if 3) How can I check if a checkpoint passes or not? chk_PassFail = Browser (...).Page (...).WebEdit (...).Check (Checkpoint ("Check1")) if chk_PassFail then MsgBox "Check Point passed" else MsgBox "Check Point failed" end if 4) my test fails due to checkpoint failing, Can I validate a checkpoint without my test failing due to checkpoint failure? Reporter. Filter = rfDisableAll 'Disables all the reporting stuff chk_PassFail = Browser (...).Page (...).WebEdit (...).Check (Checkpoint ("Check1")) Reporter. Filter = rfEnableAll 'Enable all the reporting stuff if chk_PassFail then MsgBox "Check Point passed" else MsgBox "Check Point failed" end if Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 52
  • 53. VLearn Technologies www.mysaptesting.com 5) What is the difference between an Action and a function? Action is a thing specific to QTP while functions are a generic thing which is a feature of VB Scripting. Action can have an object repository associated with it while a function can't. A function is just lines of code with some/none parameters and a single return value while an action can have more than one output parameters. 6) Where to use function or action? Well answer depends on the scenario. If you want to use the OR feature then you have to go for Action only. If the functionality is not about any automation script i.e. a function like getting a string between to specific characters, now this is something not specific to QTP and can be done on pure VB Script, so this should be done in a function and not an action. Code specific to QTP can also be put into a function using DP. Decision of using function/action depends on what any one would be comfortable using in a given situation. 7) When to use a Recovery Scenario and when to us on error resume next? Recovery scenarios are used when you cannot predict at what step the error can occur or when you know that error won't occur in your QTP script but could occur in the world outside QTP, again the example would be "out of paper", as this error is caused by printer device driver. "On error resume next" should be used when you know if an error is expected and dont want to raise it, you may want to have different actions depending upon the error that occurred. Use err.number & err.description to get more details about the error. 8) How to use environment variable? A simple definition could be... it is a variable which can be used across the reusable actions and is not limited to one reusable action. There are two types of environment variables: 1. User-defined 2. Built-in We can retrieve the value of any environment variable. But we can set the value of only user- defined environment variables. To set the value of a user-defined environment variable: Environment (Variable Name) = NewValue To retrieve the value of a loaded environment variable: CurrValue = Environment (VariableName) Example The following example creates a new internal user-defined variable named MyVariable with a value of 10, and then retrieves the variable value and stores it in the MyValue variable. Environment. Value ("MyVariable") =10 MyValue=Environment.Value ("MyVariable") 9) How to rename a checkpoint (QTP 9.0)? Example: Window ("Notepad").WinEditor ("Edit").Check Checkpoint ("Edit") in the above example, the user would like to change the name of the Checkpoint object from "Edit" to something more meaningful. Note: This functionality is new to QuickTest Professional 9.0.This is not available for QTP 8.2 and below. 1. Right-click on the Checkpoint step in the Keyword View or on the Checkpoint object in Expert View. 2. Select "Checkpoint Properties" from the pop-up menu. 3. In the Name field, Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 53
  • 54. VLearn Technologies www.mysaptesting.com enter the new checkpoint name. 4. Click. The name of the checkpoint object will be updated within the script. Example: Window ("Notepad").WinEditor ("Edit").Check Checkpoint ("NewCheckPointName") Note: You must use the QuickTest Professional user interface to change the name of the checkpoint. If you manually change the name of the checkpoint in the script, QuickTest Professional will generate an error during replay. The error message will be similar to the following: "The "" Checkpoint object was not found in the Object Repository. Check the Object Repository to confirm that the object exists or to find the correct name for the object." The Checkpoint object is not a visible object within the object repository, so if you manually modify the name, you may need to recreate the checkpoint to resolve the error. Include the Windows Media Player's executable in the NoBBTApps section of the mic.ini file 1. Close QuickTest Professional. 2. Go to binmic.ini. 3. Include wmplayer.exe in the NoBBTApps section of mic.ini file. Example: [NoBBTApps] wmplayer.exe=rek 4. Save the mic.ini file and restart QuickTest Professional. 13) What is the lservrc file in QTP? The lservrc file contains the license codes that have been installed The lservrc file contains the license codes that have been installed. Whenever a new license is created, the license code is automatically added to this file. The lservrc file is a text file, with no extension. File Location: 1) For a Concurrent (Floating) license installation: "#server installation directory##language#" Example: C:Program FilesXYZ TechnologiesABC ServerEnglishlservrc 2) For a Seat (Stand-alone) license installation: #AQT/QTP installation directory#bin" Example: C:Program FilesMercury InteractiveQuickTest ProfessionalBinlservrc 14) What to do if you are not able to run QTP from quality center? This is for especially for newbie‘s with QTP. Check that you have selected Allow other mercury products to run tests and components from Tools--> Options--> Run Tab. Test objects are the objects in your test that represent the objects in your website or application. Runtime objects are the objects in your application during the test run. The Test object properties set is created and maintained by QuickTest. The Runtime object property set is created and maintained by the object creator (Microsoft for Internet Explorer objects, Netscape for Netscape objects, the product developer for ActiveX objects, etc.). Descriptive Programming: Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 54
  • 55. VLearn Technologies www.mysaptesting.com Whenever QTP records any action on any object of an application, it adds some description on how to recognize that object to a repository of objects called object repository. QTP cannot take action on an object until unless its object description is in the Object Repository. But descriptive programming provides a way to perform action on objects which are not in Object repository. When and Why to use Descriptive programming? Below are some of the situations when Descriptive Programming can be considered useful: 1. The objects in the application are dynamic in nature and need special handling to identify the object. The best example would be of clicking a link which changes according to the user of the application, Ex. ―Logout <>‖. 2. When object repository is getting huge due to the no. of objects being added. If the size of Object repository increases too much then it decreases the performance of QTP while recognizing an object. 3. When you don‘t want to use object repository at all. Well the first question would be why not Object repository? Consider the following scenario which would help understand why not Object repository Scenario 1: Suppose we have a web application that has not been developed yet.Now QTP for recording the script and adding the objects to repository needs the application to be up, that would mean waiting for the application to be deployed before we can start of with making QTP scripts. But if we know the descriptions of the objects that will be created then we can still start off with the script writing for testing Scenario 2: Suppose an application has 3 navigation buttons on each and every page. Let the buttons be ―Cancel‖, ―Back‖ and ―Next‖. Now recording action on these buttons would add 3 objects per page in the repository. For a 10 page flow this would mean 30 objects which could have been represented just by using 3 objects. So instead of adding these 30 objects to the repository we can just write 3 descriptions for the object and use it on any page. 4. Modification to a test case is needed but the Object repository for the same is Read only or in shared mode i.e. changes may affect other scripts as well. 5. When you want to take action on similar type of object i.e. suppose we have 20 textboxes on the page and there names are in the form txt_1, txt_2, txt_3 and so on. Now adding all 20 the Object repository would not be a good programming approach. How to use Descriptive Programming? There are two ways in which descriptive programming can be used 1. By creating properties collection object for the description. 2. By giving the description in form of the string arguments. Arrays An array is a contiguous area in the memory referred to by a common name. It is a series of variables having the same data type. Arrays are used to store related data values. VBScript allows you to store a group of common values together in the same location. These values can be accessed with their reference numbers. An array is made up of two parts, the array name and the array subscript. The subscript indicates the highest index value for the elements within the array. Each element of an array Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 55
  • 56. VLearn Technologies www.mysaptesting.com has a unique identifying index number by which it can be referenced. VBScript creates zero based arrays where the first element of the array has an index value of zero. Declaring Arrays An array must be declared before it can be used. Depending upon the accessibility, arrays are of two types: · Local Arrays A local array is available only within the function or procedure, where it is declared. · Global Arrays A global array is an array that can be used by all functions and procedures. It is declared at the beginning of the VBScript Code. The Dim statement is used to declare arrays. The syntax for declaring an array is as follows: Dim ArrayName(subscriptvalue) Where, ArrayName is the unique name for the array and SubscriptValue is a numeric value that indicates the number of elements in the array dimension within the array. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 56
  • 57. VLearn Technologies www.mysaptesting.com Example: Dim No_Passengers(3) The No_Passengers can store 4 values. Assigning values to the array No_Passengers(0) = 1 No_Passengers(1) = 2 No_Passengers(2) = 3 No_Passengers(3) = 4 Static and Dynamic Arrays: VBScript provides flexibility for declaring arrays as static or dynamic. A static array has a specific number of elements. The size of a static array cannot be altered at run time. A dynamic array can be resized at any time. Dynamic arrays are useful when size of the array cannot be determined. The array size can be changed at run time. Next we will deal with user defined procedures, functions and subroutines. I have seen an umpteen no of posts in every QTP group I visited asking about Test Automation frameworks. Here I would like to collate the useful inputs i received from How do we associate a library file with a test ? • Library files are files containing normal VBScript code. The file can contain function, sub procedure, classes etc…. You can also use executefilefunction to include a file at run-time also. To associate a library file with your script go to Test->Settings… and add your library file to resourcestab. When to associate a library file with a test and when to use execute file? • When we associate a library file with the test, then all the functions within that library are available to all the actions present in the test. But when we use Executefile function to load a library file, then the function is available in the action that called executefile. By associated a library toa test we share variables across action (global variables basically), using association also makes it possible to execute code as soon as the script runs because while loading the script on startup QTP executes all the code on the global scope. We can use executefile in a library file associated with the test to load dynamic files and they will be available to all the actions in the test. Test and Run-time Object What is the difference between Test Objects and Run Time Objects ? • Test objects are basic and generic objects that QTP recognize. Run time object means the actual object to which a test object maps. Can i change properties of a test object Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 57
  • 58. VLearn Technologies www.mysaptesting.com • Yes. You can use SetTOProperty to change the test object properties. It is recommended that you switch off the Smart Identification for theobject on which you use SetTOProperty function. Can i change properties of a run time object? • No (but Yes also). You can use GetROProperty(”outerText”) to get the outerText of a object but there is no function like SetROProperty tochange this property. But you can use WebElement().object.outerText=”Something” to change the property. Action & Functions what is the difference between an Action and a function? • Action is a thing specific to QTP while functions are a generic thing which is a feature of VB Scripting. Action can have a object repositoryassociated with it while a function can’t. A function is just lines of code with some/none parameters and a single return value while an action canhave more than one output parameters. Where to use function or action? • Well answer depends on the scenario. If you want to use the OR feature then you have to go for Action only. If the functionality is not about any automation script i.e. a function like getting a string between to specific characters, now this is something not specific to QTP and can be done onpure VB Script, so this should be done in a function and not an action. Code specific to QTP can also be put into an function using DP. Decision of using function/action depends on what any one would be comfortable using in a given situation. Checkpoint & Output value What is checkpoint? • Checkpoint is basically a point in the test which validates for truthfulness of a specific things in the AUT. There are different types ofcheckpoints depending on the type of data that needs to be tested in the AUT. It can be text, image/bitmap, attributes, XML etc…. What’s the difference between a checkpoint and output value? • Checkpoint only checks for the specific attribute of an object in AUT while Output value can output those attributes value to a column in datatable. How can i check if a checkpoint passes or not? chk_PassFail = Browser(…).Page(…).WebEdit(…).Check (Checkpoint(”Check1″)) if chk_PassFail then MsgBox “Check Point passed” else MsgBox “Check Point failed” end if Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 58
  • 59. VLearn Technologies www.mysaptesting.com My test fails due to checkpoint failing, Can i validate a checkpoint without my test failing due to checpoint failure? Reporter.Filter = rfDisableAll „Disables all the reporting stuff chk_PassFail = Browser(…).Page(…).WebEdit(…).Check (Checkpoint(”Check1″)) Reporter.Filter = rfEnableAll „Enable all the reporting stuff if chk_PassFail then MsgBox “Check Point passed” else MsgBox “Check Point failed” end if Environment How can i import environment from a file on disk • Environment.LoadFromFile “C:Env.xml” How can i check if a environment variable exist or not? • When we use Environment(‖Param1″).value then QTP expects the environment variable to be already defined. But when we useEnvironment.value(‖Param1″) then QTP will create a new internal environment variable if it does not exists already. So to be sure that variable existin the environment try using Environment(‖Param1″).value 1. How Does Run time data (Parameterization) is handled in QTP? A) You can then enter test data into the Data Table, an integrated spreadsheet with the full functionality of Excel, to manipulate data sets and create multiple test iterations, without programming, to expand test case coverage. Data can be typed in or imported from databases, spreadsheets, or text files. 2) What is keyword view and Expert view in QTP? A) QuickTest’s Keyword Driven approach, test automation experts have full access to the underlying test and object propertyes, via an integrated scripting and debugging environment that is round-trip synchronized with the Keyword View. Advanced testers can view and edit their tests in the Expert View, which reveals the underlying industry-standard VBScript that QuickTest Professional automatically generates. Any changes made in the Expert View are automatically synchronized with the Keyword View. 3) Explain about the Test Fusion Report of QTP ? A) Once a tester has run a test, a TestFusion report displays all aspects of the test run: a high-level results overview, an expandable Tree View of the test specifying exactly where application failures occurred, the test data used, application screen shots for every step that highlight any discrepancies, and detailed explanations of each checkpoint pass and failure. By combining TestFusion reports with QuickTest Professional, you can share reports across an entire QA and development team. 4) To which environments does QTP supports ? Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 59
  • 60. VLearn Technologies www.mysaptesting.com QuickTest Professional supports functional testing of all enterprise environments, including Windows, Web, ..NET, Java/J2EE, SAP, Siebel, Oracle, PeopleSoft, Visual Basic, ActiveX, mainframe terminal emulators, and Web services. 11) In how many ways we can add check points to an application using QTP. A) We can add checkpoints while recording the application or we can add after recording is completed using Active screen (Note : To perform the second one The Active screen must be enabled while recording). 12) How does QTP identifes the object in the application A) QTP identifies the object in the application by LogicalName and Class. For example: The Edit box is identified by Logical Name: PSOPTIONS_BSE_TIME20 Cass: WebEdit 13) If an application name is changes frequently i.e while recording it has name “Window1” and then while running its “Windows2” in this case how does QTP handles? A) QTP handles those situations using “Regular Expressions”. 14) What is Parameterizing Tests? A) When you test your application, you may want to check how it performs the same operations with multiple sets of data. For example, suppose you want to check how your application responds to ten separate sets of data. You could record ten separate tests, each with its own set of data. Alternatively, you can create a parameterized test that runs ten times: each time the test runs, it uses a different set of data. Handling Run Errors in QTP The Run Error message box displayed during a run session offers a number of buttons for dealing with errors encountered:  Stop—Stops the run session. The run results are displayed if QuickTest is configured to show run results after the run.  Retry—QuickTest attempts to perform the step again. If the step succeeds, the run continues.  Skip—QuickTest skips the step that caused the error, and continues the run from the next step.  Debug—QuickTest suspends the run, enabling you to debug the component and any associated function library that contains a function called by the component. You can perform any of the debugging operations described in this section. After debugging, you can continue the run session from the step where the component or function library stopped, or you can use the step commands to control the remainder of the run session. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 60
  • 61. VLearn Technologies www.mysaptesting.com  Help—Opens the QuickTest troubleshooting Help for the displayed error message. After you review the Help topic, you can select another button in the error message box.  Details—Expands the message box to display additional information about the error. How to use Watch in QTP?? You can view the current value of any variable or VBScript object in your function library by adding it to the Watch tab. As you continue stepping into the subsequent steps in your function library, QuickTest automatically updates the Watch tab with the current value for any object or variable whose value changes. You can also change the value of the variable manually when the function library pauses at a breakpoint. To add an expression to the Watch tab: Perform one of the following:  Click the expression and choose Debug > Add to Watch  Click the expression and press CTRL+T  Right-click the expression and choose Add to Watch from the context menu  In the Watch tab, paste or type the name of the object or variable into the Name column and press ENTER to view the current value in the Value column Note: You can add an expression to the Watch tab from a function library (and not from a business component). Tip: You can also use the Variables tab to view the current values for all variables up to the current step in the function library. Run Error: Test run failed Q: Run Error: Test run failed The run session cannot continue due to an unknown error. Check the step where the failure occurred. If your component failed while referring to an external file, such as an associated function library, check that the files are accessible from your computer and that the files are saved in the appropriate format. If your component failed while performing a QuickTest step in a function, refer to the QuickTest Object Model Reference for more information on appropriate usage of the function in your statement. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 61
  • 62. VLearn Technologies www.mysaptesting.com If your component failed while performing a standard VBScript step in a function, refer to the Microsoft VBScript Reference. Run Error: The object's item is not unique Q: Why this error occurs?? More than one item in a list or tree item has the name specified in the method argument. Specify the item using the item's index (for example, "#4"). Note that different test objects and methods may use a different syntax for specifying an item's index. Run Error: Cannot identify item QuickTest cannot identify a list or tree item specified in a method argument. Confirm that the specified item exists in the object.  If the object does not exist, delete the step or modify the item on which you want to perform the step.  If the item exists, its name may have changed. Modify the name as necessary or specify the item using the item's index (for example, "#4"). Note that different test objects and methods may use a different syntax for specifying an item's index. Run Error: Parent not found Each object in your component is identified relative to its parent objects. If you received a Parent not found message, try one of the following solutions:  Fix the object description of the problematic parent object using the suggestions below o If you find that an object in your component has one or more property values in its description that differs from the corresponding object property in your application, determine whether the problem is with an individual object in your application, or whether the same problems apply to all or many of the objects in your application with the same object class.  Find all instances of the old hierarchy in the Expert View and replace it with the correct object hierarchy as described below Re-recording an Object to Identify Parent Object Description Problems Follow the instructions below to identify a problem with a parent object. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 62
  • 63. VLearn Technologies www.mysaptesting.com To identify a problem with a parent object by re-recording the child object: 1. Open your browser or application to the page containing the object that caused the error. 2. Select the last step in the component in the Keyword View or place the cursor below the last statement in the Expert View. 3. Click the Record button or choose Automation > Record. 4. Click or perform another operation on the object. 5. Click the Stop button or choose Automation > Stop. 6. Right-click the new step and select Object Properties. 7. In the Object Properties dialog box, click Repository. The Object Repository opens with the new object selected. Note the parent hierarchy of the new object. 8. Find the old (problematic) object in the Object Repository and compare the parent hierarchy of the old object with that of the new object. Check to see whether the differences are due to one or more parent objects with different descriptions, or whether the actual objects in the parent hierarchy are different. o If you find a problem with a parent description, try to fix it using the suggestions for Solving Object Description Problems. o If the problem stems from a different set of parent objects in the hierarchy, find all instances of the old hierarchy and replace it with the new object hierarchy as described in the example below. Example: Suppose that on a Web site with frames, you recorded a step on an Image object named Poster. In the Object Repository window, you can see that Image object's hierarchy is similar to the following (the object class is listed in parentheses for this example): MyCompany (Browser) MyCompany (Page) Main (Frame) Poster (Image) When you later run the component, the Web page looks the same, but you receive a Cannot Identify Object error for the Poster image. When you re-record the step and view the Image object in the Object Repository window, the hierarchy might look like this: MyCompany (Browser) MyCompany (Page) Poster (Image) Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 63
  • 64. VLearn Technologies www.mysaptesting.com Now you can see that the frames have been removed from the Web page, so even though the Poster image still has the same object description, its parent hierarchy is different. In the object repository, you can see that there are actually two different poster objects: the old one under the obsolete Frame object, and the new one directly under the MyCompany page. To fix the problem, you can replace the object in the step by clicking Select another object and choosing the required object from the correct location in the hierarchy (tree). To keep your Object Repository well-organized, you should also delete the obsolete objects from the Object Repository by right-clicking the obsolete object and selecting Delete. Using Microsoft Outlook to Send Email The code below illustrates two methods for sending email using the VBScript code in QuickTest Professional, and two different COM objects. ' Example 1 Function SendMail(SendTo, Subject, Body, Attachment) Set ol=CreateObject("Outlook.Application") Set Mail=ol.CreateItem(0) Mail.to=SendTo Mail.Subject=Subject Mail.Body=Body If (Attachment <> "") Then Mail.Attachments.Add(Attachment) End If Mail.Send ol.Quit Set Mail = Nothing Set ol = Nothing End Function ' Example 2 Function SendMail(SendFrom, SendTo, Subject, Body) Set objMail=CreateObject("CDONTS.Newmail") ObjMail.From = SendFrom ObjMail.To = SendTo ObjMail.Subject = Subject ObjMail.Body = Body ObjMail.Send Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 64
  • 65. VLearn Technologies www.mysaptesting.com Set objMail = Nothing End Function // To Close all Browsers Except One Gmail Set oBrowser = Description.Create oBrowser("micclass").Value = "Browser" Set oPage = Description.Create oPage("micclass").Value = "Page" 'Get all browsers Set allBrowser = Desktop.ChildObjects(oBrowser) Dim i, iCount iCount = allBrowser.Count Msgbox iCount For i = 0 To iCount-1 'Get the page object from the browser 'Set oPg = allBrowser(i).ChildObjects(oPage) 'Get the URL of the Msgbox allBrowser(i).GetRoProperty("title") If InStr(1,allBrowser(i).GetRoProperty("title"),"Gmail", vbTextCompare) = 0 Then 'Close the browser allBrowser(i).Close End If Next // To Close all Browsers Except One Gmail Set oBrowser = Description.Create oBrowser("micclass").Value = "Browser" Set oPage = Description.Create oPage("micclass").Value = "Page" 'Get all browsers Set allBrowser = Desktop.ChildObjects(oBrowser) Dim i, iCount iCount = allBrowser.Count Msgbox iCount For i = 0 To iCount-1 'Get the page object from the browser 'Set oPg = allBrowser(i).ChildObjects(oPage) 'Get the URL of the Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 65
  • 66. VLearn Technologies www.mysaptesting.com Msgbox allBrowser(i).GetRoProperty("title") If InStr(allBrowser(i).GetRoProperty("title"),"Gmail") = 0 Then 'Close the browser allBrowser(i).Close End If Next // To Close all Browsers except Quality Center 'Create a description for browser Set oBrowser = Description.Create oBrowser("micclass").Value = "Browser" Set oPage = Description.Create oPage("micclass").Value = "Page" 'Get all browsers Set allBrowser = Desktop.ChildObjects(oBrowser) Dim i, iCount iCount = allBrowser.Count - 1 For i = 0 To iCount 'Get the page object from the browser Set oPg = allBrowser(i).ChildObjects(oPage)(0) 'Get the URL of the If InStr(oPg.GetROProperty("title"), "Quality Center", vbTextCompare) = 0 Then 'Close the browser allBrowser(i).Close End If Next By now you must be wondering about the line 'Get the page object from the browser Set oPg = allBrowser(i).ChildObjects(oPage)(0) // script to check all checkboxes in a webpage. Set a=Description.Create a("html tag").value="input" a("type").value="checkbox" Set b=Browser("name:=").Page("title:=").childobjects(a) c=b.count msgbox c Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 66
  • 67. VLearn Technologies www.mysaptesting.com For i=0 to c-1 b(i).set "on" Next // To Close all Browsers Call Closebrowser() Function Closebrowser While Browser("CreationTime:=.*").Exist Browser("CreationTime:=.*").Close Wend End Function //To Close QTP after execution Private Function CloseQTP Set objWMIService = GetObject("winmgmts:.rootCIMV2") Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'QTPro.exe'") For Each objProcess in colProcess objProcess.Terminate() Next Set objWMIService = Nothing Set colProcess = Nothing End Function Call CloseQTP // Set Desc= description.Create() desc("micclass").value ="WebCheckBox" Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc) s=data.count() msgbox "Buttons" & VBNewLine &s For i = 0 to s - 1 Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 67
  • 68. VLearn Technologies www.mysaptesting.com msgbox data(i).getroproperty("name") Next // Set Desc= description.Create() desc("micclass").value ="WebEdit" Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc) s=data.count() msgbox "Buttons" & VBNewLine &s For i = 0 to s - 1 msgbox data(i).getroproperty("name") Next // Set Desc= description.Create() desc("micclass").value ="WebRadioButton" Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc) s=data.count() msgbox "Buttons" & VBNewLine &s For i = 0 to s - 1 msgbox data(i).getroproperty("name") Next // Set Desc= description.Create() Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 68
  • 69. VLearn Technologies www.mysaptesting.com desc("micclass").value ="WebButton" Set data=Browser("name:=127.0.0.1").Page("title:=127.0.0.1").ChildObjects(desc) s=data.count() msgbox "Buttons" & VBNewLine &s For i = 0 to s - 1 msgbox data(i).getroproperty("name") Next // Dim vcol_Handles, vCtr, vHwnd, Flag, vLastHWnd vCtr = 0 Flag = 1 Set vcol_Handles = CreateObject("Scripting.Dictionary") While (Window("regexpwndclass:=IEFrame","index:=" & vCtr).Exist ) wait 1 vHwnd = Window("regexpwndclass:=IEFrame","index:=" & vCtr).getroproperty("Hwnd") If (vLastHWnd=vHwnd) Then Flag = 0 Else vcol_Handles.Add CStr(vcol_Handles.Count),vHwnd vCtr = vCtr+1 End If vLastHWnd = vHwnd msgbox vLastHWnd Wend msgbox vCtr For vCtr = vcol_Handles.Count-1 to 0 step-1 Wait 1 vHwnd = vcol_Handles.Item(CStr(vCtr)) vBrowser = Window("regexpwndclass:=IEFrame","index:=" & vCtr).getroproperty("text") If Instr(vBrowser, "Mercury") then Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 69
  • 70. VLearn Technologies www.mysaptesting.com Reporter.ReportEvent 2, "Not closed " & vBrowser, "The browser '" & vBrowser & "' was not closed" Else Reporter.ReportEvent 2, "Closed " & vBrowser, "The browser '" & vBrowser & "' was closed" Window("hwnd:=" & vHwnd).Close End If Next In above code use SystemUtil.CloseProcessByHwnd (vHwnd) instead of Window("hwnd:=" & vHwnd).Close, because .Close won't work if you have popups. Also replace the following lines: vBrowser = Window("regexpwndclass:=IEFrame","index:=" & vCtr).getroproperty("text") If Instr(vBrowser, "Mercury") then vBrowser = Window("regexpwndclass:=IEFrame","hwnd:="& vHwnd).getroproperty("text") If Instr(vBrowser, "Mercury Quality")<>0 OR Instr(vBrowser, "TestDirector")<>0 then You can also give a try with this code: do while("True") TrueOrFalse = Browser("opnedbytestingtool:=True").Exist if(TrueOrFalse = "False") then exit do else Browser("opnedbytestingtool:=True").close end if loop This works: Do while("True") TrueOrFlase = Browser("index:=0").Exist if(TrueOrFlase = "False") then exit do else Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 70
  • 71. VLearn Technologies www.mysaptesting.com 'if Browser("index:=0").Window("regexpwndclass:=Internet Explorer_TridentDlgFrame").exist(5) then ' Browser("index:=0").Window("regexpwndclass:=Internet Explorer_TridentDlgFrame").close ' TIM - I changed the .exist period from 5 to 1 to, hopefully, speed up this process. if Browser("index:=0").Dialog("nativeclass:=#32770").exist(1) then Browser("index:=0").Dialog("nativeclass:=#32770").close end if Browser("index:=0").close end if loop The above code will close all the browser that are opened. Here instead of creation time other ordinal identifier can also be used. Dim windows2Close 'Initialize with negative upper bound ReDim windows2Close( -1) 'Create the shell application object Set shlApp = CreateObject("Shell.Application") 'Get all open windows collection Set allWins = shlApp.Windows 'Loop through each window and close if IE For Each window In allWins 'Close all IE windows but ignore Quality Center If InStr(window.fullName, "iexplore.exe") And InStr(Window.LocationURL, "/qcbin/") = 0 Then 'Increase the array size by 1 ReDim Preserve windows2Close(UBound(windows2Close) + 1) Set windows2Close(UBound(windows2Close)) = Window End If Next 'Loop through all array elements and close each window For Each Window In windows2Close Window.Quit Next 'Create the shell application object Set shlApp = CreateObject("Shell.Application") 'Get all open windows collection Set allWins = shlApp.Windows 'Loop through each window and close if IE For Each window In allWins Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 71
  • 72. VLearn Technologies www.mysaptesting.com If InStr(window.fullName, "iexplore.exe") Then 'Close the IE window window.Quit End If Next 'Launch a notepad window SystemUtil.Run "notepad.exe" 'Close the window just launched using the exact title SystemUtil.CloseProcessByWndTitle "Untitled - Notepad" 'Launch a notepad window SystemUtil.Run "notepad.exe" 'Close the window just launched using a pattern string SystemUtil.CloseProcessByWndTitle ".*Notepad", True SystemUtil.CloseDescendentProcesses CloseDescendentProcesses can be used to close any process launched by QTP. The code below illustrates the usage 'Launch explorer SystemUtil.Run "iexplore.exe" 'Launch excel using COM Set oXL = CreateObject("Excel.Application") oXL.Visible = True 'Close processes launched by QTP. This will close 'the internet explorer and Excel as well SystemUtil.CloseDescendentProcesses 'Close all internet explorer windows closedCount = SystemUtil.CloseProcessByName("iexplore.exe") 'Display # of closed windows MsgBox closedCount Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 72
  • 73. VLearn Technologies www.mysaptesting.com 'Run internet explorer SystemUtil.Run "iexplore.exe" 'Run internet explorer and open knowledgeinbox.com SystemUtil.Run "iexplore.exe", "http://www.knowledgeinbox.com" 'Run a IE Process in Maximized window Const SHOW_MAXIMIZED = 3 'Activates the window and displays it as a maximized window. SystemUtil.Run "iexplore.exe", "http://www.knowledgeinbox.com", , , SHOW_MAXIMIZED 1. Getting Number from String Function extract_number(msg) Dim re, matches, item, result Set re = New RegExp re.pattern = "[A-Za-z -.]*(d+).*" Set matches = re.Execute(msg) If matches.Count > 0 Then Set item = matches(0) If item.SubMatches.Count > 0 Then result = item.SubMatches(0) Else result = -1 End If Else result = -1 End If extract_number = result End Function MsgBox extract_number("This user belongs to 10 groups") MsgBox extract_number("206 features assigned to the user.") 2. Close All the opened Browsers Except QC opened browser On Error Resume Next Dim intWndCnt Dim oDesc, oWnd 'Create Object description Set oDesc = Description.Create ' Set oWnd = Desktop.ChildObjects(oDesc) intWndCnt = oWnd.Count For i = 0 to intWndCnt - 1 Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 73
  • 74. VLearn Technologies www.mysaptesting.com Set TmpObj = oWnd.item(i) strTmpTitle = oWnd.item(i).GetROProperty("Text") If instr(1,strTmpTitle, "Microsoft Internet Explorer",1) > 0 Then If instr(1,strTmpTitle, "Mercury Quality Center",1) > 0 Then 'msgbox "Title :" & oWnd.item(i).GetROProperty("Text") Else 'msgbox "Close :" & oWnd.item(i).GetROProperty("Text") oWnd.item(i).close End if End If Next 'Clean up Set oDesc = nothing Set oWnd = nothing 3. Close all opened Excel files Public Function fn_close_all_excel_files() strComputer = "." Set objWMIService = GetObject("winmgmts:" & strComputer & "rootcimv2") Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'EXCEL.EXE'") For Each objProcess in colProcessList objProcess.Terminate() Next End Function 4. Excel sheet column count Public Function dtGetColCount (sSheetName) On Error Resume Next Do i=i+1 sColName = DataTable.GetSheet(sSheetName).GetParameter(i).Name Loop While 0 = Err.Number 'GetParameter throws an error when using an index that is out of bounds ... 'We can use this functionality to ASSUME that it's an unused column. 'We've come to the end of our USED columns dtGetColCount = i - 1 On Error GoTo 0 End Function 5. Count Number of files in any Folder iFileCount = 0 Set objFileSysOb = CreateObject("Scripting.FileSystemObject") Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 74
  • 75. VLearn Technologies www.mysaptesting.com Set colFolderName = objFileSysOb.GetFolder("C:Automation") ' Folder Path Set vFiles =colFolderName.Files For each vFileItem in vFiles print vFileItem iFileCount = iFileCount + 1 Next print iFileCount 6. Create Dynamic Array For i = 0 to 20 Redim Preserve arrFileLines(i) arrFileLines(i) = "test" & i Next 7. Close Dialog box Function DialogClose (obj) If obj.Dialog("nativeclass:=#32770").Exist(0) Then obj.Dialog("nativeclass:=#32770").WinButton("nativeclass:=Button","index:=0").Click End If RegisterUserFunc "Browser", "DialogClose", "DialogClose" End Function 8. Create Dynamic Value iDynamicValue = now iDynamicValue = replace(iDynamicValue,"/","") iDynamicValue = replace(iDynamicValue,":","") iDynamicValue = replace(iDynamicValue," ","") iDynamicValue = replace(iDynamicValue,"PM","") iDynamicValue = replace(iDynamicValue,"AM","") msgbox iDynamicValue 9. Get QTP file path Set qtApp = CreateObject("QuickTest.Application") ' Create the Application objectqtpApp.Test.Location TestLoc = qtApp.Test.Location MsgBox TestLoc 10. IS QC Connected? Set qtApp = CreateObject("QuickTest.Application") If qtApp.TDConnection.IsConnected Then Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 75
  • 76. VLearn Technologies www.mysaptesting.com msgbox "QC" Else msgbox "Local" End If (or) if QCUtil.IsConnected then Reporter.ReportEvent 0, "Connected", "Connected to server: " + QCUtil.QCConnection.ServerName + chr (13) +"Project: " + QCUtil.QCConnection.ProjectName + chr (13) + "Domain: " + QCUtil.QCConnection.DomainName else Reporter.ReportEvent 1, "Not connected", "Not connected to Quality Center" end if 11. Keyboard Key Press through QTP Script 'Create Shell Object Set WshShell = CreateObject("WScript.Shell") 'Send any Functinal Keys ' ALT = % ' F4 = {F4} WshShell.SendKeys "%{F4}" ' Set shell object to Null Set WshShell=nothing 1. BEEP from QTP ' Three methods of issuing a BEEP from QTP ' Method 1 Extern.Declare micLong,"MessageBeep","User32","MessageBeep",micLong retVal = Extern.MessageBeep(&HFFFFFFFF) MsgBox retVal 'The return value should be 1. ' Method 2 Err.Number = 0 On Error Resume Next Extern.Declare micLong,"MessageBeep","User32","MessageBeep",micLong Extern.MessageBeep(&HFFFFFFFF) Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 76
  • 77. VLearn Technologies www.mysaptesting.com If (Err.Number <> 0) Then MsgBox Err.Description End If ' Method 3 Extern.Declare micLong,"Beep","Kernel32","Beep",micLong,micLong retVal = Extern.Beep(1000,250) 'The first number is frequency the second is duration. MsgBox extract_number("This user belongs to 10 groups") MsgBox extract_number("206 features assigned to the user.") 2. Check for Required URL startURL = "www.google.com" ' Amend this to your required URL ' If no browser open, open browser and navigate to required URL If Not Browser("CreationTime:=0").Exist Then Call launch(startURL) Else ' Get the URL of the current open browser currentURL=Browser("CreationTime:=0").GetROProperty("OpenURL") ' If not correct URL navigate to required URL If Not currentURL = "www.google.com" Then Call launch(startURL) End If End If Function launch(startURL) ' Create IE object and navigate ' to required URL set IE = CreateObject("InternetExplorer.Application") IE.Visible = true IE.Navigate startURL End function 3. Close QTP with QTP script Private Function CloseQTP Set objWMIService = GetObject("winmgmts:.rootCIMV2") Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'QTPro.exe'") For Each objProcess in colProcess objProcess.Terminate() Next Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 77
  • 78. VLearn Technologies www.mysaptesting.com Set objWMIService = Nothing Set colProcess = Nothing End Function 4. Open any Appllication through QTP ' Function OpenApp ' ------------------ ' Open a specified application ' Parameter: application - the application full name (including location) '@Description Opens an application '@Documentation Open the application. Function OpenApp (application) systemUtil.Run application End Function 5. Adding any information to QTP Results ' AddToTestResults ' -------------- ' Add a Report.Event step to the Test Results 'Parameters: ' status - Step status (micPass, micFail, micDone or micWarning) ' StepName - Name of the intended step in the report (object name) ' details - Description of the report event ' '@Description Reports an event to the Test Results '@Documentation Report an event to the Test Results. Public Function AddToTestResults (status, StepName, details) Reporter.ReportEvent status, StepName, details End Function 6. Enable Doubleclick Event in QTP Enable the ondblclick event in the Web Event Recording Configuration To enable special event handling, use the Web Event Recording Configuration utility. 1. Go to Tools -> Web Event Recording Configuration. 2. Click . 3. Expand the Standard Objects branch. 4. Select the object you want to configure. 5. Go to Event -> Add -> ondblclick. The event will be added to the list on the right. 6. Select "If Handler" in the Listen column. 7. Select "Enabled" in the Record column. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 78
  • 79. VLearn Technologies www.mysaptesting.com 8. Click to close the dialogs. 7. DSN - Less Connection Public sconn uid = "UID" pwd = "PWD" ServerName = "Server Name" Connection() Function Connection() Set sconn = CreateObject("ADODB.connection") sconn.Open "Driver=Microsoft ODBC for Oracle;Server="& ServerName &";Uid="& uid &";Pwd="& pwd &"" End Function 8. High-Level Automation Framework Information At a very high level the framework components can be divided into two categories software part and documentation part. Here is my list of components ? you can add your item if anything is missing. --------------------------------------------- All software code part --------------------------------------------- Supporting libraries for Logging, error handling, Execution management 1. Tool specific code 2. Setup and configuration scripts 3. Test management code 4. Test data and Test data management code 5. Platform/OS specific scripts --------------------------------------------- Non software part --------------------------------------------- Folder structure Documents i. Coding guidelines ii. Procedure for creating scripts iii. Planning, design and review procedures iv. Approach for automation v. Approach for Testing automation code vi. Automation documentation - how scripts work vii. Setup and implementation procedures Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 79
  • 80. VLearn Technologies www.mysaptesting.com viii. Defect tracking procedure for Automation scripts ix. Source control procedures x. Project plan xi. Templates for effort estimation xii. Template for test case categorization xiii. Template for ROI calculation 9. Get Input Parameter Data and Use in Script Set qtApp = CreateObject("QuickTest.Application") ' Create the Application object Set pDefColl = qtApp.Test.ParameterDefinitions Set pDef = pDefColl.Item(1) MsgBox pDef.DefaultValue 10. Pass Test Data from MQC to QTP? 1) Create Test parameters in QTP (via file>Settings>Parameters) [These are the parameters that you see in QC, on the automated tab of the Configuration page in the Test Instance Propertirs.] 2) Create action parameters (Action Properties> Parameters) 3)Link action & test parameters together. To do this, go into Action Call Properties>Parameters. You'll see your action parameters here. Click in the Value column for a parameter and press the Configure Value button. This will open up the Value Configuration Options dialogue. In the parameter drop down list, select Test/action parameter and then, from the following Test parameters; Parameter drop down list, select the Test parameter that you want to link to your Action parameter. This should then link the Test parameters to the Action parameters. Then in your script, you'll use the parameters as follows: - Browser("Browser_Name").Page("Page_Name").WebEdit("Edit_Name").Set Parameter("Parameter_Name") 11. Get the Attachement from QC to local machine To get attachment from test Public Function GetTestAttachmentPath(TDAttachmentName) 'Returns File Path 'Test Director TDAPIOLELib object variables Dim otaAttachmentFactory 'As TDAPIOLELib.AttachmentFactory Dim otaAttachment 'As TDAPIOLELib.Attachment Dim otaAttachmentList 'As TDAPIOLELib.List Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 80
  • 81. VLearn Technologies www.mysaptesting.com Dim otaAttachmentFilter 'As TDAPIOLELib.TDFilter Dim otaExtendedStorage 'As TDAPIOLELib.ExtendedStorage Dim strPath 'As String Set otaAttachmentFactory = QCUtil.CurrentTest.Attachments Set otaAttachmentFilter = otaAttachmentFactory.Filter otaAttachmentFilter.Filter("CR_REFERENCE") = "'TEST_" & QCUtil.CurrentTest.Id & "_" & TDAttachmentName & "'" Set otaAttachmentList = otaAttachmentFilter.NewList If otaAttachmentList.Count = 1 Then Set otaAttachment = otaAttachmentList.Item(1) otaAttachment.Load True, "" strPath = otaAttachment.FileName ElseIf otaAttachmentList.Count > 1 Then Reporter.ReportEvent micFail, "Failure in library function 'GetTestAttachmentPath'", _ "Found more than one attachment '" & TDAttachmentName & "' in test '" & _ QCUtil.CurrentTest.Name & "'." strPath = "" ElseIf otaAttachmentList.Count < 1 Then Reporter.ReportEvent micFail, "Failure in library function 'GetTestAttachmentPath'", _ "Found 0 attachments '" & TDAttachmentName & "' in test '" & _ QCUtil.CurrentTest.Name & "'." strPath = "" End If GetTestAttachmentPath = strPath Set otaAttachmentFactory = Nothing Set otaAttachment = Nothing Set otaAttachmentList = Nothing Set otaAttachmentFilter = Nothing End Function To get attachment from folder Public Function GetFolderAttachmentPath(TDAttachmentName, TDFolderPath) 'Returns File Path 'Test Director TDAPIOLELib object variables Dim otaAttachmentFactory 'As TDAPIOLELib.AttachmentFactory Dim otaAttachment 'As TDAPIOLELib.Attachment Dim otaAttachmentList 'As TDAPIOLELib.List Dim otaAttachmentFilter 'As TDAPIOLELib.TDFilter Dim otaTreeManager 'As TDAPIOLELib.TreeManager Dim otaSysTreeNode 'As TDAPIOLELib.SysTreeNode Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 81
  • 82. VLearn Technologies www.mysaptesting.com Dim otaExtendedStorage 'As TDAPIOLELib.TreeManager Dim intNdId Dim strPath 'As String Set otaTreeManager = QCUtil.TDConnection.TreeManager Set otaSysTreeNode = otaTreeManager.NodeByPath(TDFolderPath) Set otaAttachmentFactory = otaSysTreeNode.Attachments Set otaAttachmentFilter = otaAttachmentFactory.Filter intNdId = otaSysTreeNode.NodeID otaAttachmentFilter.Filter("CR_REFERENCE") = "'ALL_LISTS_" & intNdId & "_" & TDAttachmentName & "'" Set otaAttachmentList = otaAttachmentFilter.NewList If otaAttachmentList.Count > 0 Then Set otaAttachment = otaAttachmentList.Item(1) otaAttachment.Load True, "" strPath = otaAttachment.FileName Else Reporter.ReportEvent micFail,"Failure in library function 'GetFolderAttachmentPath'", _ "Failed to find attachment '" & TDAttachmentName & "' in folder '" & TDFolderPath & "'." End If GetFolderAttachmentPath = strPath Set otaAttachmentFactory = Nothing Set otaAttachment = Nothing Set otaAttachmentList = Nothing Set otaAttachmentFilter = Nothing Set otaTreeManager = Nothing Set otaSysTreeNode = Nothing End Function 1. Can I change the Active Screen which is shown on every new test? You can change the Active Screen to any valid HTML page. The page can be located either locally or on the network. For example, if you want your entire organization to view the same Active Screen when opening QuickTest Professional, open the NewTest.inf file located in QuickTest ProfessionaldatSnapShots folder and add the following line: FileName1= "any full path to an HTML file" For example: FileName1=mercurypublicMainPage.html Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 82
  • 83. VLearn Technologies www.mysaptesting.com 2. How do I create an action template? If you want to include one or more statements in every new action in your test, you can create an action template. For example, if you always enter your name as the author of an action, you can add this comment line to your action template. An action template applies only to actions created on your computer. To create an action template, create a text file containing the comments, function calls, and other statements that you want to include in your action template. The text file must be in the structure and format used in the Expert View. Save the text file as ActionTemplate.mst in your QuickTest Professionaldat folder. All new actions you create contain the script lines from the action template. 3. How can I configure the report to show only errors by default? You can configure the report to show only errors by default by adding the following section to the QTReport.ini file in your QuickTest Professionalbin folder. [FilterDialog] ReportAppDefaultFilter=1 # for error only ReportAppDefaultFilter=3 # shows all messages (default) 4. How do I use environment variables? QuickTest supports using environment variables. Environment variables can be either system variables or user-defined variables. You can define the user-defined variables in an external file QuickTest reads when it is launched. 5. I have a Microsoft Access database that contains data I would like to use in my test. How do I do this? The Expert View enables you to access databases using ADO and ODBC. Below is a sample test that searches for books written by an author in the "Authors" table of the database. Dim MyDB Dim MyEng Set MyEng = CreateObject("DAO.DBEngine.35") Dim Td Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 83
  • 84. VLearn Technologies www.mysaptesting.com Dim rs ' Specify the database to use. Set MyDB = MyEng.OpenDatabase("BIBLIO.MDB") ' Read and use the name of the first 10 authors. Set Td = MyDB.TableDefs("Authors") Set rs = Td.OpenRecordset rs.MoveFirst For i = 1 To 10 Browser("Book Club").Page("Search Books").WebEdit("Author Name").Set rs("Author") Browser("Book Club").Page("Search Books").WebButton("Search").Click Next 6. How do I add a manual wait step to my test? A manual wait (think time) can be added to a QuickTest Professional test using the following command: Call Wait() 7. How do I make the test prompt the user for input while it is running? The VBScript InputBox function enables you to display a dialog box that prompts the user for input and then continues running the test. You can use the value that was entered by the user later in the test. For more information on the InputBox function, refer to the VBScript Reference. The following example shows the InputBox function used to prompt the user for a password. Browser("Mercury Tours").Page("Mercury Tours").WebEdit("username").Set "administrator" Passwd = InputBox ("Enter password", "User Input") Browser("Mercury Tours").Page("Mercury Tours").WebEdit("password").Set Passwd 8. How can I configure the report to show only errors by default? You can configure the report to show only errors by default by adding the following section to the QTReport.ini file in your QuickTest Professionalbin folder. [FilterDialog] ReportAppDefaultFilter=1 # for error only Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 84
  • 85. VLearn Technologies www.mysaptesting.com ReportAppDefaultFilter=3 # shows all messages (default) 9. How can I remove test result files from old tests? You can use the Test Results Deletion Tool to view a list of all the test results in a specific location in your file system or in a Quality Center project. You can then delete any test results that you no longer require. The Test Results Deletion Tool enables you to sort the test results by name, date, size, and so forth, so that you can easily identify the results you want to delete. You can find this utility in Start > Programs > QuickTest Professional > Tools > Test Results Deletion Tool. 10. How can I launch a new browser from a test? A new browser window (and any other application) can be launched from within a test by adding the following step to your test: SystemUtil.Run "iexplore.exe", "http://www.testingfaqs.co.in" 11. How can I record on nonstandard menus? You can modify how QuickTest behaves when it records menus. The options that control this behavior are located in the Advanced Windows Applications Options dialog box. (Tools > Options > Windows Applications > Advanced). 12. How can I terminate an application that is not responding? You can terminate any standard application while running a test in QuickTest by adding one of the following steps to the test: SystemUtil.CloseProcessByName "app.exe" SystemUtil.CloseProcessByWndTitle "Some Title" 13. Can I copy and paste to and from the Clipboard during a test run? You can use the Clipboard object to copy, cut, and paste text during a QuickTest test run. The object has the same methods as the Clipboard object available in Visual Basic: Clear GetData Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 85
  • 86. VLearn Technologies www.mysaptesting.com GetFormat GetText SetData SetText Below is an example of Clipboard object usage: Set MyClipboard = CreateObject("Mercury.Clipboard") MyClipboard.Clear MyClipboard.SetText "TEST" MsgBox MyClipboard.GetText 14. How do I close QuickTest after "n" test runs when running from Quality Center? When running multiple QuickTest tests from Quality Center, you can specify that you want to close QuickTest after a specified number of tests are executed. To do so, add the following lines to the end of the mic.ini file, located in your QuickTest Professionalbin folder: [RemoteAgent] CloseToolAfterRuns= (number) 15. Adding Defects to Quality Center Connects to Quality Center (TestDirector) from a QuickTest test and adds a bug to the database. Dim TDConnection Set TDConnection = CreateObject("TDApiOle.TDConnection") TDConnection.InitConnection "http://yovav/tdbin" ' URL for the DB TDConnection.ConnectProject "TD76","bella","pino" ' Valid login information If TDConnection.Connected Then MsgBox("Connected to " + chr (13) + "Server " + TDConnection.ServerName _ + chr (13) +"Project " + TDConnection.ProjectName ) Else MsgBox("Not Connected") End If 'Get the IBugFactory Set BugFactory = TDConnection.BugFactory 'Add a new empty bug Set Bug = BugFactory.AddItem (Nothing) 'Fill the bug with relevant parameters Bug.Status = "New" Bug.Summary = "Connecting to TD" Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 86
  • 87. VLearn Technologies www.mysaptesting.com Bug.Priority = "4-Very High" ' depends on the DB Bug.AssignedTo = "admin" ' user that must exist in the DB's users list Bug.DetectedBy = "admin" ' user that must exist in the DB's users list 'Post the bug to database (commit) Bug.Post 16. Using Message Boxes That Close Automatically The function below shows a message box that disappears after the specified timeout (in seconds). The script execution then continues. Public Sub MsgBoxTimeout (Text, Title, TimeOut) Set WshShell = CreateObject("WScript.Shell") WshShell.Popup Text, TimeOut, Title End Sub If TimeOut is 0, it behaves just like a normal message box. If TimeOut is greater than 0, the dialog box disappears after the specified number of seconds. 17. Using Microsoft Word Spell Check The following code shows a function for checking the number of spelling and grammar errors in a string. This function is also used to check the accuracy of a specific property in all the objects of a given application. Function NumberOfSpellErrors(strText) Dim objMsWord Set objMsWord = CreateObject("Word.Application") objMsWord.WordBasic.FileNew objMsWord.WordBasic.Insert strText NumberOfSpellErrors = objMsWord.ActiveDocument.SpellingErrors.Count objMsWord.Documents.Close (False) objMsWord.Quit ' close the application Set objMsWord = Nothing' Clear object memory End Function ' The following function uses the Spell errors function to check a specific property ' of all the objects with a given description which are under a given parent Sub CheckAllObjects(ParentObj, ObjDesc, PropName) Dim ObjCol, idx, PropValue, OldReportMode OldReportMode = Reporter.Filter Reporter.Filter = 2 ' Report only errors If (IsNull(ParentObj)) Then Set ObjCol = Desktop.ChildObjects(ObjDesc) Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 87
  • 88. VLearn Technologies www.mysaptesting.com Else Set ObjCol = ParentObj.ChildObjects(ObjDesc) End If For idx=0 to ObjCol.count-1 PropValue = ObjCol.Item(idx).GetROProperty(PropName) RetVal = NumberOfSpellErrors(PropValue) ' The actual spell check result If (RetVal > 0) Then ReportText = "Object #" & idx+1 & ": The '" & PropName & "' Property has " & RetVal & " spell errors (" & PropValue & ")" Reporter.ReportEvent 1, "Spell Check", ReportText End If Next Reporter.Filter = OldReportMode End Sub ''''''''''''''''''''''''''''''''''''' ' An example of usage: ' Go over all the static objects in the Login window of the Flight Application ' and for each object check the text for spelling and grammatical errors ''''''''''''''''''''''''''''''''''''' ' Go over all the links in the page and report all the ones that fail the spellcheck Set Desc = Description.Create() Desc("nativeclass").Value = "Static" Set Obj = Dialog("nativeclass:=#32770", "text:=Login") ' Invoke the Flight Application before calling the function CheckAllObjects Obj, Desc, "text" 18. Using Microsoft Outlook to Send Email The code below illustrates two methods for sending email using the VBScript code in QuickTest Professional, and two different COM objects. ' Example 1 Function SendMail(SendTo, Subject, Body, Attachment) Set ol=CreateObject("Outlook.Application") Set Mail=ol.CreateItem(0) Mail.to=SendTo Mail.Subject=Subject Mail.Body=Body If (Attachment <> "") Then Mail.Attachments.Add(Attachment) End If Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 88
  • 89. VLearn Technologies www.mysaptesting.com Mail.Send ol.Quit Set Mail = Nothing Set ol = Nothing End Function ' Example 2 Function SendMail(SendFrom, SendTo, Subject, Body) Set objMail=CreateObject("CDONTS.Newmail") ObjMail.From = SendFrom ObjMail.To = SendTo ObjMail.Subject = Subject ObjMail.Body = Body ObjMail.Send Set objMail = Nothing End Function 19. DP Example SetEditBox "userID", 0, "Sairam" Sub SetEditBox(ObjName, index, TestData) strHandle = Window("RegExpWndClass:=IEFrame","index:=0" ).GetROProperty("hWnd") Set gobjBrowser = Browser("hWnd:=" & strHandle) Set gobjPage = gobjBrowser.Page("index:=0") Set objDescription = Description.Create() objDescription("Class Name").Value = "WebEdit" objDescription("html tag").Value = "INPUT" objDescription("name").Value =ObjName objDescription("index").Value = index gobjPage.WebEdit(objDescription).Set TestData set gobjBrowser = nothing Set gobjPage = nothing End Sub 20. SaveAs Excel file with QTP Set xl = CreateObject("Excel.Application") xl.visible = True xl.Application.Workbooks.open "C:sai.xls" xl.Worksheets(1).Activate xl.Application.Visible = True xl.Cells(1,1).Value = "mum" Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 89
  • 90. VLearn Technologies www.mysaptesting.com xl.Cells(1,2).Value = "dad" xl.activeworkbook.SaveAs("C:sai1.xls") xl.Application.Quit // Excel Dim ExcelApp 'As Excel.Application Dim excelSheet 'As Excel.worksheet Dim excelBook 'As Excel.workbook Dim fso 'As Scripting.FileSystemObject ' This function will return a new Excel Object with a default new Workbook Function CreateExcel() 'As Excel.Application Dim excelSheet 'As Excel.worksheet Set ExcelApp = CreateObject("Excel.Application") 'Create a new excel Object ExcelApp.Workbooks.Add ExcelApp.Visible = True Set CreateExcel = ExcelApp End Function 'This function will close the given Excel Object 'excelApp - an Excel application object to be closed Sub CloseExcel(ExcelApp) Set excelSheet = ExcelApp.ActiveSheet Set excelBook = ExcelApp.ActiveWorkbook Set fso = CreateObject("Scripting.FileSystemObject") On Error Resume Next fso.CreateFolder "C:Temp" fso.DeleteFile "C:TempExcelExamples.xls" excelBook.SaveAs "C:TempExcelExamples.xls" ExcelApp.Quit Set ExcelApp = Nothing Set fso = Nothing Err = 0 On Error GoTo 0 End Sub 'The SaveWorkbook method will save a workbook according to the workbookIdentifier 'The method will overwrite the previously saved file under the given path 'excelApp - a reference to the Excel Application Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 90
  • 91. VLearn Technologies www.mysaptesting.com 'workbookIdentifier - The name or number of the requested workbook 'path - the location to which the workbook should be saved 'Return "OK" on success and "Bad Workbook Identifier" on failure Function SaveWorkbook(ExcelApp, workbookIdentifier, path) 'As String Dim workbook 'As Excel.workbook On Error Resume Next Set workbook = ExcelApp.Workbooks(workbookIdentifier) On Error GoTo 0 If Not workbook Is Nothing Then If path = "" Or path = workbook.FullName Or path = workbook.Name Then workbook.Save Else Set fso = CreateObject("Scripting.FileSystemObject") 'if the path has no file extension then add the 'xls' extension If InStr(path, ".") = 0 Then path = path & ".xls" End If On Error Resume Next fso.DeleteFile path Set fso = Nothing Err = 0 On Error GoTo 0 workbook.SaveAs path End If SaveWorkbook = "OK" Else SaveWorkbook = "Bad Workbook Identifier" End If End Function 'The SetCellValue method sets the given 'value' in the cell which is identified by 'its row column and parent Excel sheet 'excelSheet - the excel sheet that is the parent of the requested cell 'row - the cell's row in the excelSheet 'column - the cell's column in the excelSheet 'value - the value to be set in the cell Sub SetCellValue(excelSheet, row, column, value) On Error Resume Next excelSheet.Cells(row, column) = value On Error GoTo 0 End Sub Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 91
  • 92. VLearn Technologies www.mysaptesting.com 'The GetCellValue returns the cell's value according to its row column and sheet 'excelSheet - the Excel Sheet in which the cell exists 'row - the cell's row 'column - the cell's column 'return 0 if the cell could not be found Function GetCellValue(excelSheet, row, column) value = 0 Err = 0 On Error Resume Next tempValue = excelSheet.Cells(row, column) If Err = 0 Then value = tempValue Err = 0 End If On Error GoTo 0 GetCellValue = value End Function 'The GetSheet method returns an Excel Sheet according to the sheetIdentifier 'ExcelApp - the Excel application which is the parent of the requested sheet 'sheetIdentifier - the name or the number of the requested Excel sheet 'return Nothing on failure Function GetSheet(ExcelApp, sheetIdentifier) 'As Excel.worksheet On Error Resume Next Set GetSheet = ExcelApp.Worksheets.Item(sheetIdentifier) On Error GoTo 0 End Function 'The InsertNewWorksheet method inserts an new worksheet into the active workbook or 'the workbook identified by the workbookIdentifier, the new worksheet will get a default 'name if the sheetName parameter is empty, otherwise the sheet will have the sheetName 'as a name. 'Return - the new sheet as an Object 'ExcelApp - the excel application object into which the new worksheet should be added 'workbookIdentifier - an optional identifier of the worksheet into which the new worksheet should be added 'sheetName - the optional name of the new worksheet. Function InsertNewWorksheet(ExcelApp, workbookIdentifier, sheetName) 'As Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 92
  • 93. VLearn Technologies www.mysaptesting.com Excel.worksheet Dim workbook 'As Excel.workbook Dim worksheet 'As Excel.worksheet 'In case that the workbookIdentifier is empty we will work on the active workbook If workbookIdentifier = "" Then Set workbook = ExcelApp.ActiveWorkbook Else On Error Resume Next Err = 0 Set workbook = ExcelApp.Workbooks(workbookIdentifier) If Err <> 0 Then Set InsertNewWorksheet = Nothing Err = 0 Exit Function End If On Error GoTo 0 End If sheetCount = workbook.Sheets.Count workbook.Sheets.Add , sheetCount Set worksheet = workbook.Sheets(sheetCount + 1) 'In case that the sheetName is not empty set the new sheet's name to sheetName If sheetName <> "" Then worksheet.Name = sheetName End If Set InsertNewWorksheet = worksheet End Function 'The RenameWorksheet method renames a worksheet's name 'ExcelApp - the excel application which is the worksheet's parent 'workbookIdentifier - the worksheet's parent workbook identifier 'worksheetIdentifier - the worksheet's identifier 'sheetName - the new name for the worksheet Function RenameWorksheet(ExcelApp, workbookIdentifier, worksheetIdentifier, sheetName) 'As String Dim workbook 'As Excel.workbook Dim worksheet 'As Excel.worksheet On Error Resume Next Err = 0 Set workbook = ExcelApp.Workbooks(workbookIdentifier) If Err <> 0 Then RenameWorksheet = "Bad Workbook Identifier" Err = 0 Exit Function Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 93
  • 94. VLearn Technologies www.mysaptesting.com End If Set worksheet = workbook.Sheets(worksheetIdentifier) If Err <> 0 Then RenameWorksheet = "Bad Worksheet Identifier" Err = 0 Exit Function End If worksheet.Name = sheetName RenameWorksheet = "OK" End Function 'The RemoveWorksheet method removes a worksheet from a workbook 'ExcelApp - the excel application which is the worksheet's parent 'workbookIdentifier - the worksheet's parent workbook identifier 'worksheetIdentifier - the worksheet's identifier Function RemoveWorksheet(ExcelApp, workbookIdentifier, worksheetIdentifier) 'As String Dim workbook 'As Excel.workbook Dim worksheet 'As Excel.worksheet On Error Resume Next Err = 0 Set workbook = ExcelApp.Workbooks(workbookIdentifier) If Err <> 0 Then RemoveWorksheet = "Bad Workbook Identifier" Exit Function End If Set worksheet = workbook.Sheets(worksheetIdentifier) If Err <> 0 Then RemoveWorksheet = "Bad Worksheet Identifier" Exit Function End If worksheet.Delete RemoveWorksheet = "OK" End Function 'The CreateNewWorkbook method creates a new workbook in the excel application 'ExcelApp - the Excel application to which an new Excel workbook will be added Function CreateNewWorkbook(ExcelApp) Set NewWorkbook = ExcelApp.Workbooks.Add() Set CreateNewWorkbook = NewWorkbook End Function 'The OpenWorkbook method opens a previously saved Excel workbook and adds it Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 94
  • 95. VLearn Technologies www.mysaptesting.com to the Application 'excelApp - the Excel Application the workbook will be added to 'path - the path of the workbook that will be opened 'return Nothing on failure Function OpenWorkbook(ExcelApp, path) On Error Resume Next Set NewWorkbook = ExcelApp.Workbooks.Open(path) Set OpenWorkbook = NewWorkbook On Error GoTo 0 End Function 'The ActivateWorkbook method sets one of the workbooks in the application as Active workbook 'ExcelApp - the workbook's parent excel Application 'workbookIdentifier - the name or the number of the workbook Sub ActivateWorkbook(ExcelApp, workbookIdentifier) On Error Resume Next ExcelApp.Workbooks(workbookIdentifier).Activate On Error GoTo 0 End Sub 'The CloseWorkbook method closes an open workbook 'ExcelApp - the parent Excel application of the workbook 'workbookIdentifier - the name or the number of the workbook Sub CloseWorkbook(ExcelApp, workbookIdentifier) On Error Resume Next ExcelApp.Workbooks(workbookIdentifier).Close On Error GoTo 0 End Sub 'The CompareSheets method compares between two sheets. 'if there is a difference between the two sheets then the value in the second sheet 'will be changed to red and contain the string: '"Compare conflict - Value was 'Value2', Expected value is 'value2'" 'sheet1, sheet2 - the excel sheets to be compared 'startColumn - the column to start comparing in the two sheets 'numberOfColumns - the number of columns to be compared 'startRow - the row to start comparing in the two sheets 'numberOfRows - the number of rows to be compared Function CompareSheets(sheet1, sheet2, startColumn, numberOfColumns, startRow, numberOfRows, trimed) 'As Boolean Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 95
  • 96. VLearn Technologies www.mysaptesting.com Dim returnVal 'As Boolean returnVal = True 'In case that one of the sheets doesn't exists, don't continue the process If sheet1 Is Nothing Or sheet2 Is Nothing Then CompareSheets = False Exit Function End If 'loop through the table and fill values into the two worksheets For r = startRow to (startRow + (numberOfRows - 1)) For c = startColumn to (startColumn + (numberOfColumns - 1)) Value1 = sheet1.Cells(r, c) Value2 = sheet2.Cells(r, c) 'if 'trimed' equels True then used would like to ignore blank spaces If trimed Then Value1 = Trim(Value1) Value2 = Trim(Value2) End If 'in case that the values of a cell are not equel in the two worksheets 'create an indicator that the values are not equel and set return value 'to False If Value1 <> Value2 Then Dim cell 'As Excel.Range sheet2.Cells(r, c) = "Compare conflict - Value was '" & Value2 & "', Expected value is '" & Value1 & "'." Set cell = sheet2.Cells(r, c) cell.Font.Color = vbRed returnVal = False End If Next Next CompareSheets = returnVal End Function // To Check File Exist or Not Function ReportFileStatus(filespec) Dim fso, msg Set fso = CreateObject("Scripting.FileSystemObject") If (fso.FileExists(filespec)) Then msg = filespec & " exists." Else msg = filespec & " doesn't exist." End If ReportFileStatus = msg End Function Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 96
  • 97. VLearn Technologies www.mysaptesting.com Or filePath="c:testlog.txt" Set fso = CreateObject("Scripting.FileSystemObject") If (fso.FileExists(filePath)) Then Msgbox "File Exists at : " &filePath Else Msgbox "File doesn't exist at :" &filePath End If // Folder Exists Function ReportFolderStatus(fldr) Dim fso, msg Set fso = CreateObject("Scripting.FileSystemObject") If (fso.FolderExists(fldr)) Then msg = fldr & " exists." Else msg = fldr & " doesn't exist." End If ReportFolderStatus = msg End Function Or fldr="c:wmpub" Set fso = CreateObject("Scripting.FileSystemObject") If (fso.FolderExists(fldr)) Then Msgbox "Folder exists at :" &fldr Else Msgbox "Folder doesn't exist at :" &fldr End If // File Created at Date Function ShowFileInfo(filespec) Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(filespec) ShowFileInfo = "Created: " & f.DateCreated End Function Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 97
  • 98. VLearn Technologies www.mysaptesting.com Or filespec="c:testlog.txt" Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(filespec) Msgbox "Created: " & f.DateCreated // To Check File Extension Function GetAnExtension(DriveSpec) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") GetAnExtension = fso.GetExtensionName(Drivespec) End Function Or Drivespec="c:testlog.txt" Set fso = CreateObject("Scripting.FileSystemObject") GetAnExtension = fso.GetExtensionName(Drivespec) Msgbox GetAnExtension // Regular Expression Function SubMatchTest(inpStr) Dim oRe, oMatch, oMatches Set oRe = New RegExp ' Look for an e-mail address (not a perfect RegExp) oRe.Pattern = "(w+)@(w+).(w+)" ' Get the Matches collection Set oMatches = oRe.Execute(inpStr) ' Get the first item in the Matches collection Set oMatch = oMatches(0) ' Create the results string. Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 98
  • 99. VLearn Technologies www.mysaptesting.com ' The Match object is the entire match - dragon@xyzzy.com retStr = "Email address is: " & oMatch & vbNewline ' Get the sub-matched parts of the address. retStr = retStr & "Email alias is: " & oMatch.SubMatches(0) ' dragon retStr = retStr & vbNewline retStr = retStr & "Organization is: " & oMatch. SubMatches(1)' xyzzy SubMatchTest = retStr End Function MsgBox(SubMatchTest("Please send mail to ramana@xyzzy.com. Thanks!")) Function RegExpTest(patrn, strng) Dim regEx, Match, Matches ' Create variable. Set regEx = New RegExp ' Create a regular expression. regEx.Pattern = patrn ' Set pattern. regEx.IgnoreCase = True ' Set case insensitivity. regEx.Global = True ' Set global applicability. Set Matches = regEx.Execute(strng) ' Execute search. For Each Match in Matches ' Iterate Matches collection. RetStr = RetStr & "Match found at position " RetStr = RetStr & Match.FirstIndex & ". Match Value is '" RetStr = RetStr & Match.Value & "'." & vbCRLF Next RegExpTest = RetStr End Function MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4")) // To Send Mail from outlook Application SendTo=".......@........com" SendToCC=".......@........com" Subject="QTP mail" Body1="This mail is generated from QTP Environment" Attachment="C:Spec.xls" Call SendMail(SendTo, Subject, Body1, Attachment) Function SendMail(SendTo, Subject, Body, Attachment) Set ol=CreateObject("Outlook.Application") Set Mail=ol.CreateItem(0) 'ol.DisplayAlerts = False Mail.to=SendTo Mail.CC=SendToCC Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 99
  • 100. VLearn Technologies www.mysaptesting.com Mail.Subject=Subject Mail.Body=Body If (Attachment <> "") Then Mail.Attachments.Add(Attachment) End If Mail.Send ol.Quit Set Mail = Nothing Set ol = Nothing End Function // Automation Object Model (From Command Line ) Dim qtApp 'As QuickTest.Application ' Declare the Application object variable Dim qtTest 'As QuickTest.Test ' Declare a Test object variable Set qtApp = CreateObject("QuickTest.Application") ' Create the Application object qtApp.Launch ' Start QuickTest qtApp.Visible = True ' Make the QuickTest application visible qtApp.Open "C:Tempsimple_test", True ' Open the test in read-only mode ' set run settings for the test Set qtTest = qtApp.Test qtTest.Run ' Run the test WScript.StdOut.Write "Status is:" & qtTest.LastRunResults.Status ' Check the results of the test run qtTest.Close ' Close the test Set qtResultsOpt = Nothing ' Release the Run Results Options object Set qtTest = Nothing ' Release the Test object Set qtApp = Nothing ' Release the Application object C:cscript /nologo filename.vbs How to use automation object to load the library Dim qtApp Dim qtLibraries Set qtApp = CreateObject("QuickTest.Application") Set qtLibraries = qtApp.Test.Settings.Resources.Libraries ' Get the libraries collection object Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 100
  • 101. VLearn Technologies www.mysaptesting.com If qtLibraries.Find("C:sai1.vbs") = -1 Then ' If the library cannot be found in the collection ExecuteFile "C:sai1.vbs" End If Call test1() Function In File Sai1.vbs Function test1() MsgBox "Hi Manish" End Function How to use automation object to load the library Store the Library file along with the entire path in a variable. EG: sPath = "D:/Files/Functions.vbs" Executfile (sPath) OR Executfile ("D:/Files/Functions.vbs") Below this call which ever function you want to call from the library file Call FunctName(argument list) Can a function return dictonary object Yes. Functions can return a dictonary object. Dim dicObj Set dicObj = CreateObject("Scripting.Dictionary") Set obj=getname MsgBox(obj.item("name")) Public Function getname() dicObj.add "name","Uday Kumar" Set getname=dicObj End function How the Message Boxes Close Automatically Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 101
  • 102. VLearn Technologies www.mysaptesting.com The following script shows a message box that disappears after the specified timeout (in seconds). The script execution then continues. If TimeOut is 0, it behaves just like a normal message box. If TimeOut is greater than 0, the dialog box disappears after the specified number of seconds. Set wShellObj=createobject("WScript.shell") wShellObj.popup "Hello Uday, How are you",10,"This is sample" ' Displays like this: The message box automatically closes after 10 sec.s Even we can handle the error messages from the error handling mechanism like this: Set fileSysObj=createobject("Scripting.filesystemobject") On Error resume next fileSysObj.opentextfile("c:uday.txt") str=Err.description wShellObj.popup str,3,"This is for file not found" How to find out the number of links in a web page Here i am writing the link names in a text file Set fileSysObject=createobject("Scripting.FileSystemObject") Set linksFileName=fileSysObject.opentextfile("D:samplelinkfile.txt",2,true) Set linkDescObj=description.Create linkDescObj("micclass").value="Link" Set noOfLinks=browser("Browser").Page("Yahoo! India").ChildObjects(linkDescObj) For i=0 to noOfLinks.count-1 linkName=noOfLinks(i).getROProperty("name") linksFileName.writeline(linkName) Next linksFileName.close Set fileSysObject=nothing Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 102
  • 103. VLearn Technologies www.mysaptesting.com How to specify the environment variables to be loaded when QTP is started You can either define individual values in the .vbs file or specify an environment file to load. Example: Here is what the .vbs file could look like: Dim App ‗As Application ‗ Launch QTP Set App = CreateObject(‖QuickTest.Application‖) App.Launch App.Visible = True ‗ Load an INI file with user-defined parameters App.Test.Environment.LoadFromFile ―C:Test_Paramsenvironment_file1.ini‖ ‗ Set the value of a specific user-defined Environment variable App.Test.Environment.Value(‖newvariable‖) = ―new value‖ As you can see from the example, the Environment variable file is actually an .ini file. The structure would be: [Environment] var1=value1 var2=value2 … Name: Govind Mail ID: mysaptesting@gmail.com Address: Namdev block, Plot No: 502, Prime Hospital Lane, Hyderabad Page 103