noob42
noob42

Reputation: 159

Programmatic Method of Handling Matlab Dialog Windows

I have a rather large Matlab program that is GUI based. I am looking into creating automated tests for it, as the current way of checking for bugs before a release is simply using all its functionality like a user would.

I would rather not use a GUI testing program that just records clicks and what not, so I was thinking of adding testing code that would call the button callbacks directly. The problem that I have run into with this is that we have a lot of warndlg and msgbox popups, and I would like my tester code to be able to see these.

Is there any way for Matlab code to tell if a function it called created a warndlg or msgbox? If so, is there any way to click 'ok' on these popups?

In a similar vein, is it possible to handle popups that block code execution (using uiwait or an inputdlg)?

If it matters I didn't use GUIDE, and all the GUI elements are created programmatically

Upvotes: 0

Views: 161

Answers (2)

Kenneth Boyd
Kenneth Boyd

Reputation: 667

You can tell if a warning dialog was created by looking for it's tag using the findobj function. A warning dialog created using warndlg will have the tag "Msgbox_Warning Dialog". So code like this would tell you if the warning dialog exists:

set(0,'ShowHiddenHandles', 'on')
h = findobj('Tag', 'Msgbox_Warning Dialog');
warn_exists = ~isempty(h)
set(0,'ShowHiddenHandles', 'off')

to close the warning dialog, you can call delete, like this:

delete(h)

For the message box, I would store the handle when you create a message box, then look at the children to find the buttons, then look at their callbacks. You should be able to call the callbacks to simulate picking a button.

Upvotes: 0

MosGeo
MosGeo

Reputation: 1908

Two ways. The first one is more elegant

  • Let the functions return an extra variable and return the status of the function. For example, 1: success, 2: success with warning, 3: error...

  • Create some global variables and make the function change them if a warndlg or msbgbox shows up. The main window would then check if the status of the global variable.

Upvotes: 1

Related Questions