Tuesday, August 25, 2009

Limitations of QTP

Limitations to display on QTP Print log window:

We are familiar with Print command in VB Script that is use to display the output lines in Print Log window. This is very similar to printf in C++ and System.out.print commands in Java.

Syntax: Print “text”

QTP Print log (Quick Test Print Log) window can write 1001 lines on it and 1024 characters in a line. So it has array of (1001 X 1024). If you enter more lines the previous lines will be deleted and most recent lines will be displayed. So it can handle 1001*1024= 1,025,024 characters to display at a time.





Limitations to Display on QTP Message dialog window:

We also very much familiar with Msgbox command in VB Script that is use to display output message in Message Dialog Window with ok button.

Syntax: Msgbox “text”

The maximum length of characters Prompt is exactly 1023 characters. But it might depend also on the width of the characters used. If Prompt consists of more than one line, you can separate the lines using a carriage return character (Chr(13)), a line feed character (Chr(10)), or a carriage return/linefeed character combination (Chr(13) & Chr(10)) between each line.

This has been tested with the following code:

Dim Num
Num=RanNumber(1023)
print Num
msgbox Num

Function RanNumber(val)
Dim d
Set d=nothing
Set d = createobject("Scripting.Dictionary")
For i =1 to val
r=RandomNumber (0,9)
d.add i, r
Next
a = d.items 'Get the items.
For i = 0 To d.Count -1 ' Iterate the array.
s = s&a(i)'Create return string.
Next
RanNumber=s
End Function


Tuesday, August 18, 2009

Mercury QuickTest Professional Shortcut Key Reference Card

Mercury QuickTest Professional Shortcut Key Reference Card

File Menu

New > Test CTRL + N
New > Business Component CTRL + SHIFT + N
New > Scripted Component ALT + SHIFT + N
New > Application Area CTRL +Alt + N
Open > Test CTRL + O
Open > Business Component CTRL + SHIFT + O
Open > Application Area CTRL + ALT + O
Save CTRL + S
Export Test to Zip File CTRL + ALT + S
Import Test from Zip File CTRL + ALT + I
Print CTRL + P

Edit Menu

Cut CTRL + X (EV only)
Copy CTRL + C
Paste CTRL + V
Delete DEL
Undo CTRL + Z (EV only)
Redo CTRL + Y (EV only)
Rename Action F2
Find CTRL + F (EV only)
Replace CTRL + H (EV only)
Go To CTRL + G (EV only)
Bookmarks CTRL + B (EV only)
Complete Word CTRL + Space (EV only)
Argument Info CTRL + SHIFT + SPACE (EV only)
Apply “With” To Script CTRL + W (EV only)
Remove “With” Statements CTRL + SHIFT + W (EV only)

Insert Menu

Checkpoint > StandardCheckpoint F12
Output Value > Standard Output Value CTRL + F12
Step > Step Generator F7
New Step F8 OR INS (KV only)
New Step After Block SHIFT + F8 (KV only)
Key: KV = Keyword View
EV = Expert View

Test/Component/Application Area Menu

Record F3
Run F5
Stop F4
Analog Recording CTRL + SHIFT + F4
Low Level Recording CTRL + SHIFT + F3
Step Menu
Object Properties CTRL + ENTER
Value Configuration Options CTRL + F11 on an input value
(KV only)
Output Options CTRL + F11 on an output value
(KV only)

Debug Menu

Pause PAUSE
Step Into F11
Step Over F10
Step Out SHIFT + F11
Insert/Remove Breakpoint F9
Clear All Breakpoints CTRL + SHIFT + F9

Data Table Options

Edit > Cut CTRL + X
Edit > Copy CTRL + C
Edit > Paste CTRL + V
Edit > Clear > Contents CTRL + DEL
Edit > Insert CTRL + I
Edit > Delete CTRL + K
Edit > Fill Right CTRL + R
Edit > Fill Down CTRL + D
Edit > Find CTRL + F
Edit > Replace CTRL + H
Data > Recalc F9
Insert Multi-line Value CTRL + F2 while editing cell
Activate next/previous sheet CTRL + PAGEUP/CTRL + PAGEDOWN

General Options

View Keyword View/Expert View CTRL + TAB
Open context menu for step or Data Table cell SHIFT + F10
or Application key ( )
Expand all branches * [on numeric keypad] (KV only)
Expand branch + [on numeric keypad] (KV only)
Collapse branch - [on numeric keypad] (KV only)


Here is a QTP References Card from Bas M. Dam

Friday, July 24, 2009

How to create a VBA Function Library for Use in VBScript/QTP

Creating a VBA Function Library for Use in VBScript/QTP:
1. Open your MS Excel Sheet.

2. Open a Module to write a VBA function. To open open Visual Basic Editor mudule folow this: Click ‘Tools => Macro => Visual Basic Editor
(This could be different for different version of MS Excel)

3. Insert => Module


4. Write your functions in the module



5. Save your excel work book in a folder with suitable name(for example: C:\Joli.xls), you need to provide this path to your qtp script.

6. Write the code in QTP to use your VBA functions

‘Create Excel application Object
‘Use Run method of application to run the function
‘Run (“’Path of excel file’!Modulename.Function Name”,”i/p Arguments”,”i/p arguments”)

Thursday, July 16, 2009

Class Use in VB Scripts

Class Use in VB Scripts:
Here is the basic example of creating a Class. Class ‘Student’ has been created to define the properties of a student. Then created a new instance (objStudent) to use this class definitation. This is a very basic example of Class. Following this class concept, you will be able to write any complex script using class.

Class Student
'In the declaration section of the Student class module
Public StudentID
Public FirstName
Public LastName
Public MajorCode
Public YearLevel
Public BirthDate

End Class

'Declare an object Student
Dim objStudent

'Create an instance of the class
Set objStudent = New Student
On Error Resume Next

'Use the object Student
objStudent.StudentID = "12345" '& CLng(2)
'Err.Raise 6
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear
On Error GoTo 0
objStudent.FirstName = "Cathrina" '& CStr(lngCount)
objStudent.LastName = "Aniversario" '& CStr(lngCount)
objStudent.MajorCode = "C" '& CStr(lngCount)
objStudent.YearLevel = "Freshmen"' & CStr(lngCount)
objStudent.BirthDate = "Oct 10, 1980"' & CDate(lngCount)

MsgBox "Student ID : " & objStudent.StudentID & vbCrLf & _
"Student Name : " & objStudent.FirstName & " " & _
objStudent.LastName & vbCrLf & _
"Major Code : " & objStudent.MajorCode & vbCrLf & _
"Year : " & objStudent.YearLevel & vbCrLf & _
"BirthDate : " & objStudent.BirthDate

Set objStudent = Nothing

Wednesday, July 15, 2009

Good Sites to Hang around for QTP

Here are some good Sites to hang around for QTP learner:
Personal WebPages/Blogs:
http://www.advancedqtp.com/ - Solmar
http://mercuryquicktestprofessional.blogspot.com/ - Ankur Jain
http://www.learnqtp.com/ -Ankur Jain
http://www.intellipro.co.uk/automation.htm - Bill (Intellipro)
http://knowledgeinbox.com/ - Tarun Lalwani
http://geekswithblogs.net/tmoore/Default.aspx - Theo Moore
http://www.softwareinquisition.com/ -Will Roden
http://www.askqtp.blogspot.com – Animesh
http://rajivkumarnandvani.wordpress.com – Ravi Kumar
http://quicktestprofessional.wordpress.com - Mohan Kumar Kakarla
http://automated-chaos.blogspot.com - Bas M. Dam (from Netherland)

----------------------------********************---------------------------------

Forums:
http://tdforums.tdadmins.com/index.php?act=idx
http://www.sqaforums.com
http://www.advancedqtp.com/forums

----------------------------********************---------------------------------

Some direct sites to access :
http://rajivkumarnandvani.wordpress.com/2009/04/
http://quicktestprofessional.wordpress.com/category/excel-automation/
http://www.catenary.com/howto/compare.html
http://qtpsecrets.com/Demos.html
http://msdn.microsoft.com/en-us/library/x0fxha2a(VS.85).aspx
http://bughunterz.blogspot.com
http://www.robvanderwoude.com/vbstech_objectbrowsers.php


Donate User Functions:
http://www.sqaforums.com/showflat.php?Number=347046



----------------------------********************---------------------------------

VB Scripts Sources:
http://www.jsware.net
http://billsway.com

VB Script Objects

As we know, we frequently create the objects to perform some specific functions using defining the objects in our programming script. Specially when we use qtp, to write a descriptive programming, we need to create this objects.

Here are some lists of objects that are frequently used in VB Script:


Set objEmail = CreateObject( "CDO.Message" )
Set objIE = CreateObject( "InternetExplorer.Application" )
Set objInet = CreateObject( "InetCtls.Inet.1" )
Set objHTTP = CreateObject( "WinHttp.WinHttpRequest.5.1" )
Set objExcel = CreateObject( "Excel.Application" )
Set objExcelSheet = CreateObject( "Excel.Sheet" )
Set objOutlook = CreateObject( "Outlook.Application" )
Set objPpt = CreateObject( "PowerPoint.Application" )
Set objWord = CreateObject( "Word.Application" )
Set objCal = CreateObject( "MSCAL.Calendar" )
Set objQPro = CreateObject( "QuattroPro.PerfectScript" )
Set objWP = CreateObject( "WordPerfect.PerfectScript" )
Set objConn = CreateObject( "ADODB.Connection" )
Set objRecSet = CreateObject( "ADODB.Recordset" )
Set objDic = CreateObject( "Scripting.Dictionary" )
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
Set wshNetwork = CreateObject( "WScript.Network" )
Set wshShell = CreateObject( "WScript.Shell" )
Set objRandom = CreateObject( "System.Random" )
Set objArrList = CreateObject( "System.Collections.ArrayList" )
Set objSortList = CreateObject( "System.Collections.SortedList" )
Set xmlDoc = CreateObject( "Microsoft.XmlDom" )
Set xml2Doc = CreateObject( "Msxml2.DOMDocument.5.0" )
Set objiTunes = CreateObject( "iTunes.Application" )
Set objPlayer = CreateObject( "WMPlayer.OCX" )
Set objWMPlayer = CreateObject( "WMPlayer.OCX.7" )
Set objReal = CreateObject( "rmocx.RealPlayer G2 Control.1" )
Set objFSDialog = CreateObject( "SAFRCFileDlg.FileSave" )
Set objFODialog = CreateObject( "SAFRCFileDlg.FileOpen" )
Set objDialog = CreateObject( "UserAccounts.CommonDialog" )
Set SOAPClient = CreateObject( "MSSOAP.SOAPClient" )
Set objWOL = CreateObject( "UltraWOL.ctlUltraWOL" )
Set objSearcher = CreateObject( "Microsoft.Update.Searcher" )
Set objShell = CreateObject( "Shell.Application" )
Set objDeviceReplay=CreateObject("Mercury.DeviceReplay")

Here are some examples how to use this objects:

Description: Creates and returns a reference to an Automation object.

Syntax: CreateObject(class)

The class argument uses the syntax servername.typename and has these parts:
servername: The name of the application providing the object.
typename: The type or class of the object to create.

Remarks: Automation servers provide at least one type of object. For example, a word-processing application may provide an application object, a document object, and a toolbar object. To create an Automation object, assign the object returned by CreateObject to an object variable:

Dim ExcelSheet
Set ExcelSheet = CreateObject("Excel.Sheet")

This code starts the application creating the object (in this case, a Microsoft Excel spreadsheet). Once an object is created, you refer to it in code using the object variable you defined. In the following example, you access properties and methods of the new object using the object variable, ExcelSheet, and other Excel objects, including the Application object and the Cells collection. For example:

' Make Excel visible through the Application object.
ExcelSheet.Application.Visible = True

' Place some text in the first cell of the sheet.
ExcelSheet.Cells(1,1).Value = "This is column A, row 1"

' Save the sheet.
ExcelSheet.SaveAs "C:\DOCS\TEST.XLS"

' Close Excel with the Quit method on the Application object.
ExcelSheet.Application.Quit

' Release the object variable.
Set ExcelSheet = Nothing


Example 2: ("Excel.Application" )

For example to create an excel application object:


‘Close all the open excel sheet open on your desktop
Systemutil.CloseProcessByName "excel.exe"

'Create a new excel file
Set Excel = createObject("Excel.Application")

‘Open the excel sheet
Set SExcelSheet = Excel.Workbooks.Open("D:\Data\Compa.xls")

‘Show the excel sheet in your desk to
SExcelSheet.Application.visible=true

‘Write the value (text) in the excel sheet(in 1st row, 2nd column)
'Excel.ActiveSheet.cells(1,2).value="Text"
'Excel.ActiveSheet.cells(1,1).value="Outertext_tag"

'Close any pop up alart message box due to excel error
Excel.DisplayAlerts = False
'To run a macro in excel
Excel.Run "Compa"
‘Save the same updated file in different location with different name
SExcelSheet.SaveAs "D:\Elements\BaseLine.xls"

‘Close the excel sheet
SExcelSheet.Close

‘quit the excel application from system
Excel.Quit


-----------------
Example 3A: ("Scripting.FileSystemObject")



'Drive path where you want to create the folder
strDrive = “D:/Data”

'Name of the folder to be created
strfoldername= "New Folder"'

‘Combined the path with folder name
strPath= strDrive&strfoldername

' Create FileSystemObject.
Set objFSO = CreateObject("Scripting.FileSystemObject")

On Error Resume Next ' pass this error if folder already exist

' Create a Folder, using strPath
Set objFolder = objFSO.CreateFolder(strPath)


-------------------
Example 3B:


' Get the name of file extentionmsgbox
GetAnExtension("D:\Documents and Settings\Execution Summary.htm
Function GetAnExtension(DriveSpec)
Dim fso Set fso = CreateObject("Scripting.FileSystemObject")
GetAnExtension = fso.GetExtensionName(Drivespec) 'msgbox GetAnExtension
End Function


-----------------------
Example 4: ("CDO.Message")



Dim objMessage
‘create the message object to send an email
Set objMessage = CreateObject("CDO.Message")

‘Add subject on your message
objMessage.Subject = "QTP Results - Automated Testing"

objMessage.From = "QTPTesting@address.com" ' Change this for your own from address

objMessage.To = your@email.com 'Send to email id
objMessage.CC = your@email.com 'CC to email id
‘Body text message
objMessage.TextBody ="N.B. - Please Do Not Reply This Message Directly.”

'Include File attachments here
objMessage.AddAttachment “D:\Data\file.text”

'This section provides the configuration information for the remote SMTP server.
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "someserver.domain.com"

'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update

'End remote SMTP server configuration section==
‘Send the email
objMessage.Send


-------------------
Example 5: ("Wscript.Shell")



Set WshShell = CreateObject("Wscript.Shell")
Dim Response
' Displays a message box with the yes and no options.
Response = MsgBox("Please Select your choice as 'Yes' or 'No'." & vbcrlf & vbcrlf & "Do you want to Select “Yes” or “No” ?", vbYesNo)
' If statement to check if the yes button was selected.
If Response = vbYes Then
‘message box will appear for 3 second
WshShell.Popup "You Have Been Selected “Yes”. Please wait.", 3, "Your Selection" ‘-WshSheel.Popup “message”, “time to wait”, “message box title”

Else
' The no button was selected.
‘message box will appear for 5 second
WshShell.Popup "You Have Been Selected “No”", 5, "Your Selection"
End


-----------------------------
Example 6A: ("Mercury.DeviceReplay")


Here is the example of 'Mercury.DeviceReplay' Object used in QTP:



abs_x = objWebList.GetROProperty("abs_x")
abs_y = objWebList.GetROProperty("abs_y")
Set objMercuryMouse = CreateObject ("Mercury.DeviceReplay")
mercuryMouse.MouseMove abs_x,abs_y
Wait(3)

Example 6B:("Mercury.DeviceReplay")
We can use 'Mercury.DeviceReplay' simply to enter data in the fields. Here is a simple example of this. But before using this object, you need to select the object where the data needs to enter

obj.click
For i = 1 to 10
Set dr=CreateObject("Mercury.DeviceReplay")
dr.SendString("hi")
Set dr=Nothing
Next


----------------------------
Example 7("Scripting.Dictionary")

This function will generate user specified random numbers


RanNumber(2000)

Function RanNumber(val)
Dim d Set d=nothing
Set d = createobject("Scripting.Dictionary")
For i =1 to val
r=RandomNumber (0,9)
d.add i, r
Next
a = d.items 'Get the items.
For i = 0 To d.Count -1 ' Iterate the array.
s = s&a(i)'Create return string.
Next
RanNumber=s
End Function



----------------------------
Example 8A: ("ADODB.Connection") /("ADODB.Recordset")

This function will execute an specific query from database using a dedicated database connection string



Function database()
v_DBInstance="RENPCRT8"
v_MHXMLDBPwd="grudge"
v_MHXMLDBSchema="Mhxmledit"

'DATABASE connection
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")
objConnection.Open "DRIVER={Microsoft ODBC for Oracle};UID="& v_MHXMLDBSchema &" ;PWD=" & v_MHXMLDBPwd & ";SERVER=" & v_DBInstance &";"
objRecordset.CursorLocation = adUseClient
objRecordset.CursorType = adopenstatic
objRecordset.LockType = adlockoptimistic
objRecordset.Source="select SOP from MHXML.FIRMS_STG where org_id in 681915"
ObjRecordset.ActiveConnection=ObjConnection
ObjRecordset.Open 'This will execute query
If ObjRecordset.recordcount>0 then
Field1 = ObjRecordset("SOP").Value
'Field2 = ObjRecordset("LAST_NAME").Value
msgbox Field1
'msgbox Field2
End if
End Function


----------------------------
Example 8B: ("Database connection without ADODB.Connection Object")

This function will retrive the database value even if the value is null or empty.

Function GetAttorneyInfo(InField,ALid)

v_DBInstance="RENPCRT8"
v_MHXMLDBPwd="creek"
v_MHXMLDBSchema="lbmgradmin"
GetAttorneyInfo=""
' Creating the database connection
MHXMLconnection_string="DRIVER={Microsoft ODBC for Oracle};UID="& v_MHXMLDBSchema &" ;PWD=" & v_MHXMLDBPwd & ";SERVER=" & v_DBInstance &";"
isMHXMLConnected = db_connect ( MHXMLConnection ,MHXMLconnection_string )
If isMHXMLConnected=0Then ' get the data from the table
v_Exe_SQL2="Select length(NVL(" & InField & ",'Data Not Found')) from lbmgradmin.ilv_vw where ilisting_id = " & ALid
set RecSet_SOPInfo_LEN=db_execute_query( MHXMLConnection , v_Exe_SQL2 )
d_SOPInfo_Length=db_get_field_value( RecSet_SOPInfo_LEN , 0 , 0 )
'msgbox d_SOPInfo_Length
v_Exe_SQL2="select substr(to_char(NVL(" & InField & ",'Data Not Found')),1," & d_SOPInfo_Length & ") from lbmgradmin.ilv_vw where ilisting_id = " & ALid
set RecSet_SOPInfo=db_execute_query( MHXMLConnection , v_Exe_SQL2 )
RowCnt=db_get_rows_count( RecSet_SOPInfo )
If RowCnt=1Then
d_SOPInfo=db_get_field_value( RecSet_SOPInfo , 0 , 0 )
else
datatable.SetCurrentRow(1)
d_SOPInfo=db_get_field_value( RecSet_SOPInfo , 0 , 0 )
End If
else
End If
'If isMHXMLConnected=0 Then db_disconnect MHXMLConnection

GetAttorneyInfo=d_SOPInfo
End Function

' Database functions


Function db_connect( byRef curSession ,connection_string)
dim connection
on error Resume next
' Opening connection
set connection = CreateObject("ADODB.Connection")
If Err.Number <> 0 then
db_connect= "Error # " & CStr(Err.Number) & " " & Err.Description
err.clear
Exit Function
End If
connection.Open connection_string
If Err.Number <> 0 then
db_connect= "Error # " & CStr(Err.Number) & " " & Err.Description
err.clear
Exit Function
End If
set curSession=connection
db_connect=0
End Function

' Db Disconnect - Function to disconnect the database connection


Function db_disconnect( byRef curSession )
curSession.close
set curSession = Nothing
End Function

' DB Execute Query - Function to execute the query


Function db_execute_query ( byRef curSession , SQL)
set rs = curSession.Execute( SQL )
set db_execute_query = rs
End Function

' DB Function to get the number of rows in the record set


Function db_get_rows_count( byRef curRS )
dim rows
rows = 0
curRS.MoveFirst
Do Until curRS.EOF
rows = rows+1
curRS.MoveNext
Loop
db_get_rows_count = rows
End Function

' Function to fetch the records from the record set


Function db_get_field_value( curRecordSet , rowIndex , colIndex )
dim curRow
curRecordSet.MoveFirst
count_fields = curRecordSet.fields.count-1
If ( TypeName(colIndex)<> "String" ) and ( count_fields < db_get_field_value =" -1" db_get_field_value =" curRecordSet.fields(colIndex).Value">



----------------------------

Example 8C: ("ADODB.Connection") /("ADODB.Recordset")
This following code will get the data from excel sheet located on the following path:
Dim Get_Field
set connectToDB = CreateObject("ADODB.Connection")
connectToDB.Provider = "Microsoft.Jet.OLEDB.4.0"
connectToDB.Properties("Extended Properties").Value = "Excel 8.0"
connectToDB.Open "D:\Documents and Settings\pauldx\Desktop\Data.xls"
strQuery="Select Age from [Data$] WHERE Name ='Joli'"
Set rsRecord = CreateObject("ADODB.Recordset")
rsRecord.Open strQuery,connectToDB,1,1
' msgbox rsRecord.RecordCount
If rsRecord.RecordCount>0 Then
for i= 1 to rsRecord.RecordCount
Get_Field=rsRecord.Fields(0)
print Get_Field
rsRecord.movenext
next
Else
Get_Field="Field Not Present"
End If



Example 9:("AcroExch.App" / "AcroExch.AVDoc")


‘Below code search for word ‘Software’ from the pdf file



Option Explicit
Dim accapp, acavdocu
Dim pdf_path, bReset, Wrd_count
pdf_path="C:\Program Files\Om\Om 1.1 User Manual.pdf"
‘AcroExch is acrobat application object
Set accapp=CreateObject("AcroExch.App")
accapp.Show()

‘Need to create one AVDoc object par displayed document
Set acavdocu=CreateObject("AcroExch.AVDoc")

'Opening the PDF
If acavdocu.Open(pdf_path,"") Then
acavdocu.BringToFront()
bReset=1 : Wrd_count = 0
'Find Text Finds the specified text, scrolls so that it is visible, and highlights it
Do While acavdocu.FindText("software", 1, 1, bReset)
bReset=0 : Wrd_count=Wrd_count+1
Wait 0, 200
Loop
End If

accapp.CloseAllDocs()
accapp.Exit()
msgbox "The word 'software' was found " & Wrd_count & "times"
Set accap=nothing : Set accapp=nothing

(Note: you can only use the following code if you have acrobat professional installed. If you just have adobe reader standard version installed you will get this error message - "ActiveX component can't create object: 'AcroExch.PDDoc")

-------------------------------------
Example 10:("DotNetFactory")
These Functions will conversion of Binary to Hexadecimal/ Decimal or vice versa.
Here we can see the use of DotNetFactory utility with create an instance of “System.Convert”

‘Binary to Hexadecimal conversion
Print "&H: " & BinToHex("00001110100111011111101000111011")

Function BinToHex( bits )
If( bits <> "" ) Then
BinToHex = 2 * BinToHex( Left( bits, Len( bits ) - 1 ) ) + CLng( Right( bits, 1 ) )
End If
End Function

‘Decimal to Binary conversion
Print DecToBin(245234235,32)

Public Function DecToBin( decNum, bitsCount )
Dim str
str = DotNetFactory.CreateInstance( "System.Convert" ).ToString( Clng( decNum ) , 2 )
DecToBin = String( bitsCount - Len( str ), "0" ) & str
End Function