All notable changes to the AXe iOS testing framework will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added AxePlayground alert, sheet, context menu, modal navigation, and long-scroll fixtures for UI automation regression coverage.
- Added
axe slider --id/--label --value 0...100for selector-based slider setting with orientation-aware HID dragging and AXValue tolerance verification/failure reporting. - Added
axe drag --start-x/--start-y --end-x/--end-yfor raw point-to-point low-level HID drag validation using explicit touch move events.
- Changed
axe sliderto use the shared composite low-level HID drag path with AXValue tolerance verification instead of retrying with correction gestures.
- Fixed
describe-uiand selector-basedtap --labelexposing and activating real SwiftUITabViewtab items, navigation search fields, toolbar segmented picker items, and generated navigation back buttons from the CoreSimulator accessibility bridge. Also fixed selector decoding when the accessibility tree contains numericAXValuefields such as sliders. - Fixed
tap,touch,swipe, and matching batch steps dispatching logical UI coordinates directly to FBSimulatorHIDEvent without landscape rotation or letterbox correction, causing interactions to land in the wrong location in rotated landscape simulators and portrait-hardware landscape-only apps. AXe now detects the simulator UI orientation automatically instead of requiring callers to pass landscape flags (#5 by @Nitewriter) - Fixed selector-based
tapand batch tap steps so UIKitUISwitchand SwiftUITogglecontrols can be activated reliably, including when a matched row or label contains a single switch/toggle control. Added--tap-styleso switch/toggle taps can use physical touch automatically while normal taps keep the simulatortapAtpath by default (#46). - Fixed element comparison in
AccessibilityTargetResolverto prevent distinct elements with the same type and frame but lacking labels/values from being incorrectly identified as identical during ancestor tree traversal.
- Added
--valuetargeting fortap, allowing elements to be matched by their accessibility value in addition to--idand--label. Added--element-typefiltering to narrow matches by element type (e.g., button, text field) (#40 by @andresdefi). - Added
--wait-timeoutand--poll-intervaloptions totapfor waiting until a matching element appears before tapping (#40 by @andresdefi).
- Fixed
describe-uito expose and implement the documented--pointoption in command help and runtime behavior (#38)
- Added
batchcommand for executing ordered multi-step interaction workflows in a single invocation, with sequential execution that supports multi-screen flows, built-insleepdelays, accessibility caching, and configurable text submission strategies (#25). See BATCHING.md. - Added
axe initcommand to install, uninstall, or print the AXe skill for AI clients (claude,agents) or a custom destination (#25).
- Fixed Homebrew installation on Intel Macs by producing architecture-specific release artifacts (#27, #21)
- Fixed
tap --labelresolving ambiguous matches by preferring actionable elements over read-only ones (#28)
- AxePlayground Touch Control now shows long-press count and last long-press coordinates, making gesture automation easier to validate.
- Improved long-press reliability for
axe touch:--down --up --delaynow consistently behaves like a real press-and-hold gesture.
- Add
key-combocommand for atomic modifier+key presses (e.g., Cmd+A, Cmd+Shift+Z) Thanks to @jpsim for the contribution!
-Add support for screenshot capture to PNG -Add tap by label or accessibility id in addition to existing x/y coordinates -Fix FBProcess duplication warnings
Special thanks to @aliceisjustplaying and @onevcat for their execellent contributions!
-Pin IDB version to address access control issues on new versions
- Add support for streaming and video capture (thanks to @pepicrft for the contribution!)
- Initial release of AXe
- Complete CLI tool for iOS Simulator automation
- Support for tap, swipe, type, key, touch, button, and gesture commands
- Built on Meta's idb frameworks with Swift async/await
- Comprehensive test suite with AxePlaygroundApp
- Gesture presets and timing controls
- Accessibility API integration
- README updates
- Initial release of AXe