GNOME Accessibility & Automation Testing A brief introduction to use GNOME Accessibility to do automation test Ray Wang Software Engineer Novell / rawang@novell.com
Agenda What is Accessibility? Definition
AT-SPI How to use GNOME Accessibility to implement Automation Test Accerciser
LDTP
Orca
Dogtail
Strongwind
What is Accessibility?
What is Accessibility?  Definition Abbreviation: A11y
Ability to access
Being able to use a Computer regardless of disability or severity of impairment
Wikipedia http://en.wikipedia.org/wiki/Accessibility
http://en.wikipedia.org/wiki/Computer_accessibility
Other stuff...
What is Accessibility?  Definition Disabilities Visual
Motor & Speech
Hearing
Cognitive
What is Accessibility?  AT-SPI Assistive Technology Service Provider Interface (AT-SPI)
GNOME Accessibility infrastructure
AT-SPI cspi
pyatspi
atk-bridge
registryd
What is Accessibility?  AT-SPI Turn on your GNOME Accessibility
What is Accessibility?  AT-SPI What's happened?
What is Accessibility?  AT-SPI Divide the view of AT into 3 large components
What is Accessibility?  AT-SPI Applications and ATs communicate via a layered architecture
What is Accessibility?  AT-SPI ATs receive events and issue IPC calls API calls EVENTS
What is Accessibility?  AT-SPI (GNOME) How GTK+/GNOME Applications connect to AT-SPI
What is Accessibility?  AT-SPI (GNOME) AT-SPI GAIL How ATK is implemented for GTK+:
The  GAIL  module
What is Accessibility?  AT-SPI (Java) AT-SPI Java application use a different bridge

Ray Wang - Gnome Accessibility And Automation Testing

Editor's Notes

  • #6 Visual: Common, Age, Large Fonts, High Contrast, Magnification, Screen Reader Motor & Speech: Mild -> Serious, Ignore False Activation, Specialized or Alternative Input Devices Synthetic Speech Hearing: Mild -> Serious, Subtitles Cognitive: Reading disorders, Comprehension & Composition Difficulties Speech Recognition Text Highlighting, Careful UI Design, Symbols & Pictures.
  • #7 CSPI: The library for C bindings Pyatspi:The Python bindings atk-bridge: The bridges, of course, need to understand both sides of what it being bridged; so atk-bridge must link to both ATK and AT-SPI. Registryd: Daemon
  • #10 application layer includes productivity software, desktop tools, window manager, panel, etc; these are the same apps found outside ‘accessibility enabled’ environments. Also included in the ‘application layer’ are the GUI toolkits and the APIs necessary to provide accessibility info to the rest of the subsystem. Those APIs may vary among applications and toolkits (i.e. Java, GTK+, mozilla, OpenOffice) but they give adequate information to allow bridging to the common layers below. infrastructure includes what we sometimes call the “accessibility subsystem” and is what people sometimes just call “AT-SPI”. We usually use the name “AT-SPI” more specifically to refer only to the software interfaces and implementations contained in the “AT-SPI” module; either way, the AT-SPI packages are key parts of the infrastructure layer. The infrastructure layer is what enables assistive technologies to interact consistently with different applications. assistive (or adaptive) technologies are the ‘adapter’ programs that help the user operate desktop and apps. Examples: GOK, Orca, dasher Q: are features like StickyKeys assistive technologies? A: It depends who you ask; for our purposes we will call them accessibility utilities or platform accessibility features, and use “AT” to refer to programs that form a direct interface between the end user and the desktop, such as Screen Readers and alternative input systems.
  • #11 We can divide the infrastructure layer into “bridge code” and AT-SPI; the bridging code connects the applications with the AT-SPI subsystem and therefore can be considered part of the infrastructure. Bridges take accessibility support information (services, events) from within the application and converts it to a common format (in this case, the AT-SPI protocol). Examples: java-access-bridge for GNOME; libatk-bridge. Bridges are important because: Applications on the desktop may implement similar features with a wide variety of code: Applications are written in different languages (C, Java, python, etc.) and may use different b“GUI toolkits” to create their interface components (GTK+, Java/Swing, mozilla-gecko, OpenOffice). Their object models and internal APIs may be very different from one another (Gobject, UNO, mozilla) This information needs to be shared or “exported” in a common ABI and via a common IPC protocol. We refer to the code that converts to and from the common format as “bridging” code.
  • #12 Bridges also listen to application events, for instance AtkObject events which are implemented as Gsignals, and convert them into the appropriate AT-SPI event notifications. Events may give the AT some information about a change which has occurred in an application, but in many cases the AT needs to make API calls in response to an event in order to update the information it presents to the user. For instance, if focus moves to a new widget, speech and/or braille output may needed to inform the user of this change and in order to create a useful presentation of the newly focused object for the user (either as a spoken words or braille dots); alternatively if GOK is being used and a menu is focused or pops up, GOK may wish to traverse this menu in order to present the new choices to the user as a set of selectable “GOK Buttons”.
  • #13 GNOME applications implement an in-process accessibility API called ATK. This is ‘bridged’ to the common AT-SPI layer by the ATK-bridge module. Atk-bridge exports ATK information via AT-SPI – it knows and understands the ATK API, but it doesn't know anything about specific applications or even anything about gtk+.
  • #14 GAIL hooks into ATK and implements ATK interfaces on behalf of GTK+. GAIL knows about ATK and GTK+, but neither ATK nor GTK+ know about GAIL. GAIL is dynamically loaded via GTK_MODULES The ATK implementations for the GTK+ widget set are provided by an extermal library called GAIL (or libgail). It is external for mostly historical reasons, and partly in order to allow alternate implementations to be loaded by specialized applications. In the diagram above, note that GAIL gets information from GTK+ via public GTK+ API, and uses that information to fulfill the ATK interfaces on behalf of those widgets. For instance the atk-bridge calls ATK API, but the ATK call is redirected through code in libgail which in turn uses gtk+ API calls to provide the corresponding information.
  • #15 Swing defines a java-specific accessibility API in javax.accessibility The end result is AT-SPI, just as for GNOME apps (interoperability). OpenOffice.org have an internal UNO Accessibility API. Until recently they bridged internally to javax.accessibility; now they bridge to ATK. Java ATK Wrapper