From a27c019e701c7a47402e55fffd8077bd48d3417d Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 26 Jul 2026 07:45:31 +0000 Subject: [PATCH] Fix flaky Maestro E2E sign-in setup on iOS The e2eSignInAlice button only mounts once the proxy is configured, which previously relied solely on the proxy TextInput's onSubmitEditing handler triggered via `pressKey: Enter`. Enter is unreliable on the iOS simulator, so the sign-in buttons sometimes never appeared and flows failed with "Element not found: e2eSignInAlice". - TestCtrls.e2e.tsx: extract the proxy-configuration logic into a named onConfigureProxy function, still called by onSubmitEditing (Enter remains a fallback), and add a dedicated e2eConfigureProxy Pressable that is always rendered so setup can tap it deterministically. - setupApp.yml: tap e2eConfigureProxy instead of pressing Enter, then guard with an extendedWaitUntil for e2eSignInAlice (60000ms) so the race becomes an explicit bounded wait shared by every flow reusing this setup. - run-nightly-e2e.sh: add `--retries 2` to the maestro test invocation so a single flaky miss doesn't fail the whole nightly run. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Umqi3SMj5PvH2ZVxQYWCcx --- .github/scripts/run-nightly-e2e.sh | 1 + __e2e__/setupApp.yml | 7 ++++++- src/view/com/testing/TestCtrls.e2e.tsx | 21 ++++++++++++++------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/.github/scripts/run-nightly-e2e.sh b/.github/scripts/run-nightly-e2e.sh index e2c9942884..72f76ff9b1 100755 --- a/.github/scripts/run-nightly-e2e.sh +++ b/.github/scripts/run-nightly-e2e.sh @@ -159,6 +159,7 @@ phase "Running Maestro flows" set +e maestro test \ --udid "$device_id" \ + --retries 2 \ --format JUNIT \ --output "$artifact_dir/report.xml" \ --config __e2e__/config.yml \ diff --git a/__e2e__/setupApp.yml b/__e2e__/setupApp.yml index ab9623ffba..cc436caa2a 100644 --- a/__e2e__/setupApp.yml +++ b/__e2e__/setupApp.yml @@ -33,4 +33,9 @@ appId: xyz.blueskyweb.app - tapOn: id: e2eProxyHeaderInput - inputText: ${output.result} -- pressKey: Enter +- tapOn: + id: e2eConfigureProxy +- extendedWaitUntil: + visible: + id: e2eSignInAlice + timeout: 60000 diff --git a/src/view/com/testing/TestCtrls.e2e.tsx b/src/view/com/testing/TestCtrls.e2e.tsx index f3f7743b7e..9dbe022142 100644 --- a/src/view/com/testing/TestCtrls.e2e.tsx +++ b/src/view/com/testing/TestCtrls.e2e.tsx @@ -62,6 +62,13 @@ export function TestCtrls() { setShowLoggedOut(false) } const [proxyHeader, setProxyHeader] = useState('') + const onConfigureProxy = () => { + const header = `${proxyHeader}#bsky_appview` + BLUESKY_PROXY_HEADER.set(header) + agent.configureProxy(header as any) + hasConfiguredProxy = true + setIsProxyConfigured(true) + } return ( { - const header = `${proxyHeader}#bsky_appview` - BLUESKY_PROXY_HEADER.set(header) - agent.configureProxy(header as any) - hasConfiguredProxy = true - setIsProxyConfigured(true) - }} + onSubmitEditing={onConfigureProxy} + style={BTN} + /> + {isProxyConfigured && (