From f5c250ed7a64cadfb7c40939cb6ea313a15a2ff4 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Thu, 12 Feb 2026 16:24:19 +0100 Subject: [PATCH] Fix Maestro tests again (#6167) * Increase the timeout for asserting 'Be in your element' is visible * Disable the chrome onboarding flow. This simplifies the code a lot and helps avoid corner cases. * More delays with timeout! * Add more info to the summary, specially when the tests fail, so we can quickly check what failed. * Make sure Maestro tests can't run in parallel, but APK builds can --- .github/workflows/maestro-local.yml | 24 +++++++++++++++---- .../maestro-local-with-screen-recording.sh | 7 ++++++ .maestro/tests/account/login.yaml | 21 ---------------- .maestro/tests/account/verifySession.yaml | 12 +++++++--- .../tests/assertions/assertInitDisplayed.yaml | 2 +- .../assertSessionVerificationDisplayed.yaml | 2 +- 6 files changed, 37 insertions(+), 31 deletions(-) diff --git a/.github/workflows/maestro-local.yml b/.github/workflows/maestro-local.yml index 4fd42534b7..a2851eb863 100644 --- a/.github/workflows/maestro-local.yml +++ b/.github/workflows/maestro-local.yml @@ -18,9 +18,8 @@ jobs: build-apk: name: Build APK runs-on: ubuntu-latest - # Allow one per PR. concurrency: - group: ${{ format('maestro-{0}', github.ref) }} + group: ${{ format('maestro-build-{0}', github.ref) }} cancel-in-progress: true steps: - uses: actions/checkout@v6 @@ -57,10 +56,10 @@ jobs: name: Maestro test suite runs-on: ubuntu-latest needs: [ build-apk ] - # Allow one per PR. + # Allow only one to run at a time, since they use the same environment. + # Otherwise, tests running in parallel can break each other. concurrency: - group: ${{ format('maestro-{0}', github.ref) }} - cancel-in-progress: true + group: maestro-test steps: - uses: actions/checkout@v6 if: (github.event_name == 'pull_request' && github.event.pull_request.fork == null) || github.event_name == 'workflow_dispatch' @@ -110,6 +109,21 @@ jobs: retention-days: 5 overwrite: true if-no-files-found: error + - name: Update summary (success) + if: steps.maestro_test.outcome == 'success' + run: | + echo "### Maestro tests worked :rocket:!" + - name: Update summary (failure) + if: steps.maestro_test.outcome != 'success' + run: | + LOG_FILE=$(find ~/.maestro/tests/ -name maestro.log) + echo "Log file: $LOG_FILE" + LOG_LINES="$(tail -n 30 $LOG_FILE)" + echo "### :x: Maestro tests failed... + + \`\`\` + $LOG_LINES + \`\`\`" >> $GITHUB_STEP_SUMMARY - name: Fail the workflow in case of error in test if: steps.maestro_test.outcome != 'success' run: | diff --git a/.github/workflows/scripts/maestro/maestro-local-with-screen-recording.sh b/.github/workflows/scripts/maestro/maestro-local-with-screen-recording.sh index a9f789a4f5..51a968fdec 100755 --- a/.github/workflows/scripts/maestro/maestro-local-with-screen-recording.sh +++ b/.github/workflows/scripts/maestro/maestro-local-with-screen-recording.sh @@ -8,6 +8,13 @@ # Please see LICENSE in the repository root for full details. # +# First we disable the onboarding flow on Chrome, which is a source of issues +# (see https://stackoverflow.com/a/64629745) +echo "Disabling Chrome onboarding flow" +adb shell am set-debug-app --persistent com.android.chrome +adb shell 'echo "chrome --disable-fre --no-default-browser-check --no-first-run" > /data/local/tmp/chrome-command-line' +adb shell am start -n com.android.chrome/com.google.android.apps.chrome.Main + adb install -r $1 echo "Starting the screen recording..." adb push .github/workflows/scripts/maestro/local-recording.sh /data/local/tmp/ diff --git a/.maestro/tests/account/login.yaml b/.maestro/tests/account/login.yaml index 0661a30981..873843b22d 100644 --- a/.maestro/tests/account/login.yaml +++ b/.maestro/tests/account/login.yaml @@ -8,27 +8,6 @@ appId: ${MAESTRO_APP_ID} - tapOn: id: "login-continue" ## MAS page -## Conditional workflow to pass the Chrome first launch welcome page. -- retry: - maxRetries: 3 - commands: - - runFlow: - when: - visible: 'Use without an account' - commands: - - tapOn: "Use without an account" - ## For older chrome versions - - runFlow: - when: - visible: 'Accept & continue' - commands: - - tapOn: "Accept & continue" - - runFlow: - when: - visible: 'No thanks' - commands: - - tapOn: "No thanks" -## Working when running Maestro locally, but not on the CI yet. - retry: maxRetries: 3 commands: diff --git a/.maestro/tests/account/verifySession.yaml b/.maestro/tests/account/verifySession.yaml index a16322543f..a59f60b88f 100644 --- a/.maestro/tests/account/verifySession.yaml +++ b/.maestro/tests/account/verifySession.yaml @@ -1,5 +1,8 @@ appId: ${MAESTRO_APP_ID} --- +- extendedWaitUntil: + visible: "Enter recovery key" + timeout: 30000 - takeScreenshot: build/maestro/150-Verify - tapOn: "Enter recovery key" - tapOn: @@ -7,7 +10,10 @@ appId: ${MAESTRO_APP_ID} - inputText: ${MAESTRO_RECOVERY_KEY} - hideKeyboard - tapOn: "Continue" -- extendedWaitUntil: - visible: "Device verified" - timeout: 30000 +- retry: + maxRetries: 3 + commands: + - extendedWaitUntil: + visible: "Device verified" + timeout: 30000 - tapOn: "Continue" diff --git a/.maestro/tests/assertions/assertInitDisplayed.yaml b/.maestro/tests/assertions/assertInitDisplayed.yaml index 6e895d9bbf..7b5a2e665b 100644 --- a/.maestro/tests/assertions/assertInitDisplayed.yaml +++ b/.maestro/tests/assertions/assertInitDisplayed.yaml @@ -2,4 +2,4 @@ appId: ${MAESTRO_APP_ID} --- - extendedWaitUntil: visible: "Be in your element" - timeout: 10000 + timeout: 30000 diff --git a/.maestro/tests/assertions/assertSessionVerificationDisplayed.yaml b/.maestro/tests/assertions/assertSessionVerificationDisplayed.yaml index f983ced873..fff0fe7b32 100644 --- a/.maestro/tests/assertions/assertSessionVerificationDisplayed.yaml +++ b/.maestro/tests/assertions/assertSessionVerificationDisplayed.yaml @@ -2,4 +2,4 @@ appId: ${MAESTRO_APP_ID} --- - extendedWaitUntil: visible: "Confirm your identity" - timeout: 20000 + timeout: 60000