On iOS, tapping "+" → "Add image" in the Composer left an invisible backdrop trapping touches after the native photo picker dismissed. Root cause: the dropdown menu's onSelect fired while the RN Modal was still completing UIKit dismissal, so PHPicker presented over a dismissing Modal that never cleanly released. DropdownMenu now defers the selected item's onSelect until Modal onDismiss (UIKit-level completion) plus a short buffer on iOS, then invokes it. Same DropdownMenu instance — no per-call opt-in. Along the way, the Maestro repro surfaced a controlled-TextInput character-drop race: fast inputText on a controlled input drops characters mid-type. Direct-host and pair-link inputs are now ref-backed uncontrolled inputs with stable testIDs. New reusable E2E primitives under packages/app/maestro/: - flows/land-in-chat.yaml — clearState + direct connect to 127.0.0.1:6767, lands in the composer. Compose on this for any composer-level fixture. - image-picker-repro.yaml — regression for the zombie-backdrop bug. docs/MOBILE_TESTING.md gains the patterns: reach-the-composer via land-in-chat, uncontrolled inputs for Maestro-typed fields, and the dropdown → native-presenter dismissal timing on iOS. Existing relay-pairing and relay-then-direct fixtures updated to use stable testIDs instead of ambiguous text / point-based taps.
50 lines
958 B
YAML
50 lines
958 B
YAML
appId: sh.paseo
|
|
---
|
|
- launchApp:
|
|
clearState: true
|
|
- runFlow: flows/launch.yaml
|
|
|
|
- tapOn: "Paste pairing link"
|
|
- eraseText
|
|
- inputText: ${PAIRING_OFFER_URL}
|
|
- tapOn:
|
|
id: "pair-link-submit"
|
|
|
|
- extendedWaitUntil:
|
|
visible: "New agent"
|
|
timeout: 20000
|
|
|
|
# Open settings and ensure we're connected (initially via relay).
|
|
- tapOn:
|
|
point: "8%,6%"
|
|
- extendedWaitUntil:
|
|
visible:
|
|
id: "sidebar-voice"
|
|
timeout: 10000
|
|
- tapOn:
|
|
point: "92%,94%"
|
|
- extendedWaitUntil:
|
|
visible: "Settings"
|
|
timeout: 20000
|
|
|
|
- extendedWaitUntil:
|
|
visible: "Connected via relay"
|
|
timeout: 20000
|
|
|
|
# Add a direct connection and ensure we prefer it when available.
|
|
- tapOn: "Edit"
|
|
- extendedWaitUntil:
|
|
visible: "Edit host"
|
|
timeout: 10000
|
|
|
|
- tapOn:
|
|
text: "192.168.1.10:6767"
|
|
- eraseText
|
|
- inputText: ${DIRECT_ENDPOINT}
|
|
- tapOn: "Add"
|
|
- tapOn: "Save"
|
|
|
|
- extendedWaitUntil:
|
|
visible: "Connected via ${DIRECT_ENDPOINT}"
|
|
timeout: 30000
|