Sign in to follow this  
Followers 0
daluu

AutoIt limitation or bad UI design of application under test?

7 posts in this topic

Just wondering and would like to be enlightened on the topic, if anyone has info to share.

I have an example presented below and would like to know if the problem is an AutoIt limitation in GUI control detection or whether it is simply bad UI design of the application being tested, such that we would run into the same problems with any other GUI automation test tool, commercial or not.

Application to be tested is Counterpath's free X-Lite softphone. I want to read the text from the phone display (caller ID info, dialed number, check if VM message icon appears, # of missed calls, etc.). I also want to access the menu items and dial the keypad. However, I want to do all this without resorting to keyboard shortcut automation or relative screen coordinates within the application, purely based on GUI control identification (ID, name, etc.). How to achieve this? Or not possible? I haven't been able to do it.

Share this post


Link to post
Share on other sites



the only way would be to use the autoit window info tool and retrieve the data that way

Share this post


Link to post
Share on other sites

the only way would be to use the autoit window info tool and retrieve the data that way

@daluu: What he said. Post what you get from AU3Info.exe when you examine those controls.

;)


Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

Using AutoIt window detector, most of the controls (dialpad buttons, display, etc.) not detected as individual controls. They're seen as one big class it seems, called "Funky Window". There is no control ID or name, etc. X-Lite also has some expandable tabs that open up panes to the left and right, those areas have some controls that can be detected (IE/browser component at expanded left pane, and missed calls list on expanded right pane). Sadly, I don't care about the expanded panes, I just want the central window with the display and buttons.

Trying with the old version of RanorexSpy (~ver 1.5), I get same results but it mentions Funky Window class as control ID 0. But not much more.

So I take it this is more likely bad UI design than test tool limitation?

FYI, if anyone's interested, X-Lite is free, so you can explore this topic yourself as well.

Edited by daluu

Share this post


Link to post
Share on other sites

Test tool limitations AND bad UI design (from a testing perspective).

Controls on form are owner-drawn. The underlying executable does not export any functions to test below the GUI, nor does it appear to expose a COM interface. It appears to be a native Win32 app, so had no luck importing it as an assembly into a .NET driver. Active Accessibility did not reveal any 'secrets' either.

If you have any luck beyond sendkeys(...) and coordinated mouseclicks, I'd love to know how - but I don't see this app cooperating with any UI Automation that I'm familiar with.

Just my 2 cents. Good luck!

Zach...

Share this post


Link to post
Share on other sites

Thanks Zach. Just what I wanted to know/confirm.

Makes one wonder if Counterpath does any GUI automation with their softphones or if they do all the testing manually. Maybe they use custom automation code they keep to themselves...

Share this post


Link to post
Share on other sites

FWIW, the beta GUI exposes quite a bit to through Active Accessibility.

X-Lite Beta[window - Visible] {Action: ?, Description: ?, Role: window, Value: ?}
 |---  X-Lite Beta - [text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |---  NAMELESS[client - Visible] {Action: ?, Description: ?, Role: client, Value: ?}
 |     '---  NAMELESS[popup menu - Visible] {Action: ?, Description: ?, Role: popup menu, Value: ?}
 |         |---  X-Lite[menu item - Visible] {Action: Open, Description: ?, Role: menu item, Value: ?}
 |         |---  View[menu item - Visible] {Action: Open, Description: ?, Role: menu item, Value: ?}
 |         |---  Contacts[menu item - Visible] {Action: Open, Description: ?, Role: menu item, Value: ?}
 |         |---  Actions[menu item - Visible] {Action: Execute, Description: ?, Role: menu item, Value: ?}
 |         '---  Help[menu item - Visible] {Action: Open, Description: ?, Role: menu item, Value: ?}
 |---  NAMELESS[client - Visible] {Action: ?, Description: ?, Role: client, Value: ?}
 |     '---  NAMELESS[combo box - Visible] {Action: Expand, Description: ?, Role: combo box, Value: ?}
 |         |---  NAMELESS[editable text - Invisible] {Action: ?, Description: ?, Role: editable text, Value: ?}
 |         '---  Available[list item - Invisible] {Action: Double Click, Description: ?, Role: list item, Value: ?}
 |---  NAMELESS[push button - Invisible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |---  NAMELESS[push button - Invisible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |---  NAMELESS[push button - Invisible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |---  NAMELESS[client - Visible] {Action: ?, Description: ?, Role: client, Value: ?}
 |     |---  NAMELESS[client - Visible] {Action: ?, Description: ?, Role: client, Value: ?}
 |     |     |---  NAMELESS[editable text - Visible] {Action: ?, Description: ?, Role: editable text, Value: ?}
 |     |     |     |---  NAMELESS[scroll bar - Invisible] {Action: ?, Description: ?, Role: scroll bar, Value: 0}
 |     |     |     '---  NAMELESS[scroll bar - Invisible] {Action: ?, Description: ?, Role: scroll bar, Value: 0}
 |     |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  NAMELESS[push button - Invisible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     '---  NAMELESS[text - Invisible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  Call[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     '---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |---  NAMELESS[client - Visible] {Action: ?, Description: ?, Role: client, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  1[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |     '---  NAMELESS[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  2[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |     '---  ABC[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  3[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |     '---  DEF[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  4[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |     '---  GHI[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  5[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |     '---  JKL[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  6[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |     '---  MNO[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  7[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |     '---  PQRS[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  8[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |     '---  TUV[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  9[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |     '---  WXYZ[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  *[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |     '---  NAMELESS[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |     |---  0[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |     '---  NAMELESS[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     '---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |         |---  #[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |         '---  NAMELESS[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |---  NAMELESS[client - Visible] {Action: ?, Description: ?, Role: client, Value: ?}
 |     |---  NAMELESS[push button - Invisible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |---  No accounts are enabled.[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  To setup an account, go to: [text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  Account Settings[text - Visible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[text - Invisible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[text - Invisible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[text - Invisible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[text - Invisible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[text - Invisible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     |---  NAMELESS[text - Invisible] {Action: ?, Description: ?, Role: text, Value: ?}
 |     '---  Get VoIP service.[text - Invisible] {Action: ?, Description: ?, Role: text, Value: ?}
 |---  NAMELESS[radio button - Visible] {Action: Check, Description: ?, Role: radio button, Value: ?}
 |---  NAMELESS[radio button - Visible] {Action: Check, Description: ?, Role: radio button, Value: ?}
 |---  NAMELESS[radio button - Invisible] {Action: Check, Description: ?, Role: radio button, Value: ?}
 |---  NAMELESS[client - Visible] {Action: ?, Description: ?, Role: client, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |---  NAMELESS[editable text - Visible] {Action: ?, Description: ?, Role: editable text, Value: ?}
 |     |     |---  NAMELESS[scroll bar - Invisible] {Action: ?, Description: ?, Role: scroll bar, Value: 0}
 |     |     '---  NAMELESS[scroll bar - Invisible] {Action: ?, Description: ?, Role: scroll bar, Value: 0}
 |     |---  NAMELESS[push button - Invisible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 |     |---  NAMELESS[outline - Visible] {Action: ?, Description: ?, Role: outline, Value: ?}
 |     '---  Contacts loading...[text - Invisible] {Action: ?, Description: ?, Role: text, Value: ?}
 |---  NAMELESS[client - Invisible] {Action: ?, Description: ?, Role: client, Value: ?}
 |---  NAMELESS[client - Invisible] {Action: ?, Description: ?, Role: client, Value: ?}
 |---  NAMELESS[push button - Visible] {Action: Press, Description: ?, Role: push button, Value: ?}
 '---  Enter name or number[text - Invisible] {Action: ?, Description: ?, Role: text, Value: ?}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0