What's the motivation of implementing such tests as extensions? The
automation framework already supports simulating keyboard events, can we
just use it for such kind of tests?

Regards
James Su

2010/1/16 Dominic Mazzoni <dmazz...@google.com>

> The problem I have with using only explicitly defined action functions
> is that the whole point of simulating keyboard events is to test
> whether or not the user interface is accessible using the keyboard!
> (This is not just an issue for people using assistive technology like
> a screen reader: there are a few things in Chrome that are impossible
> to access without using a mouse now.)
>
> I want to be able to write tests that try to edit bookmarks using the
> Bookmark Manager, or change settings using the Options dialog, for
> example. Having functions like selectNextBookmark() wouldn't help test
> that they're actually accessible via the keyboard.
>
> There aren't that many different keys needed for keyboard
> accessibility: off the top of my head, you mostly need tab, shift-tab,
> space, enter, and arrow keys - plus a few shortcuts to open a menu or
> move the focus to a certain panel.  What about having functions for
> each of these keys plus other actions that can be triggered via a
> keyboard shortcut?
>
>  tabToNextControl()
>  tabToPreviousControl()
>  pressSpaceBar()
>  pressEnterKey()
>  pressEscapeKey()
>  arrowUp()
>  arrowDown()
>  arrowLeft()
>  arrowRight()
>  openOptionsDialog()
>  openBookmarksManager()
>  focusLocationBar()
>  ...
>
> Then, in order to enter text into a text box in a dialog, perhaps a
> function that pastes unicode text at the current cursor position would
> be much easier than trying to deal with key codes and input methods.
>
> - Dominic
>
> On Fri, Jan 15, 2010 at 3:24 AM, James Su <su...@google.com> wrote:
> > Hi Nico,
> >   I totally agree with your point. Using fake keyboard events for
> > accessibility things would lead to compatibility nightmare. We should
> > consider the approach of using explicitly defined action functions rather
> > than emulating keyboard events. The keyboard events approach has at least
> > following unsolvable problems:
> > 1. Compatibility issue among different OS platforms.
> > 2. Compatibility issue caused by user customized shortcuts.
> > 3. Supports of different keyboard layouts.
> > 4. Supports of inputting non-Latin text.
> > Regards
> > James Su
> > 2010/1/15 Nico Weber <tha...@chromium.org>
> >>
> >> On Thu, Jan 14, 2010 at 8:37 AM, Dominic Mazzoni <dmazz...@google.com>
> >> wrote:
> >> > On Thu, Jan 14, 2010 at 8:19 AM, Nico Weber <tha...@google.com>
> wrote:
> >> >> It probably depends if you want to use this for text input or
> "action"
> >> >> inputs. A text-to-speech extension would probably want to set unicode
> >> >> characters, while something that (say) hits cmd-f to open the find
> bar
> >> >> probably wants to use keycodes.
> >> >
> >> > Text-to-speech is a different problem; this is for actions.
> >> >
> >> >> For example, on OS X hitting cmd-"f" with a hiragana keyboard layout
> >> >> opens the findbar, while just pressing "f" opens an IME.
> >> >>
> >> >> If you want to use this for actons, I would find it more useful to
> >> >> have a "performUiAction()" function instead though, since keyboard
> >> >> shortcuts are different across platforms (all mac shortcuts use cmd
> >> >> instead of ctrl for example, and the letters for a few shortcuts are
> >> >> different on OS X too for various reasons).
> >> >
> >> > I completely agree; I would like to add many functions along the lines
> >> > of performUiAction. However, there are a few actions for which typing
> >> > a key really is the right thing to do - for example pressing Tab to
> >> > move to the next control.
> >>
> >> Maybe performUiAction('focusNextViewInKeyLoop')?
> >>
> >> (By the way, OS X has a system-level setting that configures if tab
> >> should focus only text fields or all controls such as buttons etc. I
> >> don't think Chrome/Mac honors it, but I think there are plans to
> >> support it. Stuff like this is surprising for a caller that sends
> >> "tab" characters, while an explicit "focus next element" function
> >> could have clearly defined semantics).
> >>
> >> >
> >> > There's also testing. This function will allow you to use only
> >> > javascript to test that a particular capability can be accessed using
> >> > only the keyboard. I'm already using this for testing this API, by
> >> > simulating pressing Ctrl+L to focus the location bar and then checking
> >> > to see that the proper focus event is generated.
> >>
> >> Some (most?) accessibility shortcuts will vary by platform too. For
> >> example, "focus toolbar" is ctrl-f5 on OS X, but only if full keyboard
> >> access has been enabled (ctrl-f1). Cocoa the OS X framework don't
> >> always trigger with synthetic keyboard events. (I'm not an a11y expert
> >> – Avi, comments?)
> >>
> >> >
> >> > So the way I look at it is: there are some great uses for this
> >> > function. There are also things that this function could be used for
> >> > but there'd be a better way. It could also be abused to do things that
> >> > make no sense.
> >> >
> >> > I don't think that's an argument not to allow the function; I think it
> >> > just means we should make sure it's defined properly for the intended
> >> > use, and over time try to provide better alternatives for other
> >> > possible uses.
> >> >
> >> > - Dominic
> >> >
> >> >> Nico
> >> >>
> >> >> On Thu, Jan 14, 2010 at 7:26 AM, Dominic Mazzoni <
> dmazz...@google.com>
> >> >> wrote:
> >> >>> Hi Darin,
> >> >>>
> >> >>> Erik suggested you might have some thoughts. In my proposed
> extension
> >> >>> api for accessibility (http://codereview.chromium.org/402099) one
> of
> >> >>> the functions is to simulate a key press. How should the client
> >> >>> express the key they would like to press?  The current proposed
> >> >>> function prototype is:
> >> >>>
> >> >>>      {
> >> >>>        "name": "simulateKeyPress",
> >> >>>        "type": "function",
> >> >>>        "description": "Simulate pressing a key.",
> >> >>>        "parameters": [
> >> >>>          {
> >> >>>            "type": "object",
> >> >>>            "name": "keyInfo",
> >> >>>            "properties": {
> >> >>>              "key": {"type": "integer", "description": "The code of
> >> >>> the key to press, corresponding to event.keyCode."},
> >> >>>              "control": {"type": "boolean", "optional": true,
> >> >>> "description": "True if the control key is down."},
> >> >>>              "shift": {"type": "boolean", "optional": true,
> >> >>> "description": "True if the shift key is down."},
> >> >>>              "alt": {"type": "boolean", "optional": true,
> >> >>> "description": "True if the alt key is down."}
> >> >>>            }
> >> >>>          }
> >> >>>        ]
> >> >>>      }
> >> >>>
> >> >>> What do you think?  Should the key be a keyCode? A charCode?
> >> >>>
> >> >>> Should it be cross-platform, or should it match what would be
> returned
> >> >>> by an onKeyDown handler? Are those even mutually exclusive?
> >> >>>
> >> >>> My current thinking is: the symmetry of using the same key codes
> >> >>> returned by onKeyDown is appealing. Also, even though there are some
> >> >>> differences, the most common keys needed to automate the UI (tab,
> >> >>> enter, arrows, alphanumerics) are already consistent across
> platforms.
> >> >>>
> >> >>> Thanks,
> >> >>> - Dominic
> >> >>>
> >> >>> --
> >> >>> Chromium Developers mailing list: chromium-dev@googlegroups.com
> >> >>> View archives, change email options, or unsubscribe:
> >> >>>    http://groups.google.com/group/chromium-dev
> >> >>>
> >> >>
> >> >
> >>
> >> --
> >> Chromium Developers mailing list: chromium-dev@googlegroups.com
> >> View archives, change email options, or unsubscribe:
> >>    http://groups.google.com/group/chromium-dev
> >
> >
>
-- 
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
    http://groups.google.com/group/chromium-dev

Reply via email to