ClaireDocs

Ask Claire

Search the project, not the web.

Answers are grounded in Claire’s published documentation and include the source pages used.

⌘/Ctrl + J opens Ask Claire anywhere in docs.

E2E test selector map

Stable test identifiers for Claire’s browser and mobile acceptance flows.

Currentin progressReviewed 2026-08-17View source ↗

Every stable testID used by the Playwright suite. These are a contract: renaming one breaks tests silently in the sense that they fail for the wrong reason, so change them deliberately and update this page in the same commit.

Auth screens#

Sign in — /(auth)/signin#

SelectorElement
signin-screenRoot KeyboardAvoidingView
signin-email-inputEmail TextInput
signin-password-inputPassword TextInput
signin-submitSubmit TouchableOpacity
google-sign-in-signinGoogle sign-in button

Sign up — /(auth)/signup#

SelectorElement
signup-screenRoot view
signup-name-inputName TextInput
signup-email-inputEmail TextInput
signup-password-inputPassword TextInput
signup-submitSubmit TouchableOpacity

Platform connect — /(auth)/login#

SelectorElement
platform-login-screenRoot View
platform-selector-whatsappWhatsApp selector tile
platform-selector-telegramTelegram selector tile
platform-selector-instagramInstagram selector tile
platform-login-continue“Continue to Inbox” — shown once ≥1 platform is connected
platform-login-skip-dev“Skip (dev mode)” — only in __DEV__

Tab screens#

Dashboard — /(tabs)/dashboard#

SelectorElement
dashboard-screenRoot ScrollView
morning-brief-containerWrapper around MorningBrief; only rendered when brief text exists
urgent-cards-containerWrapper for UrgentCard rows; only rendered when urgent_messages are present

Inbox — /(tabs)/messages#

SelectorElement
messages-screenRoot View
messages-loadingLoading spinner
messages-search-inputSearch TextInput
messages-listConversation FlatList
messages-emptyEmpty state
message-card-<id>Individual MessageCard row; id is the message UUID
message-card-loop-badge-<id>OPEN LOOP badge when the chat has at least one open loop

Contacts — /(tabs)/contacts#

SelectorElement
contacts-screenRoot View
contacts-search-inputSearch TextInput
contacts-listContacts FlatList
contacts-emptyEmpty state

Loops — /(tabs)/loops#

Verified against apps/client/features/loops/loops-screen.tsx.

SelectorElement
loops-screenRoot View
loops-listLoops FlatList
loops-addAdd-loop button in the header
loops-tab-open"Open" filter chip
loops-tab-done"Completed" filter chip
loops-tab-waiting"I’m waiting" filter chip
loop-item-<id>Individual loop row
loop-toggle-<id>Complete/reopen checkbox on a loop row

Settings — /(tabs)/settings#

SelectorElement
settings-screenRoot ScrollView
settings-refresh-platformsRefresh platforms
settings-add-platformAdd platform
settings-no-platformsEmpty platforms view
settings-connect-platform“Connect Platform” in the empty state
settings-accountAccount row
settings-notificationsNotifications row
settings-aiAI settings row
settings-logoutLogout row
connected-platforms-listConnected platforms view
connected-platform-<platform>Platform row, e.g. connected-platform-whatsapp
reconnect-platform-<platform>Reconnect button
disconnect-platform-<platform>Disconnect button

Chat screen — /chat/[chatId]#

SelectorElement
chat-screenRoot SafeAreaView
chat-loadingLoading spinner
chat-message-listMessages FlatList
chat-emptyEmpty state
chat-inputComposer TextInput
chat-send-buttonSend button

AI suggestion strip#

SelectorElement
ai-suggestion-stripRoot; only visible when suggestions exist
ai-suggestion-scrollHorizontal ScrollView of chips
ai-suggestion-chip-<index>Individual suggestion card, 0-based
ai-suggestion-use-<index>“Use” — fills the composer
draft-reply-containerShown when no stored suggestions exist
draft-reply-buttonCalls /ai/responses/generate on demand
draft-reply-errorError text if generation fails

Platform auth modal#

SelectorElement
platform-auth-modalModal root
platform-auth-scrollScrollable content
platform-auth-successSuccess state
platform-auth-errorError state
instagram-web-loginInstagram web login root
instagram-username-inputUsername TextInput
instagram-password-inputPassword TextInput
instagram-toggle-passwordShow/hide password
instagram-sign-in-buttonSign in
instagram-2fa-input2FA code TextInput
instagram-2fa-submit2FA submit
instagram-try-againRetry
instagram-web-login-closeClose
instagram-native-webviewNative WebView
instagram-native-login-loadingNative loading view
instagram-native-login-closeNative close

Notes#

  • Platform-prefixed selectors use the lowercase Platform enum value.
  • Dynamic selectors written as <id> use the entity’s database UUID.
  • The web build is required for Playwright — see mobile/playwright.config.mjs.