Skip to content

Buggy Controller Live Demo

Use this page when you want a concrete real-device Android automation example, especially if the question is how Luotsi behaves on older hardware with weak hierarchy output.

This tutorial condenses the repo’s end-to-end Buggy Controller walkthrough into the parts that matter when you want to see Luotsi on a real device, understand the artifact trail, and verify that the workflow still holds when uiautomator dump is unreliable.

  • Device discovery and readiness checks
  • App lifecycle verification
  • Host-side recording and screenshot capture
  • Scenario execution with JSONL events, JSON reports, and JUnit output
  • Failure-friendly behavior on an older Android 6 device with weak hierarchy support

The captured run targeted:

com.digablesolutions.buggycontroller/.MainActivity
0123456789ABCDEF
model=PDA3505
android_release=6.0
sdk=23
Terminal window
luotsi devices
luotsi preflight `
--device 0123456789ABCDEF `
--package com.digablesolutions.buggycontroller
luotsi run `
--file .\examples\scenarios\buggy-controller-live-demo.json `
--device 0123456789ABCDEF `
--package com.digablesolutions.buggycontroller `
--events-jsonl .\artifacts\buggy-demo-events.jsonl `
--report-json .\artifacts\buggy-demo-report.json `
--report-junit .\artifacts\buggy-demo-junit.xml `
--artifacts .\artifacts\buggy-demo

If you are running directly from a source checkout instead of an installed CLI, prepend dotnet run --no-build --no-launch-profile --project Luotsi.Cli -- to the same commands.

The checked-in sample run passed with ten steps, five coordinate taps, one screenshot assertion, and four captured screenshots.

Buggy Controller Commands tab captured during the Luotsi walkthrough.
The scenario starts on the Commands tab and uses coordinate taps because this Android 6 device exposes weak hierarchy output.
Buggy Controller Telemetry tab captured during the Luotsi walkthrough.
The Telemetry tab is useful here because it shows the app state Luotsi is preserving even when semantic telemetry events are absent.
Buggy Controller Map tab captured during the Luotsi walkthrough.
The Map tab demonstrates a stable screenshot artifact even on a legacy device where selector-driven flows are not reliable.
Buggy Controller Vision tab captured during the Luotsi walkthrough.
The Vision tab is one of the slower capture points in the sample report, which makes it a useful artifact for replay-oriented triage.

Why screenshot-first scenarios were the right fit

Section titled “Why screenshot-first scenarios were the right fit”

This device is old enough that uiautomator dump can fail instead of returning usable XML. In that environment, Luotsi still gives you a workable automation loop: coordinate taps, screenshot assertions, JSON and JUnit reports, replay metadata, and failure bundles that explain what broke.

Fallback screenshot captured when screen-state and hierarchy extraction failed on an older Android device.
Even the hierarchy failure path leaves behind a structured error and a screenshot artifact, which is exactly the kind of evidence you want in CI or while debugging remotely.

Follow the sample run with the artifact-oriented commands that make Luotsi useful after the device session is over:

Terminal window
luotsi scenario-explain --file ./examples/scenarios/buggy-controller-live-demo.json
luotsi replay open --artifacts ./artifacts/buggy-demo --dry-run
luotsi replay summarize --artifacts ./artifacts/buggy-demo
luotsi replay capsule --artifacts ./artifacts/buggy-demo --write-readme --write-json

The useful files are not just the explicit JSON and JUnit reports. The artifact root also preserves session-timeline.jsonl and session-replay.json, which means the same walkthrough can be reopened later through replay commands without reconnecting to the device.

The device is old enough to expose weak uiautomator dump behavior. That makes it a good example of Luotsi’s operating model: even when hierarchy extraction is rough, the tool still records the device, runs the scenario, emits structured reports, and keeps artifacts that explain what happened.

It is also the shortest public example that ties together installation-ready CLI commands, a checked-in scenario file, replay-oriented outputs, and a real troubleshooting edge case on physical hardware.