Writing tests
Maestro flows
Maestro flows are YAML files with step-by-step instructions. SootSim supports all standard Maestro commands plus custom extensions.
Supported commands
| command | description |
|---|---|
tapOn | tap an element by text, id, or index |
assertVisible | verify an element is visible |
assertNotVisible | verify an element is not visible |
inputText | type text into the focused input |
swipe | swipe in a direction |
scroll | scroll in a direction |
takeScreenshot | capture a screenshot |
waitFor | wait for an element to appear |
waitForAnimationToEnd | wait for animations to settle |
back | navigate back |
hideKeyboard | dismiss the keyboard |
runFlow | run a sub-flow file |
repeat | repeat commands N times |
scrollUntilVisible | scroll until an element appears |
extendedWaitUntil | wait with complex conditions |
SootSim extensions
| command | description |
|---|---|
wait | wait N milliseconds |
dumpTree | dump the node tree to console |
assertTreeContains | assert a node exists in the tree |
Templates
SootSim ships with flow templates you can copy and customize:
terminal
available templates: onboarding.yaml, auth.yaml, crud.yaml, navigation.yaml
Auto-generating flows
SootSim can crawl your app and generate smoke test flows:
terminal
This discovers screens, taps buttons, and generates YAML flows that verify the app doesn’t crash.
Detox-style API
The Detox-style API wraps Playwright with familiar Detox semantics:
Available matchers
by.id(id)— match by testIDby.text(text)— match by text contentby.label(label)— match by accessibility labelby.role(role)— match by accessibility roleby.type(type)— match by component type
Available actions
tap()— tap the elementlongPress()— long press the elementtypeText(text)— type textreplaceText(text)— replace input textclearText()— clear input textscroll(pixels, direction)— scrollswipe(direction)— swipetakeScreenshot(name)— capture screenshot
Available assertions
toExist()/not.toExist()toBeVisible()/not.toBeVisible()toHaveText(text)/not.toHaveText(text)toHaveId(id)toHaveLabel(label)toHaveRole(role)toBeEnabled()/not.toBeEnabled()
Reporters
SootSim supports multiple output formats:
console— colored terminal output (default)json— machine-readable JSONjunit— JUnit XML for CI systemshtml— visual report with screenshots
terminal