Blog to understand automation concepts in QTP, Selenium Webdriver and Manual Testing concepts

QTP Descriptive programming Basics

Descriptive programming is creating of description of objects so that they can be identified once executed from QTP. It is approach for object identification together with object repository.

Why Descriptive Programming:


 Descriptive programming is useful due to following reasons:
  • It reduces the effort of maintaining and associating object repository with the test.
  • Maintenance is simpler.
  • In scenarios, when application is not developed but we know the properties of objects that will be added in the application. In such scenarios , we cannot maintain object repository since application is not ready and Objects cannot be learned from the  application. So Using Descriptive programming, we can prepare the scripts which can be executed once application is up and running.
  • It is useful when performing similar actions on multiple objects with similar properties
  • It is useful when object can be uniquely identified using fewer set of properties existing across multiple set of objects.
 

     OR Vs Descriptive programming


      When QTP learns an object during recording session or through object spy, object is identified and saved in object repository. QTP saves properties like innertext, name for the object in the object repository to uniquely identify an object. Similar to this, Descriptive programming creates a unique description of the object which is identified.

      With using Object Repository, we can use features like relative identifier, and other QTP specific features. Also time to create script based on descriptive programming is more compared to object repository. So for projects and for limited use of automation pack and applications with mostly static pages, Object repository can be better approach.

    Types of Descriptive programming


       Descriptive Programming can be implemented in following ways.
  •           Creating description string
  •           Using Description object.
Let us discuss the ways in some details:

  •       Creating description string:


             Browser("title:=Google").Page("title:=Google").WebEdit("name:=q").Set “DP”

 Above we created a description string similar to tree structure we see in expert view.

Below are few points to remember in creating description strings.

1. The parent object in the string can be used from Object repository, in case child object is defined in string.
2. Child objects cannot be used from OR  if string description is described for parent in the tree.

  Browser("Google").Page("Google").WebEdit("name:=q").Set “DP” is possible but
  Browser("title:=Google").Page("title:=Google").WebEdit("q").Set “DP” will not identify the object

  In case multiple objects are to defined , they needs to be separated by , .
  Browser("title:=Google").Page("title:=Google").WebEdit("name:=q”,html tag = In").Set “DP”


     To identify the properties of the object to be used in descriptive programming, Go to Object Spy and click on object.
  •       Go to Identification button and properties tab
  •       Select properties and property values and create string such that the identification is unique.

     In case of multiple objects with same properties, we can use index property to identify object based on indexing.

  •      Using Description.Create:  

Description object creates a collection of object based on object matching the defined properties.

Steps in description Object


         1. Define description object:

          set odesc = description.create
          we have defined an description object odesc.

         2. Add property to the object defined in step above.

               odesc(“name”).value =”q”
               odesc(“html tag”).value =”Input”
               we have defined the object with properties.

      3. Replace string with description object.

            Browser("title:=Google").Page("title:=Google").WebEdit(odesc).Set “DP”
            we have replaced string with description object.

     This description object can also be used to find child objects in the tree structure. For e.g : we can find all the links in the pages, check box, perform action on all the objects in the collection.

Below code explains the same:

odesc = Description.create
odesc(‘”html tag”).value =”Input”
odesc(“type”).value = “checkbox”
Set ochkbox = Browser("title:=Google").Page("title:=Google").childobjects(odesc)
For each obj in ochkbox
obj.set “ON”
Next

We can use ochkbox.count to get objects matching the description


HTML DOM and QTP


HTML DOM is language independent model for representing and interacting with objects in html. It defines the structure for HTML and help in traversing through objects in HTML. QTP supports HTML DOM and following methods are used to identify an object in HTML. This approach can be useful in case QTP is not able to identify the object.


Following are the methods by which we can identify an object using HTML DOM using QTP. We will explain methods used to extract information from HTML DOM and will  use the below html as reference.

<!DOCTYPE html>

<html>

<body>

<p id="para">Hello World!</p>

<p>Paragraph2</p>

<a id=”Link1” name =”LinkName” class=”LinkCls”>LinkTest</a>

<a id=”Link2” name =”LinkName” class=”LinkCls2”>LinkTest2</a>

<a id=”Link3” name =”LinkName” class=”LinkCls3”>LinkTest3</a>

</body>

</html>

GetElementsbyTagName Method



 This methods gives a list of all objects with the specified TagName. For e.g.:  Set objColl =Browser(“…”).Page(“….”).object.getElementsbyTagName(“a”)

This will give the list of all elements in the Page with tag name as “a”. In above sample html code, there are three elements with tag name as a. So objColl will be a collection of three elements.

In this example, we can access the link with class name as LinkTest2, we can use the below function

           Public Function funcGetParticularElem(strObjName)
    boolelemstat = False
   set  objLinkColl=  Browser("…..").Page("title:=.*").Object.getElementsByTagName("a")
  For each objLink in objLinkColl
  If (objLink.classname =strObjName) Then
              objLink.click
              boolelem = True
              Exit For
End If
Next
If (boolelem= True) Then
         Msgbox “Element Found”
Else
       Msgbox “element not found”
End If


GetElementsByName Method


This gives the list of all objects matching the specified name.

For e.g.: Set objColl = Browser(“…”).Page(“….”).object.getElementsbyName(“LinkName”)

This will give the list of all elements in the Page with name as “LinkName”. Similar to above explained example on how to use HTML DOM for GetelementsbyTagName method, we can use the same for getelementsbyname method and extract useful information for the element.


GetElementByID Method


This gives the list of objects with a particular Id . Normally Id’s are unique for each object in the Page, else it picks the first element of the object satisfying the Id.

For e.g: Browser(“…”).Page(“….”).object.getElementbyId(“Link1”).click

This will select the object with Id as “Link1” in the Page and perform the requested operation on the page. Difference between GetElementById and above methods is whereas the above methods give collection of elements. This method gives the element with the Id provided. Also Id defined in the page is unique for

RunScript Method


 This help to execute java script statement in QTP.

For e.g: 
Browser(“…”).Page(“….”).runscript(alert(”Hello World”);)

Once we have the collection of the objects, we can iterate through the collection and compare properties of the object like innerHTML,innerText with the expected value, and perform action on a particular object.

How to identify Object properties in the HTML Page

Using developer toolbar for object identification


We can use HTML DOM to extract information from the page and is very useful in case object is not identified by QTP directly.

Suppose there are two buttons with similar properties in a web table. We can use HTML DOM to identify object based on the unique object in the next cell of web Table. To traverse the DOM structure and find properties of every element in the page, there are various inbuilt and external tools based on browsers.In IE and chrome, we can press F12 to view DOM structure and inspect elements in the html Page.


Understanding Checkpoints in QTP

A checkpoint verifies that expected information is displayed in the application while the test is running. Checkpoint helps to identify whether the application is functioning correctly. Checkpoint is a verification step that compares the current value for specified properties or current state of an object with the expected value or characteristics. If the results do not match, the checkpoint fails. Results of the checkpoint are displayed in the Run Results Viewer.

Types of checkpoints

Following are the different types of checkpoints that can be created in QTP.
Standard Checkpoint: Following checkpoints are created in QTP as Standard Checkpoint.
  •  Page Checkpoint - checkpoint inserted on page object
  •  Image Checkpoint - checkpoint inserted on image object in the page
  • Table Checkpoint - checkpoint inserted on table object in the page
  • Standard Checkpoint - checkpoint on object other than page, image and table object.

Bitmap Checkpoint - verifies the actual bitmap of the area with expected bitmap 

XML Checkpoint - compares expected xml with actual xml

Database Checkpoint - compares expected value in database with actual value

Accessibility Checkpoint - compare accessibility of the page.


checkpoint in QTP


Inserting a Checkpoint

 Standard checkpoints are used to perform checks on images, tables, Web page properties, and other objects within application.
A checkpoint can be inserted in the test in following ways:

•    During Recording SessionTo insert a checkpoint while recording,start a recording session before proceeding to the next step.
•    Using Active Screen If using the Active Screen option, ensure that the Active Screen contains  sufficient data for the object that needs to be checked.
•  During Editing Sessions:  To insert or modify an existing checkpoint step while editing, open the application and display the relevant object before proceeding to the next step.

Following are the steps to insert a standard Checkpoint.
•Select Insert > Checkpoint menu for inserting a checkpoint during recording mode or right click on object in active screen.
•Select option Insert Standard Checkpoint which opens the Checkpoint Properties dialog box. Select the node in the tree where checkpoint needs to be inserted and click OK.

Checkpoint Properties:

Once an object is selected for checkpoint, different checkpoint dialog box opens based on the object type selected as shown below:
Following are the area displayed for checkpoints properties:

  • Object Details area: name that QTP assigns to the checkpoint object and the class of Object.
  • Properties grid area: For each object class, QTP recommends default property checks. To check a property, select the corresponding check box in the properties grid area.
  • Configure Value area: This area enables  to configure object property values or the values of the operation arguments defined for the step.
  • Checkpoint Timeout and Statement Location area: Checkpoint Timeout Specifies the time interval (in seconds) during which QTP attempts to perform the checkpoint successfully.Insert statement specifies whether to insert the checkpoint step before or after the currently selected step

Checkpoint  in Expert View

Checkpoint is displayed in Expert View as:

Browser("Mercury Tours").Page("Flight Confirmation").Check Checkpoint("New York")
Return value from checkpoint can be stored  in a variable.
Eg: Dim return
return = Browser("Mercury Tours").Page("Flight Confirmation").Check Checkpoint("New York")

This will give value as true or false based on checkpoint passed or Failed.