Error Handling in VBScript or in UFT:
Errors are something which is a resultant of deviation from the assumption or requirement or rules via code.It may happen due to syntax mismatch,invalid user input or unavailability of system resources.
Errors in VBScript or UFT are broadly classified as
- Syntax Error
- Runtime Error
- Logic Error
Syntax Error aka Compilation Error
It halts the code execution due to the syntax error. VBScript engine reads the script file and tries to parse the code by converting into meaningful tokens. During this process, if the VBScript engine finds some unacceptable code format due to unrecognizable structure or expressions, it points out this as compilation error or Syntax error.
Example of Syntax error:
Dim myMarks myMarks=66 If (myMarks>60) msgbox "Kudos you got 1st division" End If
Error: Expected Then
Now as the WSH provides clear error details, it is very easy to detect and rectify the Syntax errors.
Why Syntax Error Occurs?
Below are the prime reasons why Syntax Error happens:
- If we miss providing mandatory structure information(like keywords, blocks, commas, parenthesis etc)
- Spelling mistake while using variables, procedures calls, function calls or expressions.
- Keywords related to other Microsoft tools(Excel, VBA etc) which are not supported by VBScript.
- Functions related to other Microsoft tools(Excel, VBA etc) which are not supported by VBScript. Mostly these functions need to be defined before using.
- VBScript has backward compatibility hence versions generally do not play a major role in a Syntax error. But Script written in higher VBScript version may not work well in the lower VBScript versions.
- Dynamic code generation and execution creates a huge problem in VBScript(command like ExecuteGlobal, Execute or Eval needs extra care).
Common Syntax Error with Error code an Description
|Hexadecimal Error Code||Decimal Error Code||Comments|
|800A03E9||1001||“Out of memory” error.|
|800A040F||1039||“Invalid ‘exit’ statement” error.|
|800A0410||1040||“Invalid ‘for’ loop control variable” error|
|800A03ED||1005||“Expected ‘(‘ ” error.|
|800A0411||1041||“Name redefined” error.|
|800A03EE||1006||“Expected ‘)’ ” error.|
|800A0412||1042||“Must be first statement on the line” error.|
|800A03F2||1010||“Expected identifier” error.|
|800A0414||1044||“Cannot use parentheses when calling a Sub” error.|
|800A03F3||1011||Expected ‘=’ error.|
|800A03F4||1012||Expected ‘If’ error.|
|800A0415||1045||“Expected literal constant” error.|
|800A03F5||1013||“Expected ‘To’ ” error.|
|800A0416||1046||“Expected ‘In’ ” error.|
|800A03F6||1014||“Expected ‘End’ ” error.|
|800A0418||1048||“Must be defined inside a Class” error.|
|800A0417||1047||“Expected ‘Class’ ” error.|
|800A03F7||1015||“Expected ‘Function’ “error.|
|800A0419||1049||“Expected Let , Set , or Get in property
|800A03F8||1016||“Expected ‘Sub’ ” error.|
|800A03F9||1017||“Expected ‘Then’ ” error.|
|800A041A||1050||“Expected ‘Property’ ” error.|
|800A03FA||1018||“Expected ‘Wend’ ” error.|
|800A041B||1051||“Number of arguments must be consistent across properties specification” error|
|800A03FB||1019||“Expected ‘Loop’ ” error.|
|800A041C||1052||“Cannot have multiple default property/method in a Class” error,|
|800A03FC||1020||“Expected ‘Next’ ” error.|
|800A041D||1053||“Class initialize or terminate do not have arguments” error.|
|800A03FD||1021||“Expected ‘Case’ ” error.|
|800A041E||1054||“Property Set or Let must have at least one argument” error.|
|800A03FE||1022||“Expected ‘Select’ ” error.|
|800A041F||1055||“Unexpected ‘Next’ ” error.|
|800A03FF||1023||“Expected expression” error.|
|800A0421||1057||” ‘Default’ specification must also specify ‘Public’ ” error.|
|800A0400||1024||“Expected statement” error.|
|800A0422||1058||” ‘Default’ specification can only be on property Get” error.|
|800A0401||1025||“Expected end of statement” error.|
|800A0402||1026||“Expected integer constant” error.|
|800A0403||1027||“Expected ‘While’ or ‘Until’ ” error.|
|800A0404||1028||“Expected ‘While’, ‘Until’, or end of statement” error.|
|800A0405||1029||“Expected ‘With’ ” error.|
|800A0406||1030||“Identifier too long” error.|
|800A0407||1013||“Invalid number” error.|
|800A0408||1014||“Invalid character” error.|
|800A0409||1015||“Undermined string constant” error|
|800A040A||1034||“Undermined comment” error.|
|800A040D||1037||“Invalid use of ‘Me’ keyword” error.|
|800A040E||1038||” ‘loop’ without ‘do’ “error.|
A runtime error occurs when we try to perform a command on an invalid action. These codes get compiled as there is not a Syntax error but failed in the runtime and generate a Runtime error. Runtime errors are not the same as Syntax errors. Here the source information always is “Microsoft VBScript runtime error.”
Runtime errors are not easily detected during the development time of the script.
Runtime errors can be classified as:
- Non VBScript Runtime error
- Native VBScript runtime error
- Variable declaration related due to Option Explicit runtime error.
Non-VBScript Runtime Error
These runtime errors are not generated by the VBScript engine. They are generated by some other components which are attached to VBScript.
Like ADO,ActiveX,DataObject etc
Native VBScript Runtime Error
Native VBScript runtime error happens when the user performs some illegal operations. Mostly these errors are recorded and stored in VBScript Engine.
These errors happen when:
- One performs wrong arithmetic operations.
- Read from a database having a null value
- Keep reading even after the control reached at the End of File.
- Wrongly used Null in the expressions.
Example of Native Runtime Error
Option Explicit Dim myVar myVar=10/0 msgbox "The result is"+ myVar
Error-Division by zero
Example of Native Runtime Error
Dim myVar myVar=Null msgbox "The result is"+ myVar
Error-Invalid Use of Null
Errors Related to Option Explicit
Option explicit can be a very good tool during the development of the scripts. It acts as a safeguard against accidental spelling mistakes while working with Variables or a strange error which can not be viewed in naked eyes.
Option Explicit also refers to a variable that has not been declared. So if we get a runtime error for option explicit statement that “variable is undefined”.We need to check the declaration of the variables.
Example of Error due to Option Explicit
Option Explicit Dim index For index=0 to 10 If(index=5) Then myVar="Hello" Msgbox myVar Else msgbox index End If Next
This code will work fine till Index=4. As soon as the index becomes 5, the VBScript engine will throw an error stating myVar variable is undefined. Now if we examine our code carefully, we can see the variable myVar has never been declared.
How to avoid the Runtime Error
Since Runtime is critical than Syntax error, we need to understand how to avoid a Runtime error. Below are the guideline to avoid the runtime error.
- We need to be well versed with VBScript syntax, rules.
- We need to carefully read the documentation for functions or sub before working with them.
- If we get some different, not so well stated error messages or errors like Unspecified errors or Operations aborted or Error occurred etc. we need to surrender to Google. Daddy google has all kind of answer for any sort of problem.
- The last option is to use a trial and error method. Once we get the different type of solutions from Google we need to apply these techniques in our script.
- We need to use comments while we fix those errors so that we can later understand the purpose of the code we just inserted to our script.
Common Runtime Errors with Error Code and Description
|Hexadecimal Error Code||Decimal Error Code||Comments|
|800A0005||5||“Invalid procedure call / Invalid argument” error.|
|800A0006||6||“Stack overflow” error.|
|800A0007||7||“Out of memory” error.|
|800A0009||9||“SubScript out of Range” error.|
|800A000A||10||Array related error -“already locked or fixed” error.|
|800A000B||11||“Division by zero” error.|
|800A000D||13||“Type mismatch” error|
|800A000E||14||“String out of space” error.|
|800A0011||17||“Can’t perform requested operation” error.|
|800A001C||28||“Stack out of space” error.|
|800A01A8||424||“Object required” error|
|800A01AD||429||“ActiveX component can’t create object” error.|
|800A01AE||430||“Class doesn’t support Automation” error.|
|800A01B0||432||“Filename or class name not found during
Automation operation” error.
|800A0023||35||“Function or sub not defined” error.|
|800A0030||48||“Error in loading DLL” error|
|800A01B6||438||“Object doesn’t support this property or method” error.|
|800A01BD||445||“Object doesn’t support this action” error.|
|800A01BF||447||“Object doesn’t support current locale setting” error.|
|800A01C0||448||“Named argument not found” error.|
|800A01C1||449||“Argument not optional” error.|
|800A01C2||450||“Wrong number of arguments or invalid property assignment” error|
|800A01C3||451||“Object not a collection” error.|
|800A01CA||458||“Variable uses an Automation type not supported in VBScript” error.|
|800A01CE||462||“Remote server machine does not exist or is unavailable” error.|
|800A01E1||481||“Invalid picture” error.|
|800A01F4||500||“Variable is undefined” error.|
|800A01F6||502||“Object not safe for scripting” error.|
|800A005B||91||“Object variable not set” error.|
|800A005E||94||“Invalid use of Null” error|
|800A005C||92||“For loop not initialized” error|
|800A01F7||503||“Object not safe for initializing” error.|
|800A01F8||504||“Object not safe for creating” error.|
|800A01F9||505||“Invalid or unqualified reference” error.|
|800A01FA||506||“Class not defined error”.|
|800A01FB||507||“An exception occurred error.|
|800A1390||5008||“Illegal assignment” error.|
|800A1399||5017||“Syntax error in regular expression”|
|800A139A||5018||“Unexpected quantifier” error|
|800A139B||5019||Expected ‘]’ in regular expression error.|
|800A139C||5020||“Expected ‘)’ in regular expression” error.|
|800A139D||5021||“Invalid range in character set” error.|
Logic errors are very tough to determine especially if a person debugs who never wrote the script. Logic errors are hidden inside our code and generally do not have a User Interface to show up. The only area we understand logic error when the piece of the code generates a wrong output. The output is different from what is desired.
How to avoid logic errors?
- We need to read the design specification, requirement documentation to understand the functionality and then inspect the code if that is doing what it is suppose to do.
- We need to follow “Divide and Develop” principal and implement stub and drivers in order to design our script sequentially correct.
- Check the code logic while using operators. or sendkeys.
- Use Custom runtime in different places.
How to handle VBScript Errors in UFT or VBScript Editor?
VBScript does not support try-catch block to handle the error or exceptions, instead, it supports to provide a Global error handling mechanism.
What is the Global Error Handling Scheme in VBScript/UFT?
The Global Error Handling Scheme includes:
- Display the error alert
- Logging mechanism
- Email the error
- Better code design in the error-prone area
- Use of Err object
- On Error Statement
Display the error alert
In this mechanism, the VBScript engine displays the error as an alert form. For standalone and small script it serves it purpose but not very effective while scripts are running in a batch mode. It often asks to hide the error. If the error could not be hidden, the execution stops and waits for the alert to be closed. This is a major pain point while running scripts in nightly mode or CDCTCI mode.
This is a nice feature to log the error to a different file instead of the display as an alert. The different file can be a flat file or an XML or a database or window event log. This process is hugely used in the current automation scenarios but very laid back or reactive approach.
Email the error
This mechanism puts a little dynamic behavior to the error handling as the moment VBScript encounters an error an email gets triggered /fired to the specified group mentioned earlier. The group can decide the fate of the error then and there.
Better code to handle the error phone area
As and when automation gets matured, the automation engineers can decide where to put an extra set of code to protect known error. This extra set of code put a safety net around the risky code. This approach takes some time to mature and has no immediate implementation. This scheme also greatly depends on the code’s experience.
Use of Err Object
Err is an intrinsic object that has global scope. As a result, it is always available with VBScript Engine in the script. There is an Err object always in the memory. As it is already available and attached to our script, we do not need to create one using CreateObject() to create an Err. We also do not need to have a variable to hold this object.