diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 48c2ec055c..e5cba9763a 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -391,8 +391,7 @@ jobs: force-avd-creation: false disable-animations: true disable-spellchecker: true - target: 'aosp_atd' - channel: canary # Necessary for ATDs + target: 'google_apis' emulator-options: > -no-window -no-snapshot-save diff --git a/dev-packages/e2e-tests/maestro/feedback.yml b/dev-packages/e2e-tests/maestro/feedback.yml index ce7d79b89d..92f17871c4 100644 --- a/dev-packages/e2e-tests/maestro/feedback.yml +++ b/dev-packages/e2e-tests/maestro/feedback.yml @@ -17,3 +17,13 @@ jsEngine: graaljs file: feedback/happyFlow-android.yml when: platform: Android + +- runFlow: + file: feedback/captureFlow-ios.yml + when: + platform: iOS + +- runFlow: + file: feedback/captureFlow-android.yml + when: + platform: Android diff --git a/dev-packages/e2e-tests/maestro/feedback/captureFlow-android.yml b/dev-packages/e2e-tests/maestro/feedback/captureFlow-android.yml new file mode 100644 index 0000000000..a949b7a89b --- /dev/null +++ b/dev-packages/e2e-tests/maestro/feedback/captureFlow-android.yml @@ -0,0 +1,54 @@ +# This is a happy path test for the feedback widget on Android. +# It verifies that the feedback form can be opened, filled out, and submitted successfully +appId: ${APP_ID} +jsEngine: graaljs +--- + +# Show feedback button +- tapOn: 'Feedback' + +# Open feedback widget +- tapOn: 'Report a Bug' + +# Assert that the feedback form is visible +- extendedWaitUntil: + visible: 'Report a Bug' + timeout: 5_000 + +# Fill out name field +- tapOn: 'Your Name' +- inputText: 'John Doe' + +# Fill out email field +- tapOn: 'your.email@example.org' +- inputText: 'test@email.com' + +# Fill out message field +- tapOn: "What's the bug? What did you expect?" +- inputText: 'This is a test feedback message with a screenshot from CI e2e tests' + +# Take screenshot +- scrollUntilVisible: + element: + text: 'Take a screenshot' +- tapOn: 'Take a screenshot' +- tapOn: 'Take Screenshot' + +# Assert that the feedback form is visible +- extendedWaitUntil: + visible: 'Report a Bug' + timeout: 5_000 + +# Hide keyboard by tapping on a non-tappable element +- tapOn: 'Email' + +# Submit feedback +- scrollUntilVisible: + element: + text: 'Send Bug Report' +- tapOn: 'Send Bug Report' +- assertVisible: 'Thank you for your report!' +- tapOn: 'OK' + +# Verify feedback form is closed and the home screen is visible +- assertVisible: 'Welcome to React Native' diff --git a/dev-packages/e2e-tests/maestro/feedback/captureFlow-ios.yml b/dev-packages/e2e-tests/maestro/feedback/captureFlow-ios.yml new file mode 100644 index 0000000000..6a3ebe8023 --- /dev/null +++ b/dev-packages/e2e-tests/maestro/feedback/captureFlow-ios.yml @@ -0,0 +1,58 @@ +# This is a happy path test for the feedback widget on iOS. +# It verifies that the feedback form can be opened, filled out, and submitted successfully +appId: ${APP_ID} +jsEngine: graaljs +--- + +# Show feedback button +- tapOn: 'Feedback' + +# Open feedback widget +- tapOn: + id: 'sentry-feedback-button' + +# Assert that the feedback form is visible +- extendedWaitUntil: + visible: + id: 'sentry-feedback-form-title' + timeout: 5_000 + +# Fill out name field +- tapOn: + id: 'sentry-feedback-name-input' +- inputText: 'John Doe' + +# Fill out email field +- tapOn: + id: 'sentry-feedback-email-input' +- inputText: 'test@email.com' + +# Fill out message field +- tapOn: + id: 'sentry-feedback-message-input' +- inputText: 'This is a test feedback message with a screenshot from CI e2e tests' + +# Take screenshot +- scrollUntilVisible: + element: + id: 'sentry-feedback-take-screenshot-button' +- tapOn: + id: 'sentry-feedback-take-screenshot-button' +- tapOn: + id: 'sentry-feedback-screenshot-button' + +# Hide keyboard by tapping on a non-tappable element +- tapOn: + id: 'sentry-logo' + +# Submit feedback +- scrollUntilVisible: + element: + id: 'sentry-feedback-submit-button' +- tapOn: + id: 'sentry-feedback-submit-button' +- assertVisible: 'Thank you for your report!' +- tapOn: 'OK' + +# Verify feedback form is closed and the home screen is visible +- assertVisible: 'Welcome to React Native' diff --git a/dev-packages/e2e-tests/maestro/feedback/happyFlow-android.yml b/dev-packages/e2e-tests/maestro/feedback/happyFlow-android.yml index 221b0cbf84..cc81ab8dd4 100644 --- a/dev-packages/e2e-tests/maestro/feedback/happyFlow-android.yml +++ b/dev-packages/e2e-tests/maestro/feedback/happyFlow-android.yml @@ -27,6 +27,9 @@ jsEngine: graaljs - tapOn: "What's the bug? What did you expect?" - inputText: 'This is a test feedback message from CI e2e tests' +# Hide keyboard by tapping on a non-tappable element +- tapOn: 'Email' + # Submit feedback - scrollUntilVisible: element: diff --git a/dev-packages/e2e-tests/maestro/feedback/happyFlow-ios.yml b/dev-packages/e2e-tests/maestro/feedback/happyFlow-ios.yml index 7f8c3340b1..41d36cf15c 100644 --- a/dev-packages/e2e-tests/maestro/feedback/happyFlow-ios.yml +++ b/dev-packages/e2e-tests/maestro/feedback/happyFlow-ios.yml @@ -32,6 +32,10 @@ jsEngine: graaljs id: 'sentry-feedback-message-input' - inputText: 'This is a test feedback message from CI e2e tests' +# Hide keyboard by tapping on a non-tappable element +- tapOn: + id: 'sentry-logo' + # Submit feedback - scrollUntilVisible: element: diff --git a/dev-packages/e2e-tests/patch-scripts/rn.patch.app.js b/dev-packages/e2e-tests/patch-scripts/rn.patch.app.js index 48660f1a56..ec6b3f5262 100755 --- a/dev-packages/e2e-tests/patch-scripts/rn.patch.app.js +++ b/dev-packages/e2e-tests/patch-scripts/rn.patch.app.js @@ -32,6 +32,9 @@ Sentry.init({ }, integrations: [ Sentry.mobileReplayIntegration(), + Sentry.feedbackIntegration({ + enableTakeScreenshot: true, + }), ], }); `; diff --git a/packages/core/src/js/feedback/FeedbackWidget.tsx b/packages/core/src/js/feedback/FeedbackWidget.tsx index 277d172290..cd153d334a 100644 --- a/packages/core/src/js/feedback/FeedbackWidget.tsx +++ b/packages/core/src/js/feedback/FeedbackWidget.tsx @@ -351,7 +351,7 @@ export class FeedbackWidget extends React.Component - {text.captureScreenshotButtonLabel} + {text.captureScreenshotButtonLabel} )} diff --git a/packages/core/src/js/feedback/ScreenshotButton.tsx b/packages/core/src/js/feedback/ScreenshotButton.tsx index 18cfa19239..40eae6168f 100644 --- a/packages/core/src/js/feedback/ScreenshotButton.tsx +++ b/packages/core/src/js/feedback/ScreenshotButton.tsx @@ -82,7 +82,7 @@ export class ScreenshotButton extends React.Component { accessibilityLabel={text.triggerAriaLabel} > - {text.triggerLabel} + {text.triggerLabel} ); } diff --git a/packages/core/test/feedback/__snapshots__/ScreenshotButton.test.tsx.snap b/packages/core/test/feedback/__snapshots__/ScreenshotButton.test.tsx.snap index 2cd6455502..abc99b3789 100644 --- a/packages/core/test/feedback/__snapshots__/ScreenshotButton.test.tsx.snap +++ b/packages/core/test/feedback/__snapshots__/ScreenshotButton.test.tsx.snap @@ -78,6 +78,7 @@ exports[`ScreenshotButton matches the snapshot with custom styles 1`] = ` "fontSize": 18, } } + testID="sentry-feedback-screenshot-button" > Take Screenshot @@ -162,6 +163,7 @@ exports[`ScreenshotButton matches the snapshot with custom texts 1`] = ` "fontSize": 18, } } + testID="sentry-feedback-screenshot-button" > Take Screenshot @@ -246,6 +248,7 @@ exports[`ScreenshotButton matches the snapshot with default configuration 1`] = "fontSize": 18, } } + testID="sentry-feedback-screenshot-button" > Take Screenshot