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/-/blob/master/FAQ.md


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.2.tar.gz (180.5 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.2-py3-none-any.whl (126.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dogtail-2.0.2.tar.gz
  • Upload date:
  • Size: 180.5 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.2.tar.gz
Algorithm Hash digest
SHA256 4b94baed9ec7dfdc6087a9f6ba2f6d6589fea8eb4fc3289d1d19a1dc463be368
MD5 6d55f7644b998663e6eec566fc093db8
BLAKE2b-256 5cfac3a295a9ae5e9b332b5da7894dd3a5728b9f1144c8591d5ee08d47c2a309

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dogtail-2.0.2-py3-none-any.whl
  • Upload date:
  • Size: 126.6 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 320efd34896d4c9adae76fbe3d018618759ba34ecf05b95b8ece7fa82fb2ca1a
MD5 19f679baae370a068dda7fa37f7a20fe
BLAKE2b-256 5dfc1b3c3285067bb93119bc7a203f3a48c29ebc22989c0ff11986c9f3a9a7ee

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