From d5b6c18beec5ba4062adc65df5187a1168083111 Mon Sep 17 00:00:00 2001 From: swati pawar Date: Mon, 23 Feb 2026 15:55:45 +0530 Subject: [PATCH] Added Maestro automation flows for onboarding and singlesig wallet --- flows/Mandatory_Backup.yaml | 206 ++++++++++++++++++++++++++ flows/add_singlesig_wallet.yaml | 221 ++++++++++++++++++++++++++++ flows/create_passcode.yaml | 4 + flows/create_wallet_onboarding.yaml | 124 ++++++++++++++++ flows/launch_success.png | Bin 0 -> 23225 bytes 5 files changed, 555 insertions(+) create mode 100644 flows/Mandatory_Backup.yaml create mode 100644 flows/add_singlesig_wallet.yaml create mode 100644 flows/create_passcode.yaml create mode 100644 flows/create_wallet_onboarding.yaml create mode 100644 flows/launch_success.png diff --git a/flows/Mandatory_Backup.yaml b/flows/Mandatory_Backup.yaml new file mode 100644 index 0000000000..e72dc1a4fa --- /dev/null +++ b/flows/Mandatory_Backup.yaml @@ -0,0 +1,206 @@ +appId: io.hexawallet.keeper.development +--- + +- launchApp + + +################################## +# Enter Passcode (11111111) +################################## + +- assertVisible: + id: "key_1" + +- repeat: + times: 8 + commands: + - tapOn: + id: "key_1" + +- assertVisible: "Create" +- tapOn: "Create" + +################################## +# Remember Passcode Screen +################################## + +- assertVisible: "Remember your passcode" +- tapOn: "Back" + +################################## +# Back to Create Screen +################################## + +- assertVisible: "Create" +- tapOn: "Create" + +################################## +# Continue Screen +################################## + +- assertVisible: "Continue" +- tapOn: "Continue" + +################################## +# Enable Biometric Authentication +################################## + +- assertVisible: "Enable Biometric Authentication" +- tapOn: "Cancel" + +################################## +# Onboarding Screens +################################## + +- assertVisible: "Create wallets" + +- swipe: + start: 80%,50% + end: 10%,50% + +- assertVisible: "Manage keys" + +- swipe: + start: 80%,50% + end: 10%,50% + +- assertVisible: "Plan for Inheritance" + +################################## +# FAQs +################################## + +- tapOn: "See FAQs" +- back + +################################## +# Get Started +################################## + +- assertVisible: "Get Started" +- tapOn: "Get Started" + +################################## +# Welcome Screen +################################## + +- assertVisible: "Welcome to Bitcoin Keeper" +- tapOn: "Start New" + +################################## +# Final Modal +################################## + +- assertVisible: "Next" +- tapOn: "Next" + +################################## +# Home Screen +################################## +- assertVisible: "Set Up Wallet Recovery" + + +- assertVisible: "Backup Recovery Key" + + +#################################################### +# MANDATORY BACKUP FLOW +#################################################### + +- assertVisible: "Backup Recovery Key" +- tapOn: "Backup Recovery Key" + +################################## +# Confirm Passcode (1111) +################################## + +- assertVisible: "Confirm Passcode" + +- repeat: + times: 4 + commands: + - tapOn: + id: "key_1" + +- tapOn: + id: "btn_primaryText" + +################################## +# Cancel First Time +################################## + +- assertVisible: "Cancel" +- tapOn: "Cancel" + +################################## +# Try Switching Tab +################################## + +- tapOn: "Keys" + +################################## +# Mandatory Modal Again +################################## + +- assertVisible: "Set Up Wallet Recovery" +- tapOn: "Backup Recovery Key" + +################################## +# Confirm Passcode Again +################################## + +- repeat: + times: 4 + commands: + - tapOn: + id: "key_1" + +- tapOn: + id: "btn_primaryText" + +################################## +# Backup Now +################################## + +- assertVisible: "Backup Now" +- tapOn: "Backup Now" + +################################## +# Recovery Key Screen +################################## + +- assertVisible: "Recovery Key" + +- tapOn: { id: "text_seed_word_0" } +- tapOn: { id: "text_seed_word_1" } +- tapOn: { id: "text_seed_word_2" } +- tapOn: { id: "text_seed_word_3" } +- tapOn: { id: "text_seed_word_4" } +- tapOn: { id: "text_seed_word_5" } +- tapOn: { id: "text_seed_word_6" } +- tapOn: { id: "text_seed_word_7" } +- tapOn: { id: "text_seed_word_8" } +- tapOn: { id: "text_seed_word_9" } +- tapOn: { id: "text_seed_word_10" } +- tapOn: { id: "text_seed_word_11" } + +- tapOn: "Next" + +################################## +# Confirm Backup +################################## + +- assertVisible: "Confirm Backup" + +- tapOn: "Enter seed word" + +# ⚠ Replace with actual expected seed word +- inputText: "example" + +- tapOn: "Confirm" + +################################## +# Final Verification +################################## + +- assertVisible: "Keys" diff --git a/flows/add_singlesig_wallet.yaml b/flows/add_singlesig_wallet.yaml new file mode 100644 index 0000000000..939e05fece --- /dev/null +++ b/flows/add_singlesig_wallet.yaml @@ -0,0 +1,221 @@ +appId: io.hexawallet.keeper.development +--- +# Add Single Sig Wallet with Seed Key - Complete Flow + +######################################## +# Wallets Screen +######################################## +- assertVisible: + text: Wallets + index: 1 +- tapOn: + text: Wallets + index: 1 + +- assertVisible: + id: "btn_Add Wallet" + +- tapOn: + id: "btn_Add Wallet" + +######################################## +# Pick Wallet Type +######################################## + +- assertVisible: "Pick Your Wallet Type" +- assertVisible: "Bitcoin Wallet" +- tapOn: "Bitcoin Wallet" + +######################################## +# Add New Wallet +######################################## + +- assertVisible: "Add a New Wallet" +- tapOn: "Add a New Wallet" + +######################################## +# Create Wallet +######################################## + +- assertVisible: "Create Wallet" +- tapOn: "Create Wallet" + +######################################## +# Select Wallet Type +######################################## + +- assertVisible: "Select your wallet type" +- assertVisible: "Single-key" +- tapOn: "Single-key" + +- assertVisible: "Proceed" +- tapOn: "Proceed" + +######################################## +# Select Wallet Keys +######################################## + +- assertVisible: "Select your wallet keys" +- assertVisible: "Add a Key" +- tapOn: "Add a Key" + +######################################## +# Add Signer +######################################## + +- assertVisible: "Add a Signer" +- assertVisible: "Add a software key" +- tapOn: "Add a software key" + +######################################## +# Software Keys +######################################## + +- assertVisible: "Software Keys" +- assertVisible: "Seed Key" +- tapOn: "Seed Key" + +######################################## +# Add Seed Key +######################################## + +- assertVisible: "Add a Seed Key" +- assertVisible: "Create" +- tapOn: "Create" + +######################################## +# Create Seed Key +######################################## + +- assertVisible: "Create a Seed Key" +- assertVisible: "Proceed" +- tapOn: "Proceed" + +######################################## +# Reveal 12 Seed Words (Using Points) +######################################## + +- assertVisible: "Seed Key" + +# Row 1 +- tapOn: + point: "20%,35%" +- tapOn: + point: "50%,35%" +- tapOn: + point: "80%,35%" + +# Row 2 +- tapOn: + point: "20%,45%" +- tapOn: + point: "50%,45%" +- tapOn: + point: "80%,45%" + +# Row 3 +- tapOn: + point: "20%,55%" +- tapOn: + point: "50%,55%" +- tapOn: + point: "80%,55%" + +# Row 4 +- tapOn: + point: "20%,65%" +- tapOn: + point: "50%,65%" +- tapOn: + point: "80%,65%" + +- assertVisible: "Next" +- tapOn: "Next" + +######################################## +# Confirm Backup +######################################## + +- assertVisible: "Confirm Backup" +- tapOn: "Enter seed word" + +# 👉 Manually enter the requested seed word here + +- assertVisible: "Confirm" +- tapOn: "Confirm" + +######################################## +# Remember Seed Words Modal +######################################## + +- assertVisible: "Remember Seed Words?" +- assertVisible: "Skip" +- assertVisible: "Save" +- tapOn: "Save" + +######################################## +# Seed Key Added Successfully +######################################## + +- assertVisible: "Seed key Added Successfully!" +- assertVisible: "Cancel" +- assertVisible: "Add Description" + +- tapOn: "Cancel" + +######################################## +# Select Added Seed Key +######################################## + +- assertVisible: "Select your wallet keys" + +- assertVisible: + text: "Seed Key" + index: 0 + +- tapOn: + point: "87%,24%" + +- assertVisible: "Proceed" +- tapOn: "Proceed" + +######################################## +# Confirm Wallet Details +######################################## + +- assertVisible: "Confirm your wallet details" +- assertVisible: "Enter wallet name" + +- tapOn: "Enter wallet name" +- inputText: "My Single Sig Wallet" +- hideKeyboard + +######################################## +# Add Description +######################################## + +- assertVisible: "Add Description" +- tapOn: "Add Description" + +- assertVisible: "Add a description (Optional)" +- tapOn: "Add a description (Optional)" +- inputText: "Primary Bitcoin Wallet" +- hideKeyboard + +- assertVisible: "Save Changes" +- tapOn: "Save Changes" + +######################################## +# Create Wallet +######################################## + +- assertVisible: "Create Your Wallet" +- tapOn: "Create Your Wallet" + +######################################## +# Wallet Created +######################################## + +- assertVisible: "Wallet Created Successfully" +- assertVisible: "View Wallet" +- tapOn: "View Wallet" diff --git a/flows/create_passcode.yaml b/flows/create_passcode.yaml new file mode 100644 index 0000000000..41dc30af1c --- /dev/null +++ b/flows/create_passcode.yaml @@ -0,0 +1,4 @@ +appId: io.hexawallet.keeper.development +--- +[ launchApp, { assertVisible: { id: "key_1" } }, { repeat: { times: 8, commands: [ { tapOn: { id: "key_1" } } ] } }, { assertVisible: "Create" }, { tapOn: "Create" }, { assertVisible: "Remember your passcode" }, { tapOn: "Back" }, { assertVisible: "Remember your passcode" }, { tapOn: "Continue" }, { assertVisible: "Enable Biometric Authentication" }, { tapOn: "Cancel" }, { assertVisible: "Create wallets" }, { swipe: { start: "80%,50%", end: "10%,50%" } }, { assertVisible: "Manage keys" }, { swipe: { start: "80%,50%", end: "10%,50%" } }, { assertVisible: "Plan for Inheritance" }, { tapOn: "See FAQs" }, back, { assertVisible: "Get Started" }, { tapOn: "Get Started" }, { assertVisible: "Welcome to Bitcoin Keeper" }, { tapOn: "Start New" }, { assertVisible: "Next" }, { tapOn: "Next" }, { assertVisible: "Home" } ] + diff --git a/flows/create_wallet_onboarding.yaml b/flows/create_wallet_onboarding.yaml new file mode 100644 index 0000000000..e139fc1fa6 --- /dev/null +++ b/flows/create_wallet_onboarding.yaml @@ -0,0 +1,124 @@ +appId: io.hexawallet.keeper.development +--- + +################################## +# Launch App +################################## + +- launchApp + +################################## +# Enter Passcode (11111111) +################################## + +- assertVisible: + id: "key_1" + +- repeat: + times: 8 + commands: + - tapOn: + id: "key_1" + +# Tap Create (Primary Button) +- assertVisible: + id: "btn_primaryText" + +- tapOn: + id: "btn_primaryText" + +################################## +# Remember Passcode Screen +################################## + +- assertVisible: "Remember your passcode" + +# Tap Back +- tapOn: "Back" + +################################## +# Back To Passcode Screen +################################## + +# Primary button (Create) should be visible again +- assertVisible: + id: "btn_primaryText" + +# Tap Create again +- tapOn: + id: "btn_primaryText" + +################################## +# Continue Screen +################################## + +# Now Continue button appears +- assertVisible: "Continue" + +- tapOn: "Continue" + +################################## +# Enable Biometric Authentication +################################## + +- assertVisible: "Enable Biometric Authentication" + +# Skip biometric +- tapOn: "Cancel" + +################################## +# Onboarding Screens +################################## + +- assertVisible: "Create wallets" + +# Swipe to Manage Keys +- swipe: + start: 80%,50% + end: 10%,50% + +- assertVisible: "Manage keys" + +# Swipe to Plan for Inheritance +- swipe: + start: 80%,50% + end: 10%,50% + +- assertVisible: "Plan for Inheritance" + +################################## +# FAQs +################################## + +- assertVisible: "See FAQs" +- tapOn: "See FAQs" + +- back + +################################## +# Get Started +################################## + +- assertVisible: "Get Started" +- tapOn: "Get Started" + +################################## +# Welcome Screen +################################## + +- assertVisible: "Welcome to Bitcoin Keeper" + +- tapOn: "Start New" + +################################## +# Final Modal +################################## + +- assertVisible: "Next" +- tapOn: "Next" + +################################## +# Home Screen +################################## + +- assertVisible: "Home" diff --git a/flows/launch_success.png b/flows/launch_success.png new file mode 100644 index 0000000000000000000000000000000000000000..fc800e474fb8591529c7809e392286a422d147d1 GIT binary patch literal 23225 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 U)3^Ik+%usxbg$)Hz5U?70J}KVmjD0& literal 0 HcmV?d00001