Flow
1
Connect a device
Select an iOS or Android device/simulator so an Appium session is active.
2
Inspect
View the live screen. Select elements to target actions (tap, swipe, input, lifecycle).
3
Build a shell script
Actions append to a script (CLI-shaped commands) instead of requiring you to invent locators by hand.
4
Run or save
Execute the script against the session, export a report, or keep it for later regression.
Live mirror and control
Inspector shows the device screen as a live MJPEG feed on iOS Simulator, real iOS, and Android. A badge on the mirror tells you which transport is active:- Stream — MJPEG feed from the Appium driver. This is the default when the stream is reachable.
- Poll — fallback that refreshes a screenshot every ~250 ms. Inspector shows this if the MJPEG probe fails after connect.
- On — pointer drags on the mirror map to touch events on the device (tap, drag, swipe). Element selection and the action menu are paused while you drag.
- Off — clicking an element opens the action menu so you can insert or run a scripted step.
~/.yoqa/runs/screenshots/.
Recovering a dropped session
Real iOS sessions can occasionally drop under WDA load (for example, during long Inspector sessions with the live mirror running). When that happens, Inspector clears the feed and prompts you to reconnect manually — it does not attempt to reconnect on its own.- Restart session — the toolbar button above the mirror disconnects, reconnects, and remounts the live stream. Use it when Inspector shows the Restart prompt, or any time the mirror looks stuck.
- Connect — pick the device again in the device selector to start a fresh session.
Command bar
The command bar sits above the script and adds steps that don’t need an element selection. It has two controls:- Swipe up / down / left / right — appends a directional swipe on the current screen.
- Wait — enter seconds and click Add wait to pause the script (useful between an app launch and an assertion).
Selector Commands
Select an element on the live screenshot to open its action menu. Alongside the usualtap, assertVisible, and inputText actions, the menu exposes app control and deeplink helpers you can drop into the script:
- activateApp — bring an app to the foreground (launches it if needed). Prefilled with the selected app’s iOS bundle ID or Android package; override to target a different app (for example,
com.apple.mobilenotesto jump into Notes). - terminateApp — kill the app with the given App ID.
- restartApp — terminate then activate the same App ID.
- openUrl — open a URL through the OS. Works for custom schemes (
myapp://path) andhttps://universal links. - acceptAlert / dismissAlert — respond to the next system alert (permissions, App Store prompts, “Open in MyApp?” deeplink confirmations, etc.).
- screenshot — capture the current screen. Use Insert & Run to save an evidence PNG mid-flow (for example, right after a deeplink lands).
- screenshot (path) — same as above, but prompts for a destination path (for example,
/tmp/yoqa-screenshot.png) so multiple captures don’t overwrite each other.
Example: test a deeplink from Notes (iOS)
1
Open Notes
Add activateApp with
com.apple.mobilenotes to jump into Apple Notes.2
Trigger the deeplink
Add openUrl with
myapp://path — or select the pasted link in Notes and tap it.3
Handle any system alert
Add acceptAlert so the “Open in MyApp?” prompt resolves automatically on replay.
4
Return to the app
Add activateApp with your app’s ID so the script ends in a known state.
When to use it
- Learn screen structure before writing natural-language cases.
- Reproduce a bug with an exact sequence of gestures.
- Script cross-app or deeplink flows (Notes → universal link → your app) that are hard to describe in natural language.
- Produce a saved script after you understand the happy path (complementary to AI agent runs).
Desktop app
Where to open Inspector
CLI
Equivalent screen / action commands