From 9f3247a06f798d9aeed0929e2f959b293cf10165 Mon Sep 17 00:00:00 2001 From: Stefan Date: Tue, 16 Aug 2022 18:35:10 +0200 Subject: [PATCH] tests(Settings): Can backup seed phrase Use icon for identifying settings buttons to make it more reliable to translation and design changes Added debug helpers found useful in debugging while implementing squish tests Closes: #6902 --- test/ui-test/src/drivers/SquishDriver.py | 24 +++++-- test/ui-test/src/screens/SettingsScreen.py | 63 ++++++++++++++++++- .../src/screens/StatusCommunityScreen.py | 6 +- .../shared/scripts/debug_helpers.py | 15 +++++ .../shared/scripts/sections/settings_names.py | 20 +++++- .../shared/steps/settingsSteps.py | 8 +++ .../tst_settingsMenu/test.feature | 7 ++- .../AppLayouts/Profile/panels/MenuPanel.qml | 4 +- .../Profile/popups/BackupSeedModal.qml | 4 ++ .../popups/backupseed/Acknowledgements.qml | 3 + .../popups/backupseed/BackupSeedStepBase.qml | 1 + .../backupseed/ConfirmSeedPhrasePanel.qml | 2 + .../ConfirmStoringSeedPhrasePanel.qml | 1 + 13 files changed, 142 insertions(+), 16 deletions(-) create mode 100644 test/ui-test/testSuites/suite_status/shared/scripts/debug_helpers.py diff --git a/test/ui-test/src/drivers/SquishDriver.py b/test/ui-test/src/drivers/SquishDriver.py index 83fd3a13158..c331167f910 100755 --- a/test/ui-test/src/drivers/SquishDriver.py +++ b/test/ui-test/src/drivers/SquishDriver.py @@ -7,6 +7,7 @@ # * \date February 2022 # * \brief It contains generic Status view components definitions and Squish driver API. # *****************************************************************************/ +from email import message from enum import Enum import sys @@ -116,12 +117,15 @@ def click_obj_by_name(objName: str): obj = squish.waitForObject(getattr(names, objName)) squish.mouseClick(obj, squish.Qt.LeftButton) -def click_obj_by_wildcards_name(objName: str, wildcardString: str): - wildcardRealName = copy.deepcopy(getattr(names, objName)) - wildcardRealName["objectName"] = Wildcard(wildcardString) +# Replaces all occurrences of objectNamePlaceholder with newValue in the objectName from the realName +# Then use the new objectName as a wildcard search pattern, waiting for the object with the new Real Name +# and return it if found. Raise an exception if not found. +def wait_by_wildcards(realNameVarName: str, objectNamePlaceholder: str, newValue: str, timeoutMSec: int = _MAX_WAIT_OBJ_TIMEOUT): + wildcardRealName = copy.deepcopy(getattr(names, realNameVarName)) + newObjectName = wildcardRealName["objectName"].replace(objectNamePlaceholder, newValue) + wildcardRealName["objectName"] = Wildcard(newObjectName) - obj = squish.waitForObject(wildcardRealName) - squish.mouseClick(obj, squish.Qt.LeftButton) + return squish.waitForObject(wildcardRealName, timeoutMSec) # It executes the right-click action into object with given object name: def right_click_obj_by_name(objName: str): @@ -228,5 +232,13 @@ def _find_link(objName: str, link: str): squish.uninstallSignalHandler(obj, "linkHovered(QString)", "_handle_link_hovered") return [-1, -1] -def expectTrue(assertionValue: bool, message: str): +def expect_true(assertionValue: bool, message: str): return test.verify(assertionValue, message) + +# Fail if the object is found and pass if not found +def verify_not_found(realNameVarName: str, message: str, timeoutMSec: int = 500): + try: + squish.waitForObject(getattr(names, realNameVarName), timeoutMSec) + test.fail(message, f'Unexpected: the object "{realNameVarName}" was found.') + except LookupError as err: + test.passes(message, f'Expected: the object "{realNameVarName}" was not found. Exception: {str(err)}.') diff --git a/test/ui-test/src/screens/SettingsScreen.py b/test/ui-test/src/screens/SettingsScreen.py index b0f0cdd9265..0c0ffd3a817 100644 --- a/test/ui-test/src/screens/SettingsScreen.py +++ b/test/ui-test/src/screens/SettingsScreen.py @@ -10,11 +10,15 @@ from enum import Enum +from faulthandler import disable from drivers.SquishDriver import * from drivers.SquishDriverVerification import * from .StatusMainScreen import MainScreenComponents from .StatusMainScreen import StatusMainScreen +import debug_helpers as debug +import names + class SidebarComponents(Enum): ADVANCED_OPTION: str = "advanced_StatusBaseText" WALLET_ITEM: str = "wallet_AppMenu_StatusNavigationListItem" @@ -38,7 +42,8 @@ class WalletSettingsScreen(Enum): EDIT_ACCOUNT_COLOR_REPEATER: str = "settings_Wallet_AccountView_EditAccountColorRepeater" EDIT_ACCOUNT_SAVE_BUTTON: str = "settings_Wallet_AccountView_EditAccountSaveButton" ACCOUNT_VIEW_ACCOUNT_NAME: str = "settings_Wallet_AccountView_AccountName" - ACCOUNT_VIEW_ICON_SETTINGS: str = "settings_Wallet_AccountView_IconSettings" + ACCOUNT_VIEW_ICON_SETTINGS: str = "settings_Wallet_AccountView_IconSettings" + BACKUP_SEED_PHRASE_BUTTON: str = "settings_Wallet_MainView_BackupSeedPhrase" class ConfirmationDialog(Enum): @@ -48,8 +53,19 @@ class CommunitiesSettingsScreen(Enum): LEAVE_COMMUNITY_BUTTONS: str = "settings_Communities_MainView_LeaveCommunityButtons" LEAVE_COMMUNITY_POPUP_LEAVE_BUTTON: str = "settings_Communities_MainView_LeavePopup_LeaveCommunityButton" - - +class BackupSeedPhrasePopup(Enum): + HAVE_PEN_CHECKBOX: str = "backup_seed_phrase_popup_Acknowledgements_havePen_checkbox" + WRITE_DOWN_CHECKBOX: str = "backup_seed_phrase_popup_Acknowledgements_writeDown_checkbox" + STORE_IT_CHECKBOX: str = "backup_seed_phrase_popup_Acknowledgements_storeIt_checkbox" + NEXT_BUTTON: str = "backup_seed_phrase_popup_nextButton" + REVEAL_SEED_PHRASE_BUTTON: str = "backup_seed_phrase_popup_ConfirmSeedPhrasePanel_RevealSeedPhraseButton" + SEED_PHRASE_WORD_PLACEHOLDER: str = "backup_seed_phrase_popup_ConfirmSeedPhrasePanel_StatusSeedPhraseInput_placeholder" + CONFIRM_FIRST_WORD_PAGE: str = "backup_seed_phrase_popup_BackupSeedStepBase_confirmFirstWord" + CONFIRM_FIRST_WORD_INPUT: str = "backup_seed_phrase_popup_BackupSeedStepBase_confirmFirstWord_inputText" + CONFIRM_SECOND_WORD_PAGE: str = "backup_seed_phrase_popup_BackupSeedStepBase_confirmSecondWord" + CONFIRM_SECOND_WORD_INPUT: str = "backup_seed_phrase_popup_BackupSeedStepBase_confirmSecondWord_inputText" + CONFIRM_YOU_STORED_CHECKBOX: str = "backup_seed_phrase_popup_ConfirmStoringSeedPhrasePanel_storeCheck" + CONFIRM_YOU_STORED_BUTTON: str = "backup_seed_phrase_popup_BackupSeedModal_completeAndDeleteSeedPhraseButton" class SettingsScreen: __pid = 0 @@ -148,3 +164,44 @@ def leave_community(self): # In our case we have only one visible community and only one button click_obj_by_name(CommunitiesSettingsScreen.LEAVE_COMMUNITY_BUTTONS.value) click_obj_by_name(CommunitiesSettingsScreen.LEAVE_COMMUNITY_POPUP_LEAVE_BUTTON.value) + + def check_backup_seed_phrase_workflow(self): + self.open_wallet_settings() + click_obj_by_name(WalletSettingsScreen.BACKUP_SEED_PHRASE_BUTTON.value) + + # Check all checkboxes and click next button + obj = wait_and_get_obj(BackupSeedPhrasePopup.HAVE_PEN_CHECKBOX.value) + obj.checked = True + obj = wait_and_get_obj(BackupSeedPhrasePopup.WRITE_DOWN_CHECKBOX.value) + obj.checked = True + obj = wait_and_get_obj(BackupSeedPhrasePopup.STORE_IT_CHECKBOX.value) + obj.checked = True + click_obj_by_name(BackupSeedPhrasePopup.NEXT_BUTTON.value) + + # Show seed phrase + click_obj_by_name(BackupSeedPhrasePopup.REVEAL_SEED_PHRASE_BUTTON.value) + + # Collect word phrases for the next random confirmation steps + seed_phrase = [wait_by_wildcards(BackupSeedPhrasePopup.SEED_PHRASE_WORD_PLACEHOLDER.value, "%WORD_NO%", str(i + 1)).textEdit.input.edit.text for i in range(12)] + click_obj_by_name(BackupSeedPhrasePopup.NEXT_BUTTON.value) + + # Confirm first random word of the seed phrase + firstSeedBaseObj = wait_and_get_obj(BackupSeedPhrasePopup.CONFIRM_FIRST_WORD_PAGE.value) + firstSeedWord = str(seed_phrase[firstSeedBaseObj.wordRandomNumber]) + wait_for_object_and_type(BackupSeedPhrasePopup.CONFIRM_FIRST_WORD_INPUT.value, firstSeedWord) + click_obj_by_name(BackupSeedPhrasePopup.NEXT_BUTTON.value) + + # Confirm second random word of the seed phrase + secondSeedBaseObj = wait_and_get_obj(BackupSeedPhrasePopup.CONFIRM_SECOND_WORD_PAGE.value) + secondSeedWord = str(seed_phrase[secondSeedBaseObj.wordRandomNumber]) + wait_for_object_and_type(BackupSeedPhrasePopup.CONFIRM_SECOND_WORD_INPUT.value, secondSeedWord) + + click_obj_by_name(BackupSeedPhrasePopup.NEXT_BUTTON.value) + + # Acknowledge and confirm that you won't have access to the seed phrase anymore + obj = wait_and_get_obj(BackupSeedPhrasePopup.CONFIRM_YOU_STORED_CHECKBOX.value) + obj.checked = True + click_obj_by_name(BackupSeedPhrasePopup.CONFIRM_YOU_STORED_BUTTON.value) + + def verify_seed_phrase_indicator_not_visible(self): + verify_not_found(WalletSettingsScreen.BACKUP_SEED_PHRASE_BUTTON.value, "Check that backup seed phrase settings button is visible") \ No newline at end of file diff --git a/test/ui-test/src/screens/StatusCommunityScreen.py b/test/ui-test/src/screens/StatusCommunityScreen.py index c9a785188e1..d2353c335b7 100644 --- a/test/ui-test/src/screens/StatusCommunityScreen.py +++ b/test/ui-test/src/screens/StatusCommunityScreen.py @@ -180,7 +180,7 @@ def edit_community(self, new_community_name: str, new_community_description: str verify_text_matching(CommunitySettingsComponents.COMMUNITY_NAME_TEXT.value, new_community_name) verify_text_matching(CommunitySettingsComponents.COMMUNITY_DESCRIPTION_TEXT.value, new_community_description) obj = get_obj(CommunitySettingsComponents.COMMUNITY_LETTER_IDENTICON.value) - expectTrue(obj.color.name == new_community_color, "Community color was not changed correctly") + expect_true(obj.color.name == new_community_color, "Community color was not changed correctly") def go_back_to_community(self): click_obj_by_name(CommunitySettingsComponents.BACK_TO_COMMUNITY_BUTTON.value) @@ -205,10 +205,10 @@ def search_and_change_community_channel_emoji(self, emoji_description: str): # Search emoji wait_for_object_and_type(CreateOrEditCommunityChannelPopup.EMOJI_SEARCH_TEXT_INPUT.value, emoji_description) # Click on the first found emoji button - click_obj_by_wildcards_name(CreateOrEditCommunityChannelPopup.EMOJI_POPUP_EMOJI_PLACEHOLDER.value, "statusEmoji_*") + click_obj(wait_by_wildcards(CreateOrEditCommunityChannelPopup.EMOJI_POPUP_EMOJI_PLACEHOLDER.value, "%NAME%", "*")) # save changes click_obj_by_name(CreateOrEditCommunityChannelPopup.COMMUNITY_CHANNEL_SAVE_OR_CREATE_BUTTON.value) def check_community_channel_emoji(self, emojiStr: str): obj = wait_and_get_obj(CommunityScreenComponents.CHAT_IDENTIFIER_CHANNEL_ICON.value) - expectTrue(str(obj.icon.emoji).find(emojiStr) >= 0, "Same emoji check") \ No newline at end of file + expect_true(str(obj.icon.emoji).find(emojiStr) >= 0, "Same emoji check") \ No newline at end of file diff --git a/test/ui-test/testSuites/suite_status/shared/scripts/debug_helpers.py b/test/ui-test/testSuites/suite_status/shared/scripts/debug_helpers.py new file mode 100644 index 00000000000..30bd600dd05 --- /dev/null +++ b/test/ui-test/testSuites/suite_status/shared/scripts/debug_helpers.py @@ -0,0 +1,15 @@ +# encoding: UTF-8 + +import squish +import object +import names +import test + +def debugWaitForObject(objRealName: dict, timeoutMSec: int = 1000): + return squish.waitForObject(objRealName, timeoutMSec) + +def type_text(obj, text: str): + squish.type(obj, text) + +def find_object(objRealName: dict): + obj = squish.findObject(objRealName) \ No newline at end of file diff --git a/test/ui-test/testSuites/suite_status/shared/scripts/sections/settings_names.py b/test/ui-test/testSuites/suite_status/shared/scripts/sections/settings_names.py index 3fddabd8b5a..26f2eea5448 100644 --- a/test/ui-test/testSuites/suite_status/shared/scripts/sections/settings_names.py +++ b/test/ui-test/testSuites/suite_status/shared/scripts/sections/settings_names.py @@ -22,6 +22,8 @@ settings_Wallet_AccountView_EditAccountColorRepeater = {"container": statusDesktop_mainWindow, "type": "Repeater", "objectName": "statusColorRepeater", "visible": True} settings_Wallet_AccountView_AccountName = {"container": statusDesktop_mainWindow, "type": "StatusBaseText", "objectName": "walletAccountViewAccountName"} settings_Wallet_AccountView_IconSettings = {"container": statusDesktop_mainWindow, "type": "StatusSmartIdenticon", "objectName": "walletAccountViewAccountImage" , "visible": True} +settings_Wallet_MainView_BackupSeedPhrase = {"container": mainWindow_ScrollView, "objectName": "seed-phrase-MainMenu", "type": "StatusNavigationListItem", "visible": True} +settings_Wallet_MainView_BackupSeedPhraseNotVisible = {"container": mainWindow_ScrollView, "objectName": "seed-phrase-MainMenu", "type": "StatusNavigationListItem", "visible": False} generatedAccounts_ListView = {"container": statusDesktop_mainWindow, "objectName": "generatedAccounts", "type": "ListView"} @@ -34,5 +36,19 @@ i_understand_StatusBaseText = {"container": statusDesktop_mainWindow_overlay, "text": "I understand", "type": "StatusBaseText", "unnamed": 1, "visible": True} # Extra Settings: -sign_out_Quit_ExtraMenu_StatusNavigationListItem = {"container": mainWindow_ScrollView, "objectName": "Sign out & Quit-ExtraMenu", "type": "StatusNavigationListItem", "visible": True} -signOutConfirmation_StatusButton = {"container": statusDesktop_mainWindow_overlay, "objectName": "signOutConfirmation", "type": "StatusButton", "visible": True} \ No newline at end of file +sign_out_Quit_ExtraMenu_StatusNavigationListItem = {"container": mainWindow_ScrollView, "objectName": "logout-ExtraMenu", "type": "StatusNavigationListItem", "visible": True} +signOutConfirmation_StatusButton = {"container": statusDesktop_mainWindow_overlay, "objectName": "signOutConfirmation", "type": "StatusButton", "visible": True} + +# Backup seed phrase: +backup_seed_phrase_popup_Acknowledgements_havePen_checkbox = {"container": statusDesktop_mainWindow_overlay, "objectName": "Acknowledgements_havePen", "type": "StatusCheckBox", "checkable": True, "visible": True} +backup_seed_phrase_popup_Acknowledgements_writeDown_checkbox = {"container": statusDesktop_mainWindow_overlay, "objectName": "Acknowledgements_writeDown", "type": "StatusCheckBox", "checkable": True, "visible": True} +backup_seed_phrase_popup_Acknowledgements_storeIt_checkbox = {"container": statusDesktop_mainWindow_overlay, "objectName": "Acknowledgements_storeIt", "type": "StatusCheckBox", "checkable": True, "visible": True} +backup_seed_phrase_popup_nextButton = {"container": statusDesktop_mainWindow_overlay, "objectName": "BackupSeedModal_nextButton", "type": "StatusButton", "visible": True, "enabled": True} +backup_seed_phrase_popup_ConfirmSeedPhrasePanel_RevealSeedPhraseButton = {"container": statusDesktop_mainWindow_overlay, "objectName": "ConfirmSeedPhrasePanel_RevealSeedPhraseButton", "type": "StatusButton", "visible": True} +backup_seed_phrase_popup_ConfirmSeedPhrasePanel_StatusSeedPhraseInput_placeholder = {"container": statusDesktop_mainWindow_overlay, "objectName": "ConfirmSeedPhrasePanel_StatusSeedPhraseInput_%WORD_NO%", "type": "StatusSeedPhraseInput", "visible": True} +backup_seed_phrase_popup_BackupSeedStepBase_confirmFirstWord = {"container": statusDesktop_mainWindow_overlay, "objectName": "BackupSeedModal_BackupSeedStepBase_confirmFirstWord", "type": "BackupSeedStepBase", "visible": True} +backup_seed_phrase_popup_BackupSeedStepBase_confirmFirstWord_inputText = {"container": backup_seed_phrase_popup_BackupSeedStepBase_confirmFirstWord, "objectName": "BackupSeedStepBase_inputText", "type": "TextEdit", "visible": True} +backup_seed_phrase_popup_BackupSeedStepBase_confirmSecondWord = {"container": statusDesktop_mainWindow_overlay, "objectName": "BackupSeedModal_BackupSeedStepBase_confirmSecondWord", "type": "BackupSeedStepBase", "visible": True} +backup_seed_phrase_popup_BackupSeedStepBase_confirmSecondWord_inputText = {"container": backup_seed_phrase_popup_BackupSeedStepBase_confirmSecondWord, "objectName": "BackupSeedStepBase_inputText", "type": "TextEdit", "visible": True} +backup_seed_phrase_popup_ConfirmStoringSeedPhrasePanel_storeCheck = {"container": statusDesktop_mainWindow_overlay, "objectName": "ConfirmStoringSeedPhrasePanel_storeCheck", "type": "StatusCheckBox", "checkable": True, "visible": True} +backup_seed_phrase_popup_BackupSeedModal_completeAndDeleteSeedPhraseButton = {"container": statusDesktop_mainWindow_overlay, "objectName": "BackupSeedModal_completeAndDeleteSeedPhraseButton", "type": "StatusButton", "visible": True} \ No newline at end of file diff --git a/test/ui-test/testSuites/suite_status/shared/steps/settingsSteps.py b/test/ui-test/testSuites/suite_status/shared/steps/settingsSteps.py index ed72b72aeef..205956f4938 100644 --- a/test/ui-test/testSuites/suite_status/shared/steps/settingsSteps.py +++ b/test/ui-test/testSuites/suite_status/shared/steps/settingsSteps.py @@ -69,3 +69,11 @@ def step(context: any): @When("the user leaves the community") def step(context: any): _settingsScreen.leave_community() + +@When("the user backs up the wallet seed phrase") +def step(context): + _settingsScreen.check_backup_seed_phrase_workflow() + +@Then("the backup seed phrase indicator is not displayed") +def step(context): + _settingsScreen.verify_seed_phrase_indicator_not_visible() \ No newline at end of file diff --git a/test/ui-test/testSuites/suite_status/tst_settingsMenu/test.feature b/test/ui-test/testSuites/suite_status/tst_settingsMenu/test.feature index 97124e4bb92..caf32bd17f8 100644 --- a/test/ui-test/testSuites/suite_status/tst_settingsMenu/test.feature +++ b/test/ui-test/testSuites/suite_status/tst_settingsMenu/test.feature @@ -11,4 +11,9 @@ Feature: Status Desktop Settings Menu Scenario: The user quits the app When the user clicks on Sign out and Quit - Then the app is closed \ No newline at end of file + Then the app is closed + + Scenario: User can backup seed phrase + When the user activates wallet and opens the wallet settings + And the user backs up the wallet seed phrase + Then the backup seed phrase indicator is not displayed \ No newline at end of file diff --git a/ui/app/AppLayouts/Profile/panels/MenuPanel.qml b/ui/app/AppLayouts/Profile/panels/MenuPanel.qml index a4d6ae6ce4c..c02fa591dc6 100644 --- a/ui/app/AppLayouts/Profile/panels/MenuPanel.qml +++ b/ui/app/AppLayouts/Profile/panels/MenuPanel.qml @@ -25,6 +25,7 @@ Column { Repeater { id: mainMenuItems delegate: StatusNavigationListItem { + objectName: model.icon + "-MainMenu" itemId: model.subsection title: model.text icon.name: model.icon @@ -100,7 +101,8 @@ Column { Repeater { id: extraMenuItems delegate: StatusNavigationListItem { - objectName: model.text + "-ExtraMenu" + objectName: model.icon + "-ExtraMenu" + onVisibleChanged: console.debug("@dd obj name", objectName) itemId: model.subsection title: model.text icon.name: model.icon diff --git a/ui/app/AppLayouts/Profile/popups/BackupSeedModal.qml b/ui/app/AppLayouts/Profile/popups/BackupSeedModal.qml index 5d0864730e8..3ee28560412 100644 --- a/ui/app/AppLayouts/Profile/popups/BackupSeedModal.qml +++ b/ui/app/AppLayouts/Profile/popups/BackupSeedModal.qml @@ -56,6 +56,7 @@ StatusStackModal { rightButtons: [ d.skipButton, nextButton, finishButton ] nextButton: StatusButton { + objectName: "BackupSeedModal_nextButton" enabled: { switch (root.currentIndex) { case 0: @@ -87,6 +88,7 @@ StatusStackModal { finishButton: StatusButton { text: qsTr("Complete & Delete My Seed Phrase") + objectName: "BackupSeedModal_completeAndDeleteSeedPhraseButton" enabled: d.seedStored onClicked: { root.privacyStore.removeMnemonic(); @@ -112,12 +114,14 @@ StatusStackModal { }, BackupSeedStepBase { id: confirmFirstWord + objectName: "BackupSeedModal_BackupSeedStepBase_confirmFirstWord" titleText: qsTr("Confirm word #%1 of your seed phrase").arg(d.firstRandomNo + 1) wordRandomNumber: d.firstRandomNo wordAtRandomNumber: root.privacyStore.getMnemonicWordAtIndex(d.firstRandomNo) }, BackupSeedStepBase { id: confirmSecondWord + objectName: "BackupSeedModal_BackupSeedStepBase_confirmSecondWord" titleText: qsTr("Confirm word #%1 of your seed phrase").arg(d.secondRandomNo + 1) wordRandomNumber: d.secondRandomNo wordAtRandomNumber: root.privacyStore.getMnemonicWordAtIndex(d.secondRandomNo) diff --git a/ui/app/AppLayouts/Profile/popups/backupseed/Acknowledgements.qml b/ui/app/AppLayouts/Profile/popups/backupseed/Acknowledgements.qml index 6b70b97c513..4a86f5e7c7f 100644 --- a/ui/app/AppLayouts/Profile/popups/backupseed/Acknowledgements.qml +++ b/ui/app/AppLayouts/Profile/popups/backupseed/Acknowledgements.qml @@ -80,6 +80,7 @@ ColumnLayout { StatusCheckBox { id: havePen + objectName: "Acknowledgements_havePen" spacing: Style.current.padding text: qsTr("I have a pen and paper") font.pixelSize: Style.current.primaryTextFontSize @@ -88,6 +89,7 @@ ColumnLayout { StatusCheckBox { id: writeDown + objectName: "Acknowledgements_writeDown" spacing: Style.current.padding text: qsTr("I am ready to write down my seed phrase") font.pixelSize: Style.current.primaryTextFontSize @@ -96,6 +98,7 @@ ColumnLayout { StatusCheckBox { id: storeIt + objectName: "Acknowledgements_storeIt" spacing: Style.current.padding text: qsTr("I know where I’ll store it") font.pixelSize: Style.current.primaryTextFontSize diff --git a/ui/app/AppLayouts/Profile/popups/backupseed/BackupSeedStepBase.qml b/ui/app/AppLayouts/Profile/popups/backupseed/BackupSeedStepBase.qml index e6e09432f57..4bae440c5e2 100644 --- a/ui/app/AppLayouts/Profile/popups/backupseed/BackupSeedStepBase.qml +++ b/ui/app/AppLayouts/Profile/popups/backupseed/BackupSeedStepBase.qml @@ -37,6 +37,7 @@ StatusScrollView { StatusInput { id: inputText + input.edit.objectName: "BackupSeedStepBase_inputText" visible: (wordRandomNumber > -1) implicitWidth: 448 validationMode: StatusInput.ValidationMode.Always diff --git a/ui/app/AppLayouts/Profile/popups/backupseed/ConfirmSeedPhrasePanel.qml b/ui/app/AppLayouts/Profile/popups/backupseed/ConfirmSeedPhrasePanel.qml index 995079a74a0..4273c64b72c 100644 --- a/ui/app/AppLayouts/Profile/popups/backupseed/ConfirmSeedPhrasePanel.qml +++ b/ui/app/AppLayouts/Profile/popups/backupseed/ConfirmSeedPhrasePanel.qml @@ -37,6 +37,7 @@ BackupSeedStepBase { readonly property int spacing: 4 delegate: StatusSeedPhraseInput { id: seedWordInput + objectName: "ConfirmSeedPhrasePanel_StatusSeedPhraseInput_" + grid.wordIndex[index] width: (grid.cellWidth - grid.spacing) height: (grid.cellHeight - grid.spacing) textEdit.input.edit.enabled: false @@ -61,6 +62,7 @@ BackupSeedStepBase { } StatusButton { + objectName: "ConfirmSeedPhrasePanel_RevealSeedPhraseButton" anchors.centerIn: parent visible: hideSeed icon.name: "view" diff --git a/ui/app/AppLayouts/Profile/popups/backupseed/ConfirmStoringSeedPhrasePanel.qml b/ui/app/AppLayouts/Profile/popups/backupseed/ConfirmStoringSeedPhrasePanel.qml index aff5b4dcd10..530c9759b42 100644 --- a/ui/app/AppLayouts/Profile/popups/backupseed/ConfirmStoringSeedPhrasePanel.qml +++ b/ui/app/AppLayouts/Profile/popups/backupseed/ConfirmStoringSeedPhrasePanel.qml @@ -53,6 +53,7 @@ BackupSeedStepBase { StatusCheckBox { id: storeCheck + objectName: "ConfirmStoringSeedPhrasePanel_storeCheck" spacing: Style.current.padding font.pixelSize: Style.current.primaryTextFontSize text: qsTr("I acknowledge that Status will not be able to show me my seed phrase again.")