mikekelly/outside-in-testing-ios-apps
Overview
This skill guides outside-in testing of iOS apps running in the Simulator using the AXe CLI. It focuses on driving the app like a real user — launching flows, interacting with UI, verifying screens, and diagnosing failures with simulator logs. Use it to run acceptance, end-to-end, functional, exploratory, or smoke tests and produce repeatable evidence of app behavior.
How this skill works
The agent uses AXe CLI commands to Observe → Act → Verify in a loop: capture screenshots, read the accessibility tree, interact (taps, typing, gestures), then re-check UI state. All interactions target a Booted Simulator identified by its UDID. When behavior deviates from expectations the skill collects simulator logs and crash reports to diagnose root causes.
When to use it
- Verify core user flows and acceptance criteria in an iOS Simulator
- Run end-to-end or smoke tests before a build merge or release
- Explore UI behavior and catch accessibility or layout regressions
- Diagnose crashes, hangs, or unexpected UI states using logs
- Record test sessions for QA evidence or developer debugging
Best practices
- Find a Booted simulator UDID with
axe list-simulatorsbefore starting - Follow Observe → Act → Verify: screenshot and describe UI before and after actions
- Prefer accessibility labels/identifiers; fall back to coordinates from describe-ui
- Use pre/post delays for animations or slow loading to reduce flakiness
- Capture logs and video when failures occur to speed diagnosis
Example use cases
- Acceptance test: launch app, log in, navigate to settings, and verify expected content
- Smoke test: confirm app launches and critical buttons are tappable after an install
- Exploratory test: navigate varied screens, interact with inputs, and note unexpected behavior
- End-to-end flow: simulate user purchase flow including typing, scrolling, and confirmation
- Failure diagnosis: reproduce a crash, stream recent logs, and collect crash reports for triage
FAQ
Install AXe CLI (brew install cameroncooke/axe/axe) and run the iOS Simulator with the app under test.
How do I choose between tapping by label, id, or coordinates?
Prefer accessibility labels or identifiers. Use coordinates only when labels contain special characters or are unreliable; obtain coordinates from axe describe-ui.
How do I diagnose intermittent failures?
Add pre/post delays, record a video of the session, and stream or capture simulator logs and recent crash reports for analysis.