Managing Recovery Scenarios (QTP, VBScript)
As promised, I’m writing more detailed post on QTP Recovery Scenario management.
Overview
Exception / Event Handlers in QTP are declared as “Recovery Scenarios” through wizard dialogs and editable with Recovery Scenario Manager.
All exception handlers must be added to test script to use them.
Programmatically exception handlers are accessible through Recovery object.
During run-time, exception handlers can be enabled or disabled. Disabled handler does not impact QTP performance.
Object-Oriented Approach
Let’s start with declaration of a Handler object. For simplicity, I’ll use public access properties and methods.
Exception Handler
'Exception Handler Class tpExceptionHandler Public SelfName 'Name to report Public Position 'Position index Public Target 'Object reference - Pop-up Window or Dialog Public Cases ' Exception Cases list (Dictionary) End Class
Although exception handlers are always hooked on specific GUI window, applications usually re-use same window to display different kinds of messages.
Each Exception Case defines one possible message displayed by an application-under-test.
Exception Case
'Exception Case Class tpExceptionCase Public SelfIndex Public Response Public State End Class
Methods
Each object class needs initialization methods.
Public Function DefineHandler(ByVal sName, ByVal intPos) Dim objExceptionHandler Set objExceptionHandler = new tpExceptionHandler objExceptionHandler.SelfName = sName objExceptionHandler.Position = intPos Set objExceptionHandler.Cases = CreateObject("Scripting.Dictionary") Set DefineHandler = objExceptionHandler End Function '...... Public Function DefineExceptionCase(ByVal sCaseIndex, ByVal sResponse, ByVal intState) Dim objExceptionCase Set objExceptionCase = new tpExceptionCase objExceptionCase.SelfIndex = sCaseIndex objExceptionCase.Response = sResponse objExceptionCase.State = intState Set DefineExceptionCase.Cases.Item(sCaseIndex) = objExceptionCase End Function
Tying QTP Recovery Scenarios to Object Model
intPos = Recovery.GetScenarioPosition("API\Exceptions\AppExceptions.qrs", "Handler1") Set objHandler1 = DefineHandler("Handler1", intPos) Set objHandler1.Target = Window("App Main").Dialog("Warning") 'Note: you may also use Descriptive Programming notation to define Target intPos = Recovery.GetScenarioPosition("API\Exceptions\AppExceptions.qrs", "Handler2") Set objHandler2 = DefineHandler("Handler1", intPos) Set objHandler2.Target = Window("App Main").Dialog("Error") 'Note: you may also use Descriptive Programming notation to define Target '.... 'We can define and add Exception Cases at any point of execution Set objXCPCase1 = DefineExceptionCase("error_message1", "Invalid password", micFAIL) Set objHandler2.Cases.Item(objXCPCase1.SelfIndex) = objXCPCase1
Activate / Deactivate Exception Handlers
Enable
Recovery.SetScenarioStatus objHandler1.Position, True
Disable
Recovery.SetScenarioStatus objHandler1.Position, False