GP/QTP Automation: Conclusion but not closure
The main question – whether it’s possible to automate Microsoft Dynamics Great Plains application testing (OS Patch smoke tests, UAT/Regression tests) – was answered positively, and proven in the actual implementation of automated test scenarios.
Tools and Technologies
Standard GUI recognition method (via Windows Handle) used by UI Automation tools was ineffective because Dynamics Dexterity uses it’s own, intended to be platform-independent, GUI Rendering Engine. However, Microsoft provides an additional product, Continuum, that may serve as a gateway between a regular Windows messaging system and Dynamics Dexterity. COM technology should be used in order to connect to Great Plains through Continuum.
HP/Mercury Quick Test Professional was selected as a mature, enterprise level product, technically capable to recognize and handle Systems.Windows.Forms GUI, and integrate custom Dexterity GUI handling library I developed.
Issues and Workarounds
Two major issues were discovered during investigation and development.
1) VBScript limitation based on its “Variant” data type incompatible with “string pointer” data type through COM calls.
The issue was resolved by using MS Excel as COM Automation object, both as a server (to QTP) and a client (to Dynamics.Dexterity instance).
The issue was resolved by using Dexterity Macros to bypass GUI forms defined in third-party dictionaries and thus inaccessible through sanScript.
Service Components Developed
Four Service Components were developed to supplement Test Automation and Automated Testing of MS Dynamics Great Plains application.
2) SanScript custom code (see examples)
3) Interface class in MS Excel
4) Dexterity GUI function library for QTP (interaction with the all common Dexterity GUI controls, like Edit Boxes, List/Combo Boxes, Radio Groups, Check Boxes, etc.)
Links to the all information I posted could be found on the Reference Page.
Currently the project’s status is “successfully implemented and finished” for me but I may keep adding additional code examples or answering questions I receive.