From 067233a1b618efb96b6a50073f8ec3967e2bf9ac Mon Sep 17 00:00:00 2001 From: CW Date: Wed, 21 Feb 2024 16:07:04 -0800 Subject: [PATCH 01/22] update selectors for onboarding --- e2e/pages/Onboarding/MetaMetricsOptInView.js | 21 ++++++++++--------- .../Onboarding/MetaMetricsOptIn.selectors.js | 13 ++++++++++++ 2 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 e2e/selectors/Onboarding/MetaMetricsOptIn.selectors.js diff --git a/e2e/pages/Onboarding/MetaMetricsOptInView.js b/e2e/pages/Onboarding/MetaMetricsOptInView.js index a964daecdac..e2b8d678af8 100644 --- a/e2e/pages/Onboarding/MetaMetricsOptInView.js +++ b/e2e/pages/Onboarding/MetaMetricsOptInView.js @@ -1,29 +1,30 @@ -import { - OPTIN_METRICS_I_AGREE_BUTTON_ID, - OPTIN_METRICS_NO_THANKS_BUTTON_ID, - OPTIN_METRICS_PRIVACY_POLICY_DESCRIPTION_CONTENT_1_ID, - METAMETRICS_OPT_IN_CONTAINER_ID, -} from '../../../wdio/screen-objects/testIDs/Screens/OptinMetricsScreen.testIds'; +import { MetaMetricsOptInSelectorsIDs } from '../../selectors/Onboarding/MetaMetricsOptIn.selectors'; import Matchers from '../../utils/Matchers'; import Gestures from '../../utils/Gestures'; class MetaMetricsOptIn { get container() { - return Matchers.getElementByID(METAMETRICS_OPT_IN_CONTAINER_ID); + return Matchers.getElementByID( + MetaMetricsOptInSelectorsIDs.METAMETRICS_OPT_IN_CONTAINER_ID, + ); } get optInMetricsContent() { return Matchers.getElementByID( - OPTIN_METRICS_PRIVACY_POLICY_DESCRIPTION_CONTENT_1_ID, + MetaMetricsOptInSelectorsIDs.OPTIN_METRICS_PRIVACY_POLICY_DESCRIPTION_CONTENT_1_ID, ); } get iAgreeButton() { - return Matchers.getElementByID(OPTIN_METRICS_I_AGREE_BUTTON_ID); + return Matchers.getElementByID( + MetaMetricsOptInSelectorsIDs.OPTIN_METRICS_I_AGREE_BUTTON_ID, + ); } get noThanksButton() { - return Matchers.getElementByID(OPTIN_METRICS_NO_THANKS_BUTTON_ID); + return Matchers.getElementByID( + MetaMetricsOptInSelectorsIDs.OPTIN_METRICS_NO_THANKS_BUTTON_ID, + ); } async tapAgreeButton() { diff --git a/e2e/selectors/Onboarding/MetaMetricsOptIn.selectors.js b/e2e/selectors/Onboarding/MetaMetricsOptIn.selectors.js new file mode 100644 index 00000000000..64679ae3bde --- /dev/null +++ b/e2e/selectors/Onboarding/MetaMetricsOptIn.selectors.js @@ -0,0 +1,13 @@ +// eslint-disable-next-line import/prefer-default-export +export const MetaMetricsOptInSelectorsIDs = { + OPTIN_METRICS_TITLE_ID: 'optin-metrics-title-id', + OPTIN_METRICS_NO_THANKS_BUTTON_ID: 'optin-metrics-no-thanks-button-id', + OPTIN_METRICS_I_AGREE_BUTTON_ID: 'optin-metrics-i-agree-button-id', + OPTIN_METRICS_PRIVACY_POLICY_DESCRIPTION_CONTENT_1_ID: + 'optin-metrics-privacy-policy-description', + OPTIN_METRICS_HERE_DEFAULT_NETWORK_ID: 'optin-metrics-default-network-id', + DEFAULT_NETWORK_RPC_URL: 'default-network-rpc-url', + DEFAULT_NETWORK_USE_THIS_NETWORK_BUTTON_ID: + 'default-network-use-this-button-id', + METAMETRICS_OPT_IN_CONTAINER_ID: 'meta-metrics-container', +}; From d01e258fc71edfc917d2e205e944626511942a2b Mon Sep 17 00:00:00 2001 From: CW Date: Sun, 25 Feb 2024 22:28:40 -0800 Subject: [PATCH 02/22] add tests, views and selectors --- .../NetworksSettings/NetworkSettings/index.js | 7 +++ e2e/pages/Onboarding/DefaultNetworkView.js | 42 +++++++++++++++ e2e/pages/Onboarding/MetaMetricsOptInView.js | 9 ++++ .../CustomDefaultNetwork.selectors.js | 7 +++ .../onboarding/add-custom-eth-mainnet.spec.js | 52 +++++++++++++++++++ 5 files changed, 117 insertions(+) create mode 100644 e2e/pages/Onboarding/DefaultNetworkView.js create mode 100644 e2e/selectors/Onboarding/CustomDefaultNetwork.selectors.js create mode 100644 e2e/specs/onboarding/add-custom-eth-mainnet.spec.js diff --git a/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js b/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js index 35d975a66e7..a6687130fb8 100644 --- a/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js +++ b/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js @@ -7,6 +7,7 @@ import { TextInput, SafeAreaView, Linking, + Platform, } from 'react-native'; import { connect } from 'react-redux'; import { @@ -65,6 +66,8 @@ import { import { regex } from '../../../../../../app/util/regex'; import { NetworksViewSelectorsIDs } from '../../../../../../e2e/selectors/Settings/NetworksView.selectors'; import { isSafeChainId, toHex } from '@metamask/controller-utils'; +import { CustomDefaultNetworkIDs } from '../../../../../../e2e/selectors/Onboarding/CustomDefaultNetwork.selectors'; +import generateTestId from '../../../../../../wdio/utils/generateTestId'; const createStyles = (colors) => StyleSheet.create({ @@ -1029,6 +1032,10 @@ class NetworkSettings extends PureComponent { size={ButtonSize.Lg} disabled={isActionDisabled} width={ButtonWidthTypes.Full} + {...generateTestId( + Platform, + CustomDefaultNetworkIDs.USE_THIS_NETWORK_BUTTON_ID, + )} /> ) : ( (addMode || editable) && ( diff --git a/e2e/pages/Onboarding/DefaultNetworkView.js b/e2e/pages/Onboarding/DefaultNetworkView.js new file mode 100644 index 00000000000..8ba63e196fb --- /dev/null +++ b/e2e/pages/Onboarding/DefaultNetworkView.js @@ -0,0 +1,42 @@ +import { NetworksViewSelectorsIDs } from '../../selectors/Settings/NetworksView.selectors'; +import Matchers from '../../utils/Matchers'; +import Gestures from '../../utils/Gestures'; +import NetworksView from '../Settings/NetworksView'; +import TestHelpers from '../../helpers'; +import { + CustomDefaultNetworkIDs, + CustomeDefaultNetworkTexts, +} from '../../selectors/Onboarding/CustomDefaultNetwork.selectors'; + +class DefaultNetworkView { + get useThisNetworkButton() { + return Matchers.getElementByID( + CustomDefaultNetworkIDs.USE_THIS_NETWORK_BUTTON_ID, + ); + } + + get invalidRPCLabel() { + return Matchers.getElementByID(NetworksViewSelectorsIDs.RPC_WARNING_BANNER); + } + + async tapUseThisNetworkButton() { + if (device.getPlatform() === 'ios') { + await Gestures.waitAndTap(this.useThisNetworkButton); + await Gestures.waitAndTap(this.useThisNetworkButton); + } else { + await TestHelpers.waitAndTapByLabel( + CustomeDefaultNetworkTexts.USE_THIS_NETWORK_BUTTON_TEXT, + ); + await TestHelpers.waitAndTapByLabel( + CustomeDefaultNetworkTexts.USE_THIS_NETWORK_BUTTON_TEXT, + ); + } + } + + async typeRpcURL(rpcURL) { + await (await NetworksView.rpcURLInput).clearText(); + await NetworksView.typeInRpcUrl(rpcURL); + } +} + +export default new DefaultNetworkView(); diff --git a/e2e/pages/Onboarding/MetaMetricsOptInView.js b/e2e/pages/Onboarding/MetaMetricsOptInView.js index e2b8d678af8..a2c0ab960a1 100644 --- a/e2e/pages/Onboarding/MetaMetricsOptInView.js +++ b/e2e/pages/Onboarding/MetaMetricsOptInView.js @@ -36,6 +36,15 @@ class MetaMetricsOptIn { await Gestures.swipe(this.optInMetricsContent, 'up', 'fast', 0.9); await Gestures.waitAndTap(this.noThanksButton); } + + async tapEditDefaultNetworkHere() { + await Gestures.swipe(this.optInMetricsContent, 'up', 'fast', 0.9); + if (device.getPlatform() === 'ios') { + await Gestures.tapAtPoint(this.container, { x: 333, y: 534 }); + } else { + await Gestures.tapAtPoint(this.optInMetricsContent, { x: 15, y: 570 }); + } + } } export default new MetaMetricsOptIn(); diff --git a/e2e/selectors/Onboarding/CustomDefaultNetwork.selectors.js b/e2e/selectors/Onboarding/CustomDefaultNetwork.selectors.js new file mode 100644 index 00000000000..6c1d734a4cf --- /dev/null +++ b/e2e/selectors/Onboarding/CustomDefaultNetwork.selectors.js @@ -0,0 +1,7 @@ +export const CustomDefaultNetworkIDs = { + USE_THIS_NETWORK_BUTTON_ID: 'use-this-network', +}; + +export const CustomeDefaultNetworkTexts = { + USE_THIS_NETWORK_BUTTON_TEXT: 'Use this network', +}; diff --git a/e2e/specs/onboarding/add-custom-eth-mainnet.spec.js b/e2e/specs/onboarding/add-custom-eth-mainnet.spec.js new file mode 100644 index 00000000000..588aa2db1bd --- /dev/null +++ b/e2e/specs/onboarding/add-custom-eth-mainnet.spec.js @@ -0,0 +1,52 @@ +import { Regression } from '../../tags'; +import OnboardingCarouselView from '../../pages/Onboarding/OnboardingCarouselView'; +import OnboardingView from '../../pages/Onboarding/OnboardingView'; +import Assertions from '../../utils/Assertions'; +import MetaMetricsOptIn from '../../pages/Onboarding/MetaMetricsOptInView'; +import DefaultNetworkView from '../../pages/Onboarding/DefaultNetworkView'; +import TermsOfUseModal from '../../pages/modals/TermsOfUseModal'; +import CreatePasswordView from '../../pages/Onboarding/CreatePasswordView'; +import EnableAutomaticSecurityChecksView from '../../pages/EnableAutomaticSecurityChecksView'; +import SkipAccountSecurityModal from '../../pages/modals/SkipAccountSecurityModal'; +import WalletView from '../../pages/WalletView'; +import ProtectYourWalletView from '../../pages/Onboarding/ProtectYourWalletView'; + +describe(Regression('Add custom default ETH Mainnet'), () => { + beforeAll(async () => { + await device.launchApp(); + }); + + it('should navigate to edit custome default ETH Mainnet from Opt-In screen', async () => { + await OnboardingCarouselView.tapOnGetStartedButton(); + await OnboardingView.tapCreateWallet(); + await Assertions.checkIfVisible(MetaMetricsOptIn.container); + }); + + it('should not edit default network with invalid RPC', async () => { + await MetaMetricsOptIn.tapEditDefaultNetworkHere(); + await DefaultNetworkView.typeRpcURL('not a valid URL'); + await Assertions.checkIfVisible(DefaultNetworkView.invalidRPCLabel); + }); + + it('should edit default ETH Mainnet with valid RPC', async () => { + await DefaultNetworkView.typeRpcURL('https://eth.llamarpc.com'); + await DefaultNetworkView.tapUseThisNetworkButton(); + await Assertions.checkIfVisible(MetaMetricsOptIn.container); + }); + + it('should show custom default ETH Mainnet as active', async () => { + await MetaMetricsOptIn.tapAgreeButton(); + await TermsOfUseModal.tapScrollEndButton(); + await TermsOfUseModal.tapAgreeCheckBox(); + await TermsOfUseModal.tapAcceptButton(); + await CreatePasswordView.enterPassword('Autop@ss1'); + await CreatePasswordView.reEnterPassword('Autop@ss1'); + await CreatePasswordView.tapIUnderstandCheckBox(); + await CreatePasswordView.tapCreatePasswordButton(); + await ProtectYourWalletView.tapOnRemindMeLaterButton(); + await SkipAccountSecurityModal.tapIUnderstandCheckBox(); + await SkipAccountSecurityModal.tapSkipButton(); + await EnableAutomaticSecurityChecksView.tapNoThanks(); + await WalletView.isNetworkNameVisible('Ethereum Main Custom'); + }); +}); From 2df1f7eeaf668ab4db71ab13dc084ec13125d3e9 Mon Sep 17 00:00:00 2001 From: CW Date: Sun, 25 Feb 2024 22:48:01 -0800 Subject: [PATCH 03/22] Update index.js Fix merge conflicts --- .../Views/Settings/NetworksSettings/NetworkSettings/index.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js b/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js index 098bb22375f..5d3aa1a01d0 100644 --- a/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js +++ b/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js @@ -10,8 +10,6 @@ import { Platform, } from 'react-native'; import { connect } from 'react-redux'; -import { isSafeChainId, toHex } from '@metamask/controller-utils'; - import { fontStyles, colors as staticColors, From 1cc84963697134297fdb61a63db6fae3832aca20 Mon Sep 17 00:00:00 2001 From: CW Date: Sun, 25 Feb 2024 22:59:15 -0800 Subject: [PATCH 04/22] update spelling --- e2e/selectors/Onboarding/CustomDefaultNetwork.selectors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/selectors/Onboarding/CustomDefaultNetwork.selectors.js b/e2e/selectors/Onboarding/CustomDefaultNetwork.selectors.js index 6c1d734a4cf..2709c02cd11 100644 --- a/e2e/selectors/Onboarding/CustomDefaultNetwork.selectors.js +++ b/e2e/selectors/Onboarding/CustomDefaultNetwork.selectors.js @@ -2,6 +2,6 @@ export const CustomDefaultNetworkIDs = { USE_THIS_NETWORK_BUTTON_ID: 'use-this-network', }; -export const CustomeDefaultNetworkTexts = { +export const CustomDefaultNetworkTexts = { USE_THIS_NETWORK_BUTTON_TEXT: 'Use this network', }; From 81b9367d46b609950838748aade11bfe0da659b8 Mon Sep 17 00:00:00 2001 From: CW Date: Sun, 25 Feb 2024 23:26:10 -0800 Subject: [PATCH 05/22] update reference --- e2e/pages/Onboarding/DefaultNetworkView.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/e2e/pages/Onboarding/DefaultNetworkView.js b/e2e/pages/Onboarding/DefaultNetworkView.js index 8ba63e196fb..30472bbe92a 100644 --- a/e2e/pages/Onboarding/DefaultNetworkView.js +++ b/e2e/pages/Onboarding/DefaultNetworkView.js @@ -5,7 +5,7 @@ import NetworksView from '../Settings/NetworksView'; import TestHelpers from '../../helpers'; import { CustomDefaultNetworkIDs, - CustomeDefaultNetworkTexts, + CustomDefaultNetworkTexts, } from '../../selectors/Onboarding/CustomDefaultNetwork.selectors'; class DefaultNetworkView { @@ -25,10 +25,10 @@ class DefaultNetworkView { await Gestures.waitAndTap(this.useThisNetworkButton); } else { await TestHelpers.waitAndTapByLabel( - CustomeDefaultNetworkTexts.USE_THIS_NETWORK_BUTTON_TEXT, + CustomDefaultNetworkTexts.USE_THIS_NETWORK_BUTTON_TEXT, ); await TestHelpers.waitAndTapByLabel( - CustomeDefaultNetworkTexts.USE_THIS_NETWORK_BUTTON_TEXT, + CustomDefaultNetworkTexts.USE_THIS_NETWORK_BUTTON_TEXT, ); } } From 279ed6364c5fbd9dec9fe5318d85d57423115319 Mon Sep 17 00:00:00 2001 From: CW Date: Sun, 25 Feb 2024 23:28:55 -0800 Subject: [PATCH 06/22] update test description spelling --- e2e/specs/onboarding/add-custom-eth-mainnet.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/specs/onboarding/add-custom-eth-mainnet.spec.js b/e2e/specs/onboarding/add-custom-eth-mainnet.spec.js index 588aa2db1bd..6509cd86548 100644 --- a/e2e/specs/onboarding/add-custom-eth-mainnet.spec.js +++ b/e2e/specs/onboarding/add-custom-eth-mainnet.spec.js @@ -16,7 +16,7 @@ describe(Regression('Add custom default ETH Mainnet'), () => { await device.launchApp(); }); - it('should navigate to edit custome default ETH Mainnet from Opt-In screen', async () => { + it('should navigate to edit custom default ETH Mainnet from Opt-In screen', async () => { await OnboardingCarouselView.tapOnGetStartedButton(); await OnboardingView.tapCreateWallet(); await Assertions.checkIfVisible(MetaMetricsOptIn.container); From 9f829e9e3c9db95708428ef9f20d2903293c28f8 Mon Sep 17 00:00:00 2001 From: CW Date: Tue, 27 Feb 2024 20:52:44 -0800 Subject: [PATCH 07/22] use testID --- .../Settings/NetworksSettings/NetworkSettings/index.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js b/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js index 5d3aa1a01d0..21db3698291 100644 --- a/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js +++ b/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js @@ -67,7 +67,6 @@ import { regex } from '../../../../../../app/util/regex'; import { NetworksViewSelectorsIDs } from '../../../../../../e2e/selectors/Settings/NetworksView.selectors'; import { isSafeChainId, toHex } from '@metamask/controller-utils'; import { CustomDefaultNetworkIDs } from '../../../../../../e2e/selectors/Onboarding/CustomDefaultNetwork.selectors'; -import generateTestId from '../../../../../../wdio/utils/generateTestId'; import { updateIncomingTransactions } from '../../../../../util/transaction-controller'; const createStyles = (colors) => @@ -1032,10 +1031,7 @@ class NetworkSettings extends PureComponent { size={ButtonSize.Lg} disabled={isActionDisabled} width={ButtonWidthTypes.Full} - {...generateTestId( - Platform, - CustomDefaultNetworkIDs.USE_THIS_NETWORK_BUTTON_ID, - )} + testID={CustomDefaultNetworkIDs.USE_THIS_NETWORK_BUTTON_ID} /> ) : ( (addMode || editable) && ( From 37355c357436f649c9bfe46f461ecae352ea3527 Mon Sep 17 00:00:00 2001 From: CW Date: Tue, 27 Feb 2024 21:19:31 -0800 Subject: [PATCH 08/22] remove redundant funciton --- e2e/pages/Onboarding/DefaultNetworkView.js | 4 ---- e2e/specs/onboarding/add-custom-eth-mainnet.spec.js | 3 ++- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/e2e/pages/Onboarding/DefaultNetworkView.js b/e2e/pages/Onboarding/DefaultNetworkView.js index 30472bbe92a..0cd4062a67b 100644 --- a/e2e/pages/Onboarding/DefaultNetworkView.js +++ b/e2e/pages/Onboarding/DefaultNetworkView.js @@ -15,10 +15,6 @@ class DefaultNetworkView { ); } - get invalidRPCLabel() { - return Matchers.getElementByID(NetworksViewSelectorsIDs.RPC_WARNING_BANNER); - } - async tapUseThisNetworkButton() { if (device.getPlatform() === 'ios') { await Gestures.waitAndTap(this.useThisNetworkButton); diff --git a/e2e/specs/onboarding/add-custom-eth-mainnet.spec.js b/e2e/specs/onboarding/add-custom-eth-mainnet.spec.js index 6509cd86548..08e376043b5 100644 --- a/e2e/specs/onboarding/add-custom-eth-mainnet.spec.js +++ b/e2e/specs/onboarding/add-custom-eth-mainnet.spec.js @@ -10,6 +10,7 @@ import EnableAutomaticSecurityChecksView from '../../pages/EnableAutomaticSecuri import SkipAccountSecurityModal from '../../pages/modals/SkipAccountSecurityModal'; import WalletView from '../../pages/WalletView'; import ProtectYourWalletView from '../../pages/Onboarding/ProtectYourWalletView'; +import NetworksView from '../../pages/Settings/NetworksView'; describe(Regression('Add custom default ETH Mainnet'), () => { beforeAll(async () => { @@ -25,7 +26,7 @@ describe(Regression('Add custom default ETH Mainnet'), () => { it('should not edit default network with invalid RPC', async () => { await MetaMetricsOptIn.tapEditDefaultNetworkHere(); await DefaultNetworkView.typeRpcURL('not a valid URL'); - await Assertions.checkIfVisible(DefaultNetworkView.invalidRPCLabel); + await Assertions.checkIfVisible(NetworksView.rpcWarningBanner); }); it('should edit default ETH Mainnet with valid RPC', async () => { From 3dd1dc549ef54490ef46a6145c034a7d1bad0452 Mon Sep 17 00:00:00 2001 From: CW Date: Tue, 27 Feb 2024 22:18:10 -0800 Subject: [PATCH 09/22] remove imports --- .../Views/Settings/NetworksSettings/NetworkSettings/index.js | 1 - e2e/pages/Onboarding/DefaultNetworkView.js | 1 - 2 files changed, 2 deletions(-) diff --git a/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js b/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js index 21db3698291..321ccd13acb 100644 --- a/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js +++ b/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js @@ -7,7 +7,6 @@ import { TextInput, SafeAreaView, Linking, - Platform, } from 'react-native'; import { connect } from 'react-redux'; import { diff --git a/e2e/pages/Onboarding/DefaultNetworkView.js b/e2e/pages/Onboarding/DefaultNetworkView.js index 0cd4062a67b..dc4f6652564 100644 --- a/e2e/pages/Onboarding/DefaultNetworkView.js +++ b/e2e/pages/Onboarding/DefaultNetworkView.js @@ -1,4 +1,3 @@ -import { NetworksViewSelectorsIDs } from '../../selectors/Settings/NetworksView.selectors'; import Matchers from '../../utils/Matchers'; import Gestures from '../../utils/Gestures'; import NetworksView from '../Settings/NetworksView'; From 3c59197c527f20f43d2621e73c28201b96f1fda2 Mon Sep 17 00:00:00 2001 From: CW Date: Tue, 27 Feb 2024 23:50:35 -0800 Subject: [PATCH 10/22] use Gestures for waitAndTapByLabel --- e2e/pages/Onboarding/DefaultNetworkView.js | 5 ++--- e2e/utils/Gestures.js | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/e2e/pages/Onboarding/DefaultNetworkView.js b/e2e/pages/Onboarding/DefaultNetworkView.js index dc4f6652564..33719b72b03 100644 --- a/e2e/pages/Onboarding/DefaultNetworkView.js +++ b/e2e/pages/Onboarding/DefaultNetworkView.js @@ -1,7 +1,6 @@ import Matchers from '../../utils/Matchers'; import Gestures from '../../utils/Gestures'; import NetworksView from '../Settings/NetworksView'; -import TestHelpers from '../../helpers'; import { CustomDefaultNetworkIDs, CustomDefaultNetworkTexts, @@ -19,10 +18,10 @@ class DefaultNetworkView { await Gestures.waitAndTap(this.useThisNetworkButton); await Gestures.waitAndTap(this.useThisNetworkButton); } else { - await TestHelpers.waitAndTapByLabel( + await Gestures.waitAndTapByLabel( CustomDefaultNetworkTexts.USE_THIS_NETWORK_BUTTON_TEXT, ); - await TestHelpers.waitAndTapByLabel( + await Gestures.waitAndTapByLabel( CustomDefaultNetworkTexts.USE_THIS_NETWORK_BUTTON_TEXT, ); } diff --git a/e2e/utils/Gestures.js b/e2e/utils/Gestures.js index f636f03535b..e2a52c314ed 100644 --- a/e2e/utils/Gestures.js +++ b/e2e/utils/Gestures.js @@ -53,6 +53,24 @@ class Gestures { await element.atIndex(index).tap(); } + /** + * Waits for an element with a specific label to become visible within a given timeout, then taps on it. + * This function is particularly useful in automated UI testing where you need to interact with elements that may take some time to appear. + * + * @param {string} text The label of the element to wait for and tap. + * @param {number} [timeout=8000] The maximum amount of time (in milliseconds) to wait for the element to become visible. Defaults to 8000ms if not specified. + * @param {number} [index=0] The index of the element to tap if there are multiple elements with the same label. Defaults to 0 (the first element) if not specified. + * @returns {Promise} A promise that resolves when the tap action has been completed. + * @static + * @async + */ + static async waitAndTapByLabel(text, timeout = 8000, index = 0) { + await waitFor(element(by.label(text))) + .toBeVisible() + .withTimeout(timeout); + await element(by.label(text)).atIndex(index).tap(); + } + /** * Wait for an element to be visible and then tap it. * From 27f6689fabe65c9b6df9d09b0ce778c8a34e7294 Mon Sep 17 00:00:00 2001 From: CW Date: Thu, 29 Feb 2024 13:18:56 -0700 Subject: [PATCH 11/22] use updated selectors and testID --- app/components/UI/OptinMetrics/index.js | 28 +++++++++---------------- 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/app/components/UI/OptinMetrics/index.js b/app/components/UI/OptinMetrics/index.js index 666f50c094a..63e6f18bdc2 100644 --- a/app/components/UI/OptinMetrics/index.js +++ b/app/components/UI/OptinMetrics/index.js @@ -8,7 +8,6 @@ import { BackHandler, Alert, InteractionManager, - Platform, } from 'react-native'; import PropTypes from 'prop-types'; import { baseStyles, fontStyles } from '../../../styles/common'; @@ -22,17 +21,9 @@ import { ONBOARDING_WIZARD } from '../../../constants/storage'; import AppConstants from '../../../core/AppConstants'; import { Analytics, MetaMetricsEvents } from '../../../core/Analytics'; import { withMetricsAwareness } from '../../hooks/useMetrics'; - import DefaultPreference from 'react-native-default-preference'; import { ThemeContext } from '../../../util/theme'; -import generateTestId from '../../../../wdio/utils/generateTestId'; -import { - OPTIN_METRICS_I_AGREE_BUTTON_ID, - OPTIN_METRICS_NO_THANKS_BUTTON_ID, - OPTIN_METRICS_TITLE_ID, - METAMETRICS_OPT_IN_CONTAINER_ID, - OPTIN_METRICS_PRIVACY_POLICY_DESCRIPTION_CONTENT_1_ID, -} from '../../../../wdio/screen-objects/testIDs/Screens/OptinMetricsScreen.testIds'; +import { MetaMetricsOptInSelectorsIDs } from '../../../../e2e/selectors/Onboarding/MetaMetricsOptIn.selectors'; import Button, { ButtonVariants, ButtonSize, @@ -415,7 +406,9 @@ class OptinMetrics extends PureComponent {