views:

916

answers:

4

I have recently completed a detailed investigation regarding GP functional test automation possibilities with QTP, TestComplete, and other GUI recognition/interaction tools. In short, none of the tools acted well. Mentioned above did best but still featured a lot of hard-coding in recorded sample scripts. QTP did significantly better though.

Some of the GUI were recognized under .NET (swf... in QTP) and handled well. Some other were recognized as swfObject only but accessing native methods and properties allowed performing required interaction.

Finally, object internally named "Microsoft.Dexterity.Shell.DexDialogHost" renders objects that seem don't have Windows Handle and thus unrecognizable by QTP. I haven't found any detailed documentation on those objects family (like class reference to find out names of methods).

So I was wondering if someone could share experience automating GP and what tools / approach were used.

Thanks.

A: 

If QTP doesn't recognise some controls you can extend the set of controls it supports by using .NET Extensibility. This allows you to add new functionality which is relevant for these controls but is not supported out of the box by QTP. Note that some .NET programming is required.

The documentation for .NET Extensibility is available at Start > Programs > QuickTest Professional > Extensibility > Documentation > .NET Add-in Windows Forms Extensibility Help


Fact of the day: The SWF in .NET objects' names in QTP stands for System Windows Forms.

Motti
Hi Motti,Thank you for the reply.Sadly it's completely irrelevant to my question.The Extensibility Kit you mentioned works from the application side. Yes, theoretically you can put extra development efforts into the application you create. And even in this case some paperwork should be done to get an approval.Now read back about the Application I'm dealing with.1) This is vendor's application.2) This is Microsoft / Dynamic Great Plains. 3) The unrecognized GUI is Dexterity. Those objects are drawn on the special panel. Most likely the objects don't even have a handle.
Albert Gareev
Hi Albert, I'm not familiar with GP but you're mistaken when saying that .NET Ext is irrelevant when working with another vendor's app. .NET Ext is non intrusive and can be used on any control that has an `HWND`, so my solution will only work for those controls that are currently recognized as `SwfObject` not those that inherit from `Microsoft.Dexterity.Shell.DexDialogHost`. As for controls w/o `HWND`, I don't know :o(
Motti
Hi Motti, I get your point better now. But isn't it simpler just directly address native methods and properties of .NET objects mapped in QTP as a generic SwfObject? I don't use QTP built-in framework anyway, I go with my own hybrid keyword/data driven with more abstract object types. So I could implement wrapping but the major problem: they are not even inherited! They are rendered within the DexterityHost object I mentioned. That has been done to make Dexterity-based applications (GP, in particular) platform-independent. I'll post the update here or in my blog if I find out some more info.
Albert Gareev
A: 

With regards to the objects that were partially successful, the ones you noted were recognized as SwfObject - if these logically map to a standard class, you can configure QTP to treat it as a standard class. For example, if you have an SwfObject that behaves like a button, you can configure QTP to record and replay as if it is a standard button.

[removed suggested keystroke+clipbaord work-around as it is inappropriate for this situation given further information that there are multiple Dexterity dialogs, each with many objects]

Tom E
Hi Tom,Seriously, did you r_e_a_d my question? Did I ask something "how to workaround"? I asked if someone had a real experience dealing with that.I appreciate the answers... but I assume they should be something at least a little bit relevant to the question.What do you mean by saying "Most GP functional tools", "GP tool did not recognize"?? GP is abbreviation for "Great Plains". That is the Application Under Test, not a Tool.
Albert Gareev
Keyboard workarounds?? To give you an idea: imagine a dialog / window full of input boxes, radiobuttons, labels, checkboxes, and other stuff - and rendered by Dexterity object. The contents is not recognizible at all. What a hard-coded mess would be the script handling even a single Dexterity dialog that way! It completely doesn't worth to automate when you don't see any object within the window.
Albert Gareev
Albert, seriously, I did r_e_a_d your question. Clearly I made a mistake in taking GP = "General Purpose" as opposed to "Great Plains" in your question title. With the additional detail that you have multiple Dexterity dialogs, each chock full of unrecognizable objects, then I agree my work-around would be insufficient. However, regarding my first point about mapping your SwfObject to standard classes, this could be of value to you.
Tom E
A: 

It took a while for me to conduct a research, and then practically prove the concept. I started series of posts about Great Plains automation success story where I put all the details and steps of my investigation along with sample code.

http://automation-beyond.com/2009/08/24/great-plains-automation/

http://automation-beyond.com/2009/08/26/dynamics-great-plains-gui/

http://automation-beyond.com/2009/09/01/gp-automation-utilizing-com/

(to be continued)

Here's the summary.

  1. Microsoft Dynamics Great Plains has its own completely independent GUI/Event system (Dexterity) that makes it cross-platform product. The same thing makes it almost completely "black box" not accessible from outside.

  2. Platform-specific engine supports COM Automation and various integration models for Windows platform. All these are gathered under Continuum Integration Library name.

  3. What is especially useful for Test Automation needs, Continuum provides high-level methods to simulate user inputs for the GUI thus acting the same way as Test Automation Tool does.

  4. Wherever Continuum doesn't cover Test Automation needs, direct calls of sanScript (Dexterity's internal scripting language) could be executed in real-time.

  5. With all the above, I created custom "Dexterity GUI" component for Quick Test Professional enabling functional test automation of Microsoft Dynamics Great Plains application. Of course, without any use of keyboard/mouse hard-coded workarounds.

Thank you.

Albert Gareev
A: 

You can download the .NET Add-In from hp. link text

DSL