koopa-admin-log/scripts/taler-monitoring/android-test/GUI-AUTOMATION-NOTES.md
Hernâni Marques 07045ca388
monitoring: GUI-AUTOMATION-NOTES + AUTO_ANDROID/AUTO_GUI flags
Document minimal variant; Linux defaults to Android-only automation;
macOS can enable both ecosystems later via flags.
2026-07-17 21:24:05 +02:00

6.9 KiB
Raw Blame History

GUI automation notes (Android wallet)

Canonical notes for graphical Android wallet tests against GOA / stage. Older name AUTOMATED-GUI-NOTES.md redirects here.


Minimal variant (implemented first) — status 2026-07

This is the minimal vanilla path we actually shipped; full dual-platform GUI is planned via flags (below), not required to use these scripts today.

Piece Status Notes
F-Droid published APK install done net.taler.wallet.fdroid 1.6.1 / 854
Source build + same smoke done :wallet:assembleFdroidDebugnet.taler.wallet.fdroid.debug
Default source branch done dev/hernani-inference/fix-bank-withdraw-auto-exchange (minimal GOA exchange auto-add)
Deep-link entry (≡ QR) done adb VIEW taler://withdraw/… / taler://pay…
Explorer API mint (chain) done run-goa-gui-chain.sh (GOA + stage)
UI taps via uiautomator done best-effort Confirm/ToS/Pay; ANR → prefer Wait
Screenshots / logcat artifacts done under out*, out-gui-chain/ (gitignored)
Host CLI e2e settlement separate taler-monitoring.sh e2e / ladder (not Android UI)
Reliable unattended Confirm on 4GiB Linux host limited System UI ANR; use phone or more RAM
iOS GUI not in this tree see taler-ios dev/hernani-inference/gui-workflows
macOS full dual AVD helpers upstream taler-android gui-workflows (Homebrew); ported ideas here for Linux

Ground rule: bring it to run; app diffs only if needed and minimal; prefer extending existing dev/hernani-inference/* branches over new trees.

cd scripts/taler-monitoring/android-test

# Minimal hybrid (install + deep-link + light taps)
STACK=goa ./run-android-pay-smoke.sh

# GUI multi-round taps
STACK=goa ./run-android-gui-smoke.sh
STACK=stage ./run-android-gui-smoke.sh

# Explorer mint + multi withdraw/pay chain (from gui-workflows)
EXP_PW_FILE=$HOME/src/koopa/koopa-admin-secrets/koopa/host-root/taler-bank/bank-explorer-password.txt \
  STACK=goa PKG=net.taler.wallet.fdroid.debug \
  ./run-goa-gui-chain.sh

# Build fix-branch APK then smoke (GUI=1 for gui smoke)
./run-android-build-and-smoke.sh
GUI=1 ./run-android-build-and-smoke.sh

Platform capability flags (planned + defaults)

Automation can run on hosts that support Android only, GUI tooling only (conceptual), or both. Flags keep that explicit for CI and laptops.

Proposed env flags

Variable Values Meaning
AUTO_ANDROID 0 / 1 Run Android wallet automation (adb, APK, emulator/device)
AUTO_GUI 0 / 1 Drive graphical UI (uiautomator taps, multi-round). If 0, deep-link/CLI-only install smoke.
AUTO_PLATFORM auto / linux / macos / ios Host family (optional override)

Semantics:

AUTO_ANDROID AUTO_GUI Behaviour
1 0 Android install + deep-link smoke only (no multi-round taps)
1 1 Android + graphical drive (vanilla GUI / chain)
0 1 Reserved (e.g. future desktop/web GUI); currently no-op with a clear message
0 0 Skip mobile automation

Defaults by host (when flags unset)

Host (uname -s) Default AUTO_ANDROID Default AUTO_GUI Rationale
Linux 1 1 if device/emulator present, else scripts exit 3 This repos day-to-day path; Android only (no iOS here)
Darwin (macOS) 1 1 Can run Android emulators and (separately) taler-ios GUI helpers; both flags on for Android scripts; iOS is out of tree
Other 0 0 Fail closed

Linux default = Android (no second mobile platform in this suite).
macOS may enable both ecosystems in the wider monorepo sense; for these scripts only Android is implemented — set AUTO_ANDROID=1 (default) and keep iOS under taler-ios.

Resolution helper (convention for future wrappers)

# Example for a future run-all-mobile.sh
os=$(uname -s)
: "${AUTO_PLATFORM:=auto}"
case "$AUTO_PLATFORM" in
  auto) case "$os" in Linux) AUTO_PLATFORM=linux ;; Darwin) AUTO_PLATFORM=macos ;; *) AUTO_PLATFORM=other ;; esac ;;
esac
case "$AUTO_PLATFORM" in
  linux)
    : "${AUTO_ANDROID:=1}"
    : "${AUTO_GUI:=1}"
    # no iOS
    ;;
  macos)
    : "${AUTO_ANDROID:=1}"
    : "${AUTO_GUI:=1}"
    # optional later: AUTO_IOS=1 for taler-ios scripts
    ;;
  *)
    : "${AUTO_ANDROID:=0}"
    : "${AUTO_GUI:=0}"
    ;;
esac

Scripts today implement Android only; they should honour:

  • AUTO_ANDROID=0 → exit 0 with “skipped (AUTO_ANDROID=0)”
  • AUTO_GUI=0 → call deep-link smoke without multi-round GUI (or set GUI_ROUNDS=0)

Vanilla layers (detail)

Layer What Tooling
A — Install F-Droid or from-source APK adb install
B — Entry (shortcut) taler://withdraw/… / taler://pay… adb am start -a VIEW
C — Graphical UI Confirm / ToS / Pay taps; ANR Wait uiautomator + lib_ui.py / chain
D — Evidence Screenshots, XML, logcat, URIs out*/

Legitimate shortcuts

Shortcut Replaces
Deep-link withdraw/pay Camera QR / opening paywall
Host POST template → pay URI Browser shop checkout UI
Label-list taps Human reading button text
Skip full ToS scroll Tap Accept if shown

Scripts

Script Role
run-android-pay-smoke.sh Hybrid: install + deep-link + light taps
run-android-gui-smoke.sh Multi-round GUI drive
run-goa-gui-chain.sh Multi mint/withdraw/pay (gui-workflows port)
run-android-build-and-smoke.sh Build inference fix branch + smoke (GUI=1 optional)
lib_ui.py Dump/tap/ANR helpers

Stacks under test

Stack Withdraw Pay
GOA explorer mint / demo-withdraw.json @ bank.hacktivism.ch goa-shop templates / Paivana pay-template
stage explorer / demo-withdraw @ stage.bank… fermes / jardin public templates

Upstream branches (taler-android dev/hernani-inference/*)

Branch Role
gui-workflows macOS emulator helpers + original goa-chain-emu.sh
fix/bank-withdraw-auto-exchange Minimal GOA exchange auto-add (default build branch)
fix/withdraw-spinner-fallback Spinner + OIM; use if spinner still hangs
experimental-oim* Optional cash UI

Checklist

  • Minimal variant documented
  • Two stacks (goa / stage)
  • Flags design (AUTO_ANDROID / AUTO_GUI / platform defaults)
  • Linux default = Android suite only
  • Inference-branch policy
  • Wrapper enforces flags in every entry script (incremental)
  • Reliable unattended Confirm on low-RAM Linux emulator