TODO: testID additions needed for stable Maestro selectors
These are components that need testID="..." added by the UI agent (rebreak-native-ui domain).
Ahmed does NOT add these — list is for coordination.
Priority: HIGH = flow currently uses coordinate fallback or is skipped.
Priority: MEDIUM = flow works via text selector but will break on i18n locale change.
Priority: LOW = nice to have, flow is stable enough without it.
HIGH — Coordinate fallbacks (breaks on layout change)
| Component |
File |
Recommended testID |
Used by flow |
| Avatar Pressable (menu trigger) |
components/AppHeader.tsx line ~109 |
header-avatar-btn |
all flows that open dropdown |
| Nickname edit Pressable in ProfileHeader |
components/profile/ProfileHeader.tsx |
profile-edit-nickname-btn |
profile/view-and-edit.yaml |
| Photo/avatar area tap in ProfileHeader |
components/profile/ProfileHeader.tsx |
profile-edit-avatar-btn |
profile/view-and-edit.yaml |
AppHeader snippet (line ~109):
<Pressable
testID="header-avatar-btn" // <-- add this
onPress={() => setMenuOpen(true)}
...
>
HIGH — SOS screen send button (no text, no testID)
| Component |
File |
Recommended testID |
Used by flow |
| Send/submit Pressable in chat input area |
app/urge.tsx |
sos-send-btn |
urge/sos-flow.yaml |
The send icon Pressable has no text and no testID. Current flow cannot reliably tap it.
HIGH — Demographics field row Pressables
Each row in DemographicsAccordion that opens a WheelPickerModal is a Pressable with no testID.
Currently matched via hardcoded German label text (stable, but fragile if labels change).
| Field |
File |
Recommended testID |
| Geburtsjahr row |
components/profile/DemographicsAccordion.tsx |
demographics-birth-year-row |
| Geschlecht row |
components/profile/DemographicsAccordion.tsx |
demographics-gender-row |
| Familienstand row |
components/profile/DemographicsAccordion.tsx |
demographics-marital-row |
| Berufsstatus row |
components/profile/DemographicsAccordion.tsx |
demographics-employment-row |
| Bundesland row |
components/profile/DemographicsAccordion.tsx |
demographics-bundesland-row |
| Stadt / Landkreis row |
components/profile/DemographicsAccordion.tsx |
demographics-city-row |
MEDIUM — Auth screen inputs (currently matched via i18n placeholder text)
| Component |
File |
Recommended testID |
Risk |
| Email TextInput |
app/(auth)/signin.tsx line ~139 |
auth-email-input |
breaks if de.json placeholder changes |
| Password TextInput |
app/(auth)/signin.tsx line ~151 |
auth-password-input |
same |
| Submit Pressable |
app/(auth)/signin.tsx line ~173 |
auth-signin-btn |
breaks if t('auth.signin') changes |
MEDIUM — ProfileEdit screen nickname input
| Component |
File |
Recommended testID |
| Nickname TextInput |
app/profile/edit.tsx line ~295 |
profile-nickname-input |
| Save Pressable |
app/profile/edit.tsx line ~154 |
profile-save-btn |
MEDIUM — ComposeCard share button
| Component |
File |
Recommended testID |
Risk |
| Share/Teilen Pressable |
components/ComposeCard.tsx line ~165 |
compose-share-btn |
breaks if t('community.share') changes |
LOW — Settings screen rows
Theme selection uses @react-native-menu/menu (native iOS UIMenu).
Maestro may not interact with native UIMenu popovers — coordinate taps on the anchor
Pressable are the only option without testID. If the native menu approach proves unreliable,
a fallback custom picker with testID would be needed.
| Component |
File |
Recommended testID |
| Theme menu anchor Pressable |
app/settings.tsx |
settings-theme-picker |
| Language menu anchor Pressable |
app/settings.tsx |
settings-language-picker |
Notes
- Adding testID to a Pressable/TextInput does NOT require any logic change — it is a
metadata prop only. Safe for UI agent to add without Ahmed review.
- RiveAvatar in urge.tsx: no testID needed — Maestro cannot assert animation states.
SOS screen is verified via the chat TextInput placeholder instead.
- NotificationsDropdown: not tested in current flow suite — no testID needed yet.