diff --git a/.github/workflows/maestro-cloud-rntester.yml b/.github/workflows/maestro-cloud-rntester.yml index 7f245bbcbebf..7c2afc24ea8b 100644 --- a/.github/workflows/maestro-cloud-rntester.yml +++ b/.github/workflows/maestro-cloud-rntester.yml @@ -46,7 +46,7 @@ jobs: test: name: Maestro Cloud ${{ inputs.platform }} RNTester runs-on: ubuntu-latest - timeout-minutes: 75 + timeout-minutes: 105 steps: - name: Checkout uses: actions/checkout@v6 @@ -84,7 +84,7 @@ jobs: env: | APP_ID=${{ inputs.app-id }} maestro-cli-version: 2.6.1 - timeout: 60 + timeout: 90 - name: Check Maestro Cloud result if: always() env: diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index c138cd5730fa..97083115acac 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -186,7 +186,7 @@ jobs: app-id: com.meta.RNTester.localDevelopment device-model: iPhone-17-Pro device-os: iOS-26-2 - exclude-tags: android-only + exclude-tags: android-only,local-screenshot-baseline secrets: inherit test_e2e_ios_rntester: diff --git a/packages/rn-tester/.maestro/alert.yml b/packages/rn-tester/.maestro/alert.yml new file mode 100644 index 000000000000..a8892ddc5da6 --- /dev/null +++ b/packages/rn-tester/.maestro/alert.yml @@ -0,0 +1,24 @@ +appId: ${APP_ID} # iOS: com.meta.RNTester.localDevelopment | Android: com.facebook.react.uiapp +--- +- launchApp +- stopApp +- openLink: rntester://example/AlertExample/default-button +- runFlow: ./helpers/confirm-open-link.yml +- extendedWaitUntil: + visible: + id: 'alert-with-default-button' + timeout: 120000 +- tapOn: + id: 'alert-with-default-button' +- assertVisible: 'An external USB drive has been detected!' +- tapOn: 'OK' +- openLink: rntester://example/AlertExample/three-buttons +- runFlow: ./helpers/confirm-open-link.yml +- extendedWaitUntil: + visible: + id: 'alert-with-three-buttons' + timeout: 30000 +- tapOn: + id: 'alert-with-three-buttons' +- assertVisible: 'Do you want to save your changes?' +- tapOn: 'Cancel' diff --git a/packages/rn-tester/.maestro/animated-fade-in-view.yml b/packages/rn-tester/.maestro/animated-fade-in-view.yml new file mode 100644 index 000000000000..d71c1b2d2ceb --- /dev/null +++ b/packages/rn-tester/.maestro/animated-fade-in-view.yml @@ -0,0 +1,20 @@ +appId: ${APP_ID} # iOS: com.meta.RNTester.localDevelopment | Android: com.facebook.react.uiapp +--- +- launchApp +- stopApp +- openLink: rntester://example/Animated/fadeInView +- runFlow: ./helpers/confirm-open-link.yml +- extendedWaitUntil: + visible: + id: 'toggle-button' + timeout: 120000 +- assertVisible: + id: 'fade-in-view' +- tapOn: + id: 'toggle-button' +- assertNotVisible: + id: 'fade-in-view' +- tapOn: + id: 'toggle-button' +- assertVisible: + id: 'fade-in-view' diff --git a/packages/rn-tester/.maestro/appearance.yml b/packages/rn-tester/.maestro/appearance.yml new file mode 100644 index 000000000000..18a1f6cc4d8f --- /dev/null +++ b/packages/rn-tester/.maestro/appearance.yml @@ -0,0 +1,9 @@ +appId: ${APP_ID} # iOS: com.meta.RNTester.localDevelopment | Android: com.facebook.react.uiapp +--- +- launchApp +- stopApp +- openLink: rntester://example/AppearanceExample +- runFlow: ./helpers/confirm-open-link.yml +- extendedWaitUntil: + visible: 'useColorScheme hook' + timeout: 120000 diff --git a/packages/rn-tester/.maestro/filter-animated-blur.yml b/packages/rn-tester/.maestro/filter-animated-blur.yml new file mode 100644 index 000000000000..158794ca7988 --- /dev/null +++ b/packages/rn-tester/.maestro/filter-animated-blur.yml @@ -0,0 +1,14 @@ +appId: ${APP_ID} # iOS: com.meta.RNTester.localDevelopment | Android: com.facebook.react.uiapp +--- +- launchApp +- stopApp +- openLink: rntester://example/Filter/animated-blur +- runFlow: ./helpers/confirm-open-link.yml +- extendedWaitUntil: + visible: + id: 'animated-blur-button' + timeout: 120000 +- tapOn: + id: 'animated-blur-button' +- assertVisible: + id: 'animated-blur-view' diff --git a/packages/rn-tester/.maestro/helpers/confirm-open-link.yml b/packages/rn-tester/.maestro/helpers/confirm-open-link.yml new file mode 100644 index 000000000000..1fa66d36dbcf --- /dev/null +++ b/packages/rn-tester/.maestro/helpers/confirm-open-link.yml @@ -0,0 +1,9 @@ +appId: ${APP_ID} # iOS: com.meta.RNTester.localDevelopment | Android: com.facebook.react.uiapp +--- +- runFlow: + when: + platform: iOS + commands: + - tapOn: + text: 'Open' + optional: true diff --git a/packages/rn-tester/.maestro/textinput-uncontrolled.yml b/packages/rn-tester/.maestro/textinput-uncontrolled.yml new file mode 100644 index 000000000000..3e992b2acb3a --- /dev/null +++ b/packages/rn-tester/.maestro/textinput-uncontrolled.yml @@ -0,0 +1,18 @@ +appId: ${APP_ID} # iOS: com.meta.RNTester.localDevelopment | Android: com.facebook.react.uiapp +--- +- launchApp +- stopApp +- openLink: rntester://example/TextInput/uncontrolledComponent +- runFlow: ./helpers/confirm-open-link.yml +- extendedWaitUntil: + visible: + id: 'uncontrolled-textinput' + timeout: 120000 +- tapOn: + id: 'uncontrolled-textinput' +- eraseText +- inputText: 'New value' +- hideKeyboard +- assertVisible: + id: 'uncontrolled-textinput' + text: 'New value' diff --git a/packages/rn-tester/.maestro/touchable.yml b/packages/rn-tester/.maestro/touchable.yml new file mode 100644 index 000000000000..ae2dcdb6ae68 --- /dev/null +++ b/packages/rn-tester/.maestro/touchable.yml @@ -0,0 +1,46 @@ +appId: ${APP_ID} # iOS: com.meta.RNTester.localDevelopment | Android: com.facebook.react.uiapp +--- +- launchApp +- stopApp +- openLink: rntester://example/TouchableExample/feedback-events +- runFlow: ./helpers/confirm-open-link.yml +- extendedWaitUntil: + visible: + id: 'touchable_feedback_events_button' + timeout: 120000 +- tapOn: + id: 'touchable_feedback_events_button' +- assertVisible: + id: 'touchable_feedback_events_console' +- openLink: rntester://example/TouchableExample/highlight +- runFlow: ./helpers/confirm-open-link.yml +- extendedWaitUntil: + visible: + id: 'touchable_highlight_text_button' + timeout: 30000 +- tapOn: + id: 'touchable_highlight_text_button' +- assertVisible: + id: 'touchable_highlight_console' + text: 'TouchableHighlight onPress' +- openLink: rntester://example/TouchableExample/hit-slop +- runFlow: ./helpers/confirm-open-link.yml +- extendedWaitUntil: + visible: + id: 'touchable_hit_slop_button' + timeout: 30000 +- tapOn: + id: 'touchable_hit_slop_button' +- assertVisible: + id: 'touchable_hit_slop' +- openLink: rntester://example/TouchableExample/without-feedback +- runFlow: ./helpers/confirm-open-link.yml +- extendedWaitUntil: + visible: + id: 'touchable_without_feedback_button' + timeout: 30000 +- tapOn: + id: 'touchable_without_feedback_button' +- assertVisible: + id: 'touchable_without_feedback_console' + text: 'TouchableWithoutFeedback onPress'