mlapptools icon indicating copy to clipboard operation
mlapptools copied to clipboard

Private function `figFromWebwindow` doesn't work on R2017a

Open Proxoso opened this issue 6 years ago • 4 comments

Expected Behavior

   myGUI = DOMdemoGUI;
   mlapptools.fontColor(myGUI.TextArea, 'aqua');

Change color from TextArea font to 'aqua'

Actual Behavior

Error using arrayfun
matlab.internal.webwindow output type is not supported. Set 'UniformOutput' to false.

Error in mlapptools/figFromWebwindow (line 434)
            ww = arrayfun(@mlapptools.getWebWindow, hUIFigs);

Error in mlapptools/waitTillWebwindowLoaded (line 595)
              hFig = mlapptools.figFromWebwindow(hWebwindow);

Error in mlapptools.getWebElements (line 140)
            mlapptools.waitTillWebwindowLoaded(win);

Error in mlapptools.fontColor (line 69)
            [win, ID_struct] = mlapptools.getWebElements(uiElement);

If changing line 434 from: ww = arrayfun(@mlapptools.getWebWindow, hUIFigs); to ww = arrayfun(@mlapptools.getWebWindow, hUIFigs, 'un',0);

following error occurs:

Error using getappdata
Value must be a handle.

Error in mlapptools/getTimeout (line 488)
            to = getappdata(hFig, mlapptools.TAG_TIMEOUT);

Error in mlapptools/waitTillWebwindowLoaded (line 598)
            to = mlapptools.getTimeout(hFig);

Error in mlapptools.getWebElements (line 140)
            mlapptools.waitTillWebwindowLoaded(win);

Error in mlapptools.fontColor (line 69)
            [win, ID_struct] = mlapptools.getWebElements(uiElement);

Steps to Reproduce the Problem

Enter this command in the Matlab Command Line (or any other command from the examples):

  myGUI = DOMdemoGUI;
  mlapptools.fontColor(myGUI.TextArea, 'aqua');

Specifications

  • MATLAB Release: R2017a
  • Operating System: Win 7

Proxoso avatar Mar 26 '18 14:03 Proxoso

This is likely version specific, the issue does not occur in R2017b.

sco1 avatar Mar 26 '18 14:03 sco1

@Proxoso While we're adding a warning or a workaround for older versions, you can use the setStyle syntax, which should work :

myGUI = DOMdemoGUI;
[hWin, widgetID] = mlapptools.getWebElements(myGUI.TextArea);
mlapptools.setStyle(hWin, 'color', 'aqua', widgetID);

Dev-iL avatar Apr 08 '18 13:04 Dev-iL

@Dev-iL - if you look at the error stack provided by @Proxoso , you'll see that it stems from mlapptools.fontColor:69 -

[win, ID_struct] = mlapptools.getWebElements(uiElement);

which indicates that your suggested workaround will also fail, because getWebElements fails.

My hunch is that it's due to a slow rendering, which means the timeout is reached before the widgetID is available.

altmany avatar Jul 25 '18 11:07 altmany

@altmany Good point. I have modified the waitTillWebwindowLoaded logic a bit to make getWebElements less likely to fail due to trivial problems; it might help with this issue as well.

Dev-iL avatar Jul 25 '18 14:07 Dev-iL