Skip to content

chore(tests): burndown Onboarding POs (MMQA-2280) - #34816

Open
cmd-ob wants to merge 3 commits into
mainfrom
chore/mmqa-2280-onboarding-pos-burndown
Open

chore(tests): burndown Onboarding POs (MMQA-2280)#34816
cmd-ob wants to merge 3 commits into
mainfrom
chore/mmqa-2280-onboarding-pos-burndown

Conversation

@cmd-ob

@cmd-ob cmd-ob commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Description

Section 6/10 of the dual-framework burndown (MMQA-2238): migrate Onboarding page objects off the legacy dual-framework allowlist onto shared Gestures / Matchers / Assertions.

  • Migrate 15 Onboarding POs off UnifiedGestures / encapsulated* / Playwright* dual APIs
  • Add Gestures.hideKeyboard() for Appium-safe keyboard dismiss (iOS tapOutside)
  • Remove those paths from tests/framework/dual-framework-burndown.js

No product/UI behavior changes; test infrastructure only.

Changelog

CHANGELOG entry: null

Related issues

Fixes: https://consensyssoftware.atlassian.net/browse/MMQA-2280

Manual testing steps

Feature: dual-framework burndown — Onboarding page objects

  Scenario: allowlisted paths no longer include migrated Onboarding page objects
    Given the branch is checked out
    When `tests/framework/dual-framework-burndown.js` is inspected
    Then Onboarding PO paths from this PR are absent from the allowlist
    And those POs import Gestures / Matchers / Assertions instead of UnifiedGestures / encapsulated / Playwright*

  Scenario: migrated Onboarding POs pass dual-framework lint
    Given yarn dependencies are installed
    When eslint runs against the migrated Onboarding page-object files
    Then there are no dual-framework import errors for those files

Screenshots/Recordings

N/A — test-only page-object / gesture refactor; no user-facing UI changes.

Before

N/A

After

N/A

Pre-merge author checklist

Performance checks (if applicable)

  • I've tested on Android
    • Ideally on a mid-range device; emulator is acceptable
  • I've tested with a power user scenario
    • Use these power-user SRPs to import wallets with many accounts and tokens
  • I've instrumented key operations with Sentry traces for production performance metrics

For performance guidelines and tooling, see the Performance Guide.

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Low Risk
Test infrastructure and page-object refactors only; no production app changes. Regression risk is confined to Appium/onboarding E2E stability if locators or keyboard dismiss behavior diverge from the old dual paths.

Overview
Continues the dual-framework burndown by migrating 15 Onboarding page objects off UnifiedGestures, encapsulated/encapsulatedAction, and direct Playwright* APIs onto shared Matchers, Gestures, and Assertions, with platform branches where needed (PlatformDetector, native XPath for iOS fields).

Adds Gestures.hideKeyboard() (Appium-only, delegates to Playwright with Android hideKeyboard and iOS mobile: hideKeyboard / tapOutside) and wires it into flows like SRP import and metrics opt-in. Removes those Onboarding PO paths from dual-framework-burndown.js so they are no longer allowlisted.

Notable flow tweaks in migrated POs: ExperienceEnhancerBottomSheet.dismissIfPresent uses a shorter visibility probe; CreatePasswordView / ImportWalletView consolidate keyboard and tap behavior on the unified gesture API; MetaMetricsOptIn drops the Detox-only content swipe before Continue.

Reviewed by Cursor Bugbot for commit d7fab93. Bugbot is set up for automated code reviews on this repo. Configure here.

Migrate Onboarding page objects off dual-framework APIs onto Gestures/Matchers/Assertions and shrink the allowlist.

Co-authored-by: Cursor <cursoragent@cursor.com>
@cmd-ob
cmd-ob requested a review from a team as a code owner August 14, 2026 14:58
@github-actions

Copy link
Copy Markdown
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@github-actions github-actions Bot added the pr-not-ready-for-e2e Skip E2E and block merging. Remove this label once the PR is ready to run the E2E tests. label Aug 14, 2026
@metamask-ci metamask-ci Bot added team-qa QA team INVALID-PR-TEMPLATE PR's body doesn't match template labels Aug 14, 2026
@github-actions github-actions Bot added size-XL risk:high AI analysis: high risk labels Aug 14, 2026

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 3 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 46f402b. Configure here.

Comment thread tests/page-objects/Onboarding/ImportWalletView.ts Outdated
Comment thread tests/page-objects/Onboarding/OnboardingView.ts
Comment thread tests/page-objects/Onboarding/ExperienceEnhancerBottomSheet.ts
Use Gestures.hideKeyboard for iOS-safe dismiss, restore checkStability on onboarding CTA taps, and shorten dismissIfPresent probe timeout.

Co-authored-by: Cursor <cursoragent@cursor.com>
@cmd-ob cmd-ob added the no-changelog no-changelog Indicates no external facing user changes, therefore no changelog documentation needed label Aug 14, 2026
@metamask-ci metamask-ci Bot removed the INVALID-PR-TEMPLATE PR's body doesn't match template label Aug 14, 2026
@cmd-ob cmd-ob removed the pr-not-ready-for-e2e Skip E2E and block merging. Remove this label once the PR is ready to run the E2E tests. label Aug 14, 2026
Matchers.getElementByText uses contains matching and can hit the parent Text instead of the tappable link, so Add Device never opens after QR sync SRP onboarding.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

Copy link
Copy Markdown
Contributor

🔍 Smart E2E Test Selection

  • Selected E2E tags: SmokeAccounts, SmokeConfirmations, SmokeNetworkAbstractions, SmokeNetworkExpansion, SmokeSwap, SmokeStake, SmokeWalletPlatform, SmokeMoney, SmokePerps, SmokeMultiChainAPI, SmokePredictions, SmokeSeedlessOnboarding, SmokeBrowser, SmokeSnaps, SmokeMMConnect
  • Selected Performance tags: @PerformanceOnboarding
  • Risk Level: high
  • AI Confidence: 100%
click to see 🤖 AI reasoning details

E2E Test Selection:
Hard rule (test-framework-infra-change): Test framework infrastructure changed: tests/framework/Gestures.ts. Running all tests.

Performance Test Selection:
Multiple performance specs directly import the changed page objects: seedless-google-onboarding.spec.ts, seedless-apple-onboarding.spec.ts, seedless-telegram-onboarding.spec.ts, import-wallet.spec.ts, new-wallet-account-creation.spec.ts, and fresh-srp-wallet-creation.spec.ts all import OnboardingSheet, CreatePasswordView, OnboardingView, SocialLoginView, ImportWalletView, and other refactored page objects. These specs are tagged with @PerformanceOnboarding. The refactored locator strategies could cause these performance tests to fail or produce incorrect measurements if element interactions break. @PerformanceAccountList is also tagged in new-wallet-account-creation.spec.ts but the primary impact is on the onboarding flow itself.

View GitHub Actions results

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Performance Test Results

ℹ️ Performance test results are currently non-blocking and will not block this PR.

2 tests failed · 7 tests · 1 device

📱 Devices tested (1)

Android: Google Pixel 8 Pro (v14.0)

❌ Failed Tests (2)

🔬 App profiling vs main is included under each failed scenario that has a prior baseline.

@metamask-onboarding-team

Fresh SRP wallet creation performance

Platform Device Reason Recording
Android Google Pixel 8 Pro (v14.0) Quality gates exceeded 📹 Watch

🔬 App profiling check · Current run 31822837444 · Baseline (last run on main (scenario also failing)) run 30897750395 @ 67486d2

⚠️ No green baseline on main — comparing against the latest usable profiling.

Summary: ⚠️ 5 metrics over +10%: CPU avg (+2.37 (+39.8%)), CPU max (+3.05 (+15.9%)), Memory avg (+120.53 (+20.6%)), Memory max (+135.51 (+18.8%)), Slow frames (+22.3 (+888.5%))

ℹ️ API calls unavailable: Network logs API error: Bad Request

Full metric table (+10% variance rules)

Disclaimer — allowed variance: a +10% margin over the baseline is permitted.

  • If Current <= Baseline + 10%, treated as acceptable noise.
  • If Current > Baseline + 10%, Current and variance % are highlighted with ⚠️.
Metric Baseline Current Δ
CPU avg 5.95% 8.32% +2.37 (+39.8%) ⚠️
CPU max 19.17% 22.22% +3.05 (+15.9%) ⚠️
Memory avg 586.2 MB 706.73 MB +120.53 (+20.6%) ⚠️
Memory max 722.61 MB 858.12 MB +135.51 (+18.8%) ⚠️
Slow frames 2.51% 24.81% +22.3 (+888.5%) ⚠️
Frozen frames 0% 0% 0 (0%)
ANRs 0 0 0 (0%)
Issues 2 2 0 (0%)
Critical issues 1 1 0 (0%)
App size 328.67 MB 328.29 MB -0.38 (-0.1%)

Account creation after fresh install

Platform Device Reason Recording
Android Google Pixel 8 Pro (v14.0) Quality gates exceeded 📹 Watch

🔬 App profiling check · Current run 31822837444 · Baseline (last run on main (scenario also failing)) run 30897750395 @ 67486d2

⚠️ No green baseline on main — comparing against the latest usable profiling.

Summary: ⚠️ 4 metrics over +10%: Memory avg (+203.2 (+41.4%)), Memory max (+259.96 (+45.7%)), Slow frames (+4.88 (+157.4%)), Issues (+1 (+100%))

ℹ️ API calls unavailable: Network logs API error: Bad Request

Full metric table (+10% variance rules)

Disclaimer — allowed variance: a +10% margin over the baseline is permitted.

  • If Current <= Baseline + 10%, treated as acceptable noise.
  • If Current > Baseline + 10%, Current and variance % are highlighted with ⚠️.
Metric Baseline Current Δ
CPU avg 13.86% 6.2% -7.66 (-55.3%)
CPU max 19.43% 20.39% +0.96 (+4.9%)
Memory avg 490.61 MB 693.81 MB +203.2 (+41.4%) ⚠️
Memory max 568.32 MB 828.28 MB +259.96 (+45.7%) ⚠️
Slow frames 3.1% 7.98% +4.88 (+157.4%) ⚠️
Frozen frames 0% 0% 0 (0%)
ANRs 0 0 0 (0%)
Issues 1 2 +1 (+100%) ⚠️
Critical issues 1 1 0 (0%)
App size 328.67 MB 328.29 MB -0.38 (-0.1%)
✅ Passed Tests (5)
Test Platform Device Duration Team Recording
Measure Cold Start To Onboarding Screen Android Google Pixel 8 Pro (v14.0) 3.15s @metamask-mobile-platform 📹 Watch
Onboarding Import SRP with +50 accounts, SRP 3 Android Google Pixel 8 Pro (v14.0) 6.16s @metamask-onboarding-team 📹 Watch
Seedless Onboarding: Apple Login New User Android Google Pixel 8 Pro (v14.0) 0.00s @metamask-onboarding-team 📹 Watch
Seedless Onboarding: Google Login New User Android Google Pixel 8 Pro (v14.0) 2.35s @metamask-onboarding-team 📹 Watch
Seedless Onboarding: Telegram Login New User Android Google Pixel 8 Pro (v14.0) 3.00s @metamask-onboarding-team 📹 Watch

Branch: chore/mmqa-2280-onboarding-pos-burndown · Build: E2E · Commit: 21957ea · View full run

@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-changelog no-changelog Indicates no external facing user changes, therefore no changelog documentation needed risk:high AI analysis: high risk size-XL team-qa QA team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant