Skip to main content

GUI test tool and automation framework that uses Accessibility (AT-SPI) technologies to communicate with desktop applications.

Project description

dogtail

dogtail is a GUI testing and UI automation framework written in Python. It uses Accessibility (AT-SPI) technologies to interact with desktop applications, allowing you to automate real user workflows reliably.

Dogtail scripts are standard Python programs and can be run like any other Python code.

It works especially well with:

  • behave (BDD testing)
  • qecore (extends behave + dogtail)

Dogtail supports both Xorg and Wayland GNOME environments.

For Wayland usage details, see: https://fedoramagazine.org/automation-through-accessibility/


Table of Contents


News

dogtail 2.x.y

Details: https://gitlab.com/dogtail/dogtail/-/issues/29

The project was fully refactored to:

  • Clean up years of technical debt
  • Improve maintainability and readability
  • Prepare for future accessibility backends (e.g., AccessKit/Newton)

Rather than continuing to patch dogtail 1.x, the codebase was rebuilt to make future evolution easier and safer.

dogtail 1.x.y

The legacy branch is still maintained as needed:

https://gitlab.com/dogtail/dogtail/-/tree/dogtail-1.x

FAQ

https://gitlab.com/dogtail/dogtail/-/tree/FAQ


Installation

From GitLab (build locally)

git clone https://gitlab.com/dogtail/dogtail.git
cd dogtail
python3 -m build
sudo pip3 install dist/dogtail-2.*-py3-none-any.whl

From GitLab (pip)

sudo dnf install python3-pip
sudo python3 -m pip install git+https://gitlab.com/dogtail/dogtail@master

From PyPI

sudo python3 -m pip install dogtail

From GitLab Package Registry

Packages are built automatically by CI:

https://gitlab.com/dogtail/dogtail/-/packages/


Dependencies

Core requirements:

  • Python bindings for your distro (e.g., python-apt, rpm-python)
  • GNOME Python libraries

Test targets typically include GNOME applications:

https://www.gnome.org/

Wayland-specific dependency

To run on Wayland GNOME, install gnome-ponytail-daemon:

https://gitlab.gnome.org/ofourdan/gnome-ponytail-daemon

The gnome-ponytail-daemon is packaged in Fedora distribution:

dnf install -y gnome-ponytail-daemon
dnf install -y python3-gnome-ponytail-daemon

Building from source:

sudo dnf install meson gcc glib2-devel
git clone https://gitlab.gnome.org/ofourdan/gnome-ponytail-daemon.git
cd gnome-ponytail-daemon
sudo meson setup build
sudo ninja -C build
sudo ninja -C build install

Wayland Support

Wayland input automation is enabled through gnome-ponytail-daemon, which uses:

  • Screen Cast API
  • Remote Desktop API
  • GNOME Shell Introspection

This allows Dogtail to:

  • Connect to specific windows
  • Translate local UI coordinates to global screen positions
  • Simulate keyboard and mouse input reliably

What this means in practice

Dogtail handles the complexity internally. Most test scripts run identically on:

  • Xorg sessions
  • Wayland GNOME sessions

On Xorg, traditional X input APIs are used automatically.


GTK4 Notes

For GTK4 applications, window shadows must be disabled for accurate coordinate handling.

Add the following to:

~/.config/gtk-4.0/gtk.css
window, .popover, .tooltip {
    box-shadow: none;
}

Why this is necessary

  • Shadows introduce variable coordinate offsets
  • Offsets differ per application, size, and scaling
  • Disabling shadows ensures consistent automation behavior

Dogtail automatically manages known offsets using dogtail.config.gtk4_offset.


Usage

Currently supported:

  • GNOME and GTK applications
  • Xorg and Wayland sessions
  • Limited Qt support via qt-at-spi (not officially maintained)

Enable accessibility

gsettings set org.gnome.desktop.interface toolkit-accessibility true

Restart applications (or log out/in) after enabling.

Headless environments using dogtail-headless or qecore-headless enable this automatically.


API References


Bugs & Support

Report issues here:

https://gitlab.com/dogtail/dogtail/issues

Project home:

https://gitlab.com/dogtail/dogtail/

API docs (incomplete for both versions, in progress for 2.x):

http://fedorapeople.org/~vhumpa/dogtail/epydoc/

Mailing lists and IRC are deprecated — please use GitLab.


Contributing

Bug reports

  • Search existing issues first
  • Include steps to reproduce and environment details

Feature ideas

  • Open an issue to discuss before coding

Code style guidelines

  • Use docstrings for all public functions and methods
  • Follow snake_case naming
  • Prefer descriptive variable names
  • Write full-sentence comments with proper punctuation

Your contributions are welcome! 🚀

Project details


Download files

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

Source Distribution

dogtail-2.0.0.tar.gz (179.8 kB view details)

Uploaded Source

Built Distribution

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

dogtail-2.0.0-py3-none-any.whl (126.3 kB view details)

Uploaded Python 3

File details

Details for the file dogtail-2.0.0.tar.gz.

File metadata

  • Download URL: dogtail-2.0.0.tar.gz
  • Upload date:
  • Size: 179.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for dogtail-2.0.0.tar.gz
Algorithm Hash digest
SHA256 6af4cbc5f5b365a697c9d321b84712f65bd16ab5f5548f7a55abd5192cb69982
MD5 815885dbb1ceed9ac213db68fef8f239
BLAKE2b-256 9e35e1876d389a5b277d9e3e493ae35c3e8b8d8fb4a98757267d1e9bbf8b9976

See more details on using hashes here.

File details

Details for the file dogtail-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: dogtail-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 126.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for dogtail-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5f2ca5d4b8fc603aa79a3361b14edb3eeb15cefba6a5d54d01d4c9919bc73970
MD5 11f7b88bfd032f6f45f516cbfc811bb8
BLAKE2b-256 1aa2349a191a8356fbaf890f791e8efa306230db297dec75dfffe8c7c4d69c81

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