Skip to main content

Automated Testing on macOS

Project description

atomacos: Automated Testing on macOS

license pypi Build Status codecov style

This library is a fork of atomac. It was created to provide a release with python 3 support because there has not been a release since 2013

Atomacos is a library to enable GUI testing of macOS applications via the Apple Accessibility API. Atomacos has direct access to the API via pyobjc. It's fast and easy to use to write tests.

Getting started

Requirements

  • macOS
  • pyobjc
  • Systemwide Accesibility enabled

On travis, it's only on 10.11 because we are able to enable accessibility API.

If you experience issues, please open a ticket in the issue tracker.

Enabling Systemwide Accessibility

Check the checkbox:

System Preferences > Universal Access > Enable access for assistive devices
System Preferences > Security & Privacy > Privacy > Accessibility

Failure to enable this will result in AXErrorAPIDisabled exceptions during some module usage.

Installing

For release

$ pip install atomacos

For pre-release

$ pip install --pre atomacos

Usage Examples

Once installed, you should be able to use it to launch an application:

>>> import atomacos
>>> atomacos.launchAppByBundleId('com.apple.Automator')

This should launch Automator.

Next, get a reference to the UI Element for the application itself:

>>> automator = atomacos.getAppRefByBundleId('com.apple.Automator')
>>> automator
<atomacos.AXClasses.NativeUIElement AXApplication Automator>

Now, we can find objects in the accessibility hierarchy:

>>> window = automator.windows()[0]
>>> window.AXTitle
u'Untitled'
>>> sheet = window.sheets()[0]

Note that we retrieved an accessibility attribute from the Window object - AXTitle. Atomacos supports reading and writing of most attributes. Xcode's included Accessibility Inspector can provide a quick way to find these attributes.

There is a shortcut for getting the sheet object which bypasses accessing it through the Window object. Atomacos can search all objects in the hierarchy:

>>> sheet = automator.sheetsR()[0]

There are search methods for most types of accessibility objects. Each search method, such as windows, has a corresponding recursive search function, such as windowsR.

The recursive search finds items that aren't just direct children, but children of children. These search methods can be given terms to identify specific elements. Note that * and ? can be used as wildcard match characters in all search methods:

>>> close = sheet.buttons('Close')[0]

There are methods to search for UI Elements that match any number of criteria. The criteria are accessibility attributes:

>>> close = sheet.findFirst(AXRole='AXButton', AXTitle='Close')

findFirst and findFirstR return the first item found to match the criteria or None. findAll and findAllR return a list of all items that match the criteria or an empty list([]).

Objects are fairly versatile. You can get a list of supported attributes and actions on an object:

>>> close.getAttributes()
[u'AXRole', u'AXRoleDescription', u'AXHelp', u'AXEnabled', u'AXFocused',
u'AXParent', u'AXWindow', u'AXTopLevelUIElement', u'AXPosition', u'AXSize',
u'AXTitle']
>>> close.AXTitle
u'Close'
>>> close.getActions()
[u'Press']

Performing an action is as natural as:

>>> close.Press()

Any action can be triggered this way.

Links

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

atomacos-2.0.1.tar.gz (33.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

atomacos-2.0.1-py2.py3-none-any.whl (75.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file atomacos-2.0.1.tar.gz.

File metadata

  • Download URL: atomacos-2.0.1.tar.gz
  • Upload date:
  • Size: 33.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.21.0

File hashes

Hashes for atomacos-2.0.1.tar.gz
Algorithm Hash digest
SHA256 997bc25484ca61f9ee3b9ff3b30906d57abf7db79676d4a4d9cfe5e5521e17c0
MD5 f311bb6bc7bfa8ca2c39bdf5f4b07a27
BLAKE2b-256 6afca4a30de90e59692f9431a65513eec4476c6a602778bf4fe4144a693c9ca4

See more details on using hashes here.

File details

Details for the file atomacos-2.0.1-py2.py3-none-any.whl.

File metadata

  • Download URL: atomacos-2.0.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 75.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.21.0

File hashes

Hashes for atomacos-2.0.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 45a3c6e8af3fb4f1c3d4c962c3f20c95934379751a10fcf6751923b2de608313
MD5 5f8d2200e61e974257881a4bdc5c4901
BLAKE2b-256 39910d845c92f6c50834215c9b1a71b6010c508f7a370034314267beac0164df

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page