diff --git a/app/components/Base/DetailsModal.js b/app/components/Base/DetailsModal.js index a5ca13c1937..da1b0096359 100644 --- a/app/components/Base/DetailsModal.js +++ b/app/components/Base/DetailsModal.js @@ -5,10 +5,7 @@ import Ionicons from 'react-native-vector-icons/Ionicons'; import { fontStyles } from '../../styles/common'; import Text from './Text'; import { useTheme } from '../../util/theme'; -import { - DETAILS_MODAL_TITLE, - DETAILS_MODAL_CLOSE_ICON, -} from '../../../wdio/screen-objects/testIDs/Components/DetailsModal.js'; +import { TransactionDetailsModalSelectorsIDs } from '../../../e2e/selectors/Modals/TransactionDetailsModal.selectors'; const createStyles = (colors) => StyleSheet.create({ @@ -85,7 +82,7 @@ const DetailsModalTitle = ({ style, ...props }) => { return ( @@ -99,7 +96,7 @@ const DetailsModalCloseIcon = ({ style, ...props }) => { @@ -109,7 +106,13 @@ const DetailsModalBody = ({ style, ...props }) => { const { colors } = useTheme(); const styles = createStyles(colors); - return ; + return ( + + ); }; const DetailsModalSection = ({ style, borderBottom, ...props }) => { const { colors } = useTheme(); diff --git a/app/components/Base/StatusText.js b/app/components/Base/StatusText.js index 83f1ffc1966..0de17d43962 100644 --- a/app/components/Base/StatusText.js +++ b/app/components/Base/StatusText.js @@ -5,7 +5,7 @@ import { StyleSheet } from 'react-native'; import { FIAT_ORDER_STATES } from '../../constants/on-ramp'; import { strings } from '../../../locales/i18n'; import { useTheme } from '../../util/theme'; -import { DETAILS_MODAL_TITLE } from '../../../wdio/screen-objects/testIDs/Components/DetailsModal.js'; +import { CommonSelectorsIDs } from '../../../e2e/selectors/Common.selectors'; const styles = StyleSheet.create({ status: { @@ -17,7 +17,7 @@ const styles = StyleSheet.create({ export const ConfirmedText = (props) => ( StyleSheet.create({ buttonView: { @@ -54,7 +52,7 @@ const NetworkAdded = (props: NetworkAddedProps) => { @@ -63,7 +61,7 @@ const NetworkAdded = (props: NetworkAddedProps) => { {strings('networks.switch_network')} diff --git a/app/components/UI/Tabs/index.js b/app/components/UI/Tabs/index.js index 7c337d5cc94..6f002584f8a 100644 --- a/app/components/UI/Tabs/index.js +++ b/app/components/UI/Tabs/index.js @@ -7,7 +7,6 @@ import { ScrollView, TouchableOpacity, StyleSheet, - Platform, } from 'react-native'; import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'; import PropTypes from 'prop-types'; @@ -19,7 +18,6 @@ import { MetaMetricsEvents } from '../../../core/Analytics'; import AnalyticsV2 from '../../../util/analyticsV2'; import { ThemeContext, mockTheme } from '../../../util/theme'; -import generateTestId from '../../../../wdio/utils/generateTestId'; import { MULTI_TAB_ADD_BUTTON, MULTI_TAB_CLOSE_ALL_BUTTON, @@ -231,10 +229,7 @@ export default class Tabs extends PureComponent { return ( - + {strings('browser.no_tabs_title')} {strings('browser.no_tabs_desc')} @@ -287,7 +282,7 @@ export default class Tabs extends PureComponent { - + { } await TestHelpers.delay(3000); - await NetworkApprovalModal.isVisible(); + await Assertions.checkIfVisible(NetworkApprovalModal.container); await NetworkApprovalModal.tapApproveButton(); await TestHelpers.delay(3000); - await NetworkAddedModal.isVisible(); - await NetworkAddedModal.tapSwitchToNetworkButton(); + await Assertions.checkIfVisible(NetworkAddedModal.switchNetwork); + await NetworkAddedModal.tapSwitchToNetwork(); await TestHelpers.delay(3000); await WalletView.isVisible(); diff --git a/e2e/specs/permission-systems/permission-system-delete-wallet.spec.js b/e2e/specs/permission-systems/permission-system-delete-wallet.spec.js index 73129c7a27d..4d48cc81e33 100644 --- a/e2e/specs/permission-systems/permission-system-delete-wallet.spec.js +++ b/e2e/specs/permission-systems/permission-system-delete-wallet.spec.js @@ -48,7 +48,7 @@ describe( await Browser.isVisible(); await Browser.navigateToTestDApp(); await Browser.tapNetworkAvatarButtonOnBrowserWhileAccountIsConnectedToDapp(); - await Assertions.checkIfVisible(ConnectedAccountsModal.container); + await Assertions.checkIfVisible(ConnectedAccountsModal.title); await NetworkListModal.isNotVisible(); await ConnectedAccountsModal.scrollToBottomOfModal(); @@ -61,7 +61,7 @@ describe( // should tap reset wallet button await LoginView.tapResetWalletButton(); - await DeleteWalletModal.isVisible(); + await Assertions.checkIfVisible(DeleteWalletModal.container); //Delete wallet await DeleteWalletModal.tapIUnderstandButton(); @@ -94,7 +94,7 @@ describe( await TabBarComponent.tapBrowser(); await Browser.isVisible(); await Browser.tapNetworkAvatarButtonOnBrowser(); - await Assertions.checkIfNotVisible(ConnectedAccountsModal.container); + await Assertions.checkIfNotVisible(ConnectedAccountsModal.title); await NetworkListModal.isVisible(); }, ); diff --git a/e2e/specs/permission-systems/permission-system-revoke-single-account.spec.js b/e2e/specs/permission-systems/permission-system-revoke-single-account.spec.js index 801c80738e3..ebde3b32c05 100644 --- a/e2e/specs/permission-systems/permission-system-revoke-single-account.spec.js +++ b/e2e/specs/permission-systems/permission-system-revoke-single-account.spec.js @@ -37,7 +37,7 @@ describe(SmokeCore('Revoke Single Account after connecting to a dapp'), () => { await TestHelpers.delay(5500); await Browser.tapNetworkAvatarButtonOnBrowser(); - await Assertions.checkIfNotVisible(ConnectedAccountsModal.container); + await Assertions.checkIfNotVisible(ConnectedAccountsModal.title); await NetworkListModal.isVisible(); }, ); diff --git a/e2e/specs/permission-systems/permission-system-revoking-multiple-accounts.spec.js b/e2e/specs/permission-systems/permission-system-revoking-multiple-accounts.spec.js index ab7089c0e46..70a68ca0eec 100644 --- a/e2e/specs/permission-systems/permission-system-revoking-multiple-accounts.spec.js +++ b/e2e/specs/permission-systems/permission-system-revoking-multiple-accounts.spec.js @@ -48,7 +48,7 @@ describe('Connecting to multiple dapps and revoking permission on one but stayin await Browser.navigateToTestDApp(); await Browser.isAccountToastVisible('Account 1'); await Browser.tapNetworkAvatarButtonOnBrowserWhileAccountIsConnectedToDapp(); - await Assertions.checkIfVisible(ConnectedAccountsModal.container); + await Assertions.checkIfVisible(ConnectedAccountsModal.title); await ConnectedAccountsModal.tapConnectMoreAccountsButton(); await TestHelpers.delay(1000); await AccountListView.tapAddAccountButton(); @@ -64,7 +64,7 @@ describe('Connecting to multiple dapps and revoking permission on one but stayin await ConnectedAccountsModal.tapDisconnectAllButton(); await Browser.isRevokeAllAccountToastVisible(); await Browser.tapNetworkAvatarButtonOnBrowser(); - await Assertions.checkIfNotVisible(ConnectedAccountsModal.container); + await Assertions.checkIfNotVisible(ConnectedAccountsModal.title); await NetworkListModal.isVisible(); await NetworkListModal.swipeToDismissModal(); await NetworkListModal.isNotVisible(); diff --git a/e2e/specs/quarantine/deeplinks.failing.js b/e2e/specs/quarantine/deeplinks.failing.js index 4be04bf956f..29530a3caa2 100644 --- a/e2e/specs/quarantine/deeplinks.failing.js +++ b/e2e/specs/quarantine/deeplinks.failing.js @@ -20,7 +20,7 @@ import Accounts from '../../../wdio/helpers/Accounts'; import TabBarComponent from '../../pages/TabBarComponent'; import Assertions from '../../utils/Assertions'; -const BINANCE_RPC_URL = 'https://bsc-dataseed1.binance.org'; +//const BINANCE_RPC_URL = 'https://bsc-dataseed1.binance.org'; const BINANCE_DEEPLINK_URL = 'https://metamask.app.link/send/0xB8B4EE5B1b693971eB60bDa15211570df2dB228A@56?value=1e14'; @@ -98,30 +98,31 @@ describe(Regression('Deep linking Tests'), () => { await NetworkView.isRpcViewVisible(); await NetworkView.tapPopularNetworkByName('BNB Smart Chain'); - await NetworkApprovalModal.isVisible(); - await NetworkApprovalModal.isDisplayNameVisible('BNB Smart Chain'); - await NetworkApprovalModal.isNetworkURLVisible(BINANCE_RPC_URL); - await NetworkApprovalModal.isChainIDVisible('56'); + await Assertions.checkIfVisible(NetworkApprovalModal.container); + await Assertions.checkIfElementToHaveText( + NetworkApprovalModal.displayName, + 'BNB Smart Chain', + ); await NetworkApprovalModal.tapApproveButton(); - await NetworkAddedModal.isVisible(); + await Assertions.checkIfVisible(NetworkAddedModal.switchNetwork); await NetworkAddedModal.tapCloseButton(); await NetworkView.isRpcViewVisible(); - - //await WalletView.isVisible(); }); it('should add polygon network', async () => { await NetworkView.tapPopularNetworkByName('Polygon Mainnet'); - await NetworkApprovalModal.isVisible(); - await NetworkApprovalModal.isDisplayNameVisible('Polygon Mainnet'); - await NetworkApprovalModal.isChainIDVisible('137'); + await Assertions.checkIfVisible(NetworkApprovalModal.container); + await Assertions.checkIfElementToHaveText( + NetworkApprovalModal.displayName, + 'Polygon Mainnet', + ); await NetworkApprovalModal.tapApproveButton(); await TestHelpers.delay(1000); - await NetworkAddedModal.isVisible(); + await Assertions.checkIfVisible(NetworkAddedModal.switchNetwork); await NetworkAddedModal.tapSwitchToNetwork(); await WalletView.isVisible(); diff --git a/e2e/specs/quarantine/permission-system-removing-imported-account.failing.js b/e2e/specs/quarantine/permission-system-removing-imported-account.failing.js index 94a3df6816d..e7983305e27 100644 --- a/e2e/specs/quarantine/permission-system-removing-imported-account.failing.js +++ b/e2e/specs/quarantine/permission-system-removing-imported-account.failing.js @@ -110,7 +110,7 @@ describe( it('imported account is not visible', async () => { await Browser.tapNetworkAvatarButtonOnBrowserWhileAccountIsConnectedToDapp(); - await Assertions.checkIfNotVisible(ConnectedAccountsModal.container); + await Assertions.checkIfNotVisible(ConnectedAccountsModal.title); await AccountListView.accountNameNotVisible('Account 2'); }); }, diff --git a/e2e/specs/settings/delete-wallet.spec.js b/e2e/specs/settings/delete-wallet.spec.js index ad7d03138e2..b710b846db7 100644 --- a/e2e/specs/settings/delete-wallet.spec.js +++ b/e2e/specs/settings/delete-wallet.spec.js @@ -60,7 +60,7 @@ describe( // should tap reset wallet button await LoginView.tapResetWalletButton(); - await DeleteWalletModal.isVisible(); + await Assertions.checkIfVisible(DeleteWalletModal.container); // should delete wallet await DeleteWalletModal.tapIUnderstandButton(); diff --git a/e2e/specs/swaps/swap-action-regression.spec.js b/e2e/specs/swaps/swap-action-regression.spec.js index ea2ab6fe837..062ff5a7edb 100644 --- a/e2e/specs/swaps/swap-action-regression.spec.js +++ b/e2e/specs/swaps/swap-action-regression.spec.js @@ -18,6 +18,7 @@ import TestHelpers from '../../helpers'; import FixtureServer from '../../fixtures/fixture-server'; import { getFixturesServerPort } from '../../fixtures/utils'; import { Regression } from '../../tags'; +import Assertions from '../../utils/Assertions'; const fixtureServer = new FixtureServer(); @@ -87,8 +88,12 @@ describe(Regression('Multiple Swaps from Actions'), () => { sourceTokenSymbol, destTokenSymbol, ); - await DetailsModal.isTitleVisible(sourceTokenSymbol, destTokenSymbol); - await DetailsModal.isStatusCorrect('Confirmed'); + await Assertions.checkIfVisible(DetailsModal.title); + await Assertions.checkIfElementToHaveText( + DetailsModal.title, + DetailsModal.generateExpectedTitle(sourceTokenSymbol, destTokenSymbol), + ); + await Assertions.checkIfVisible(DetailsModal.statusConfirmed); await DetailsModal.tapOnCloseIcon(); }, ); diff --git a/e2e/specs/swaps/swap-action-smoke.spec.js b/e2e/specs/swaps/swap-action-smoke.spec.js index dda70a9d482..18847e5680f 100644 --- a/e2e/specs/swaps/swap-action-smoke.spec.js +++ b/e2e/specs/swaps/swap-action-smoke.spec.js @@ -18,6 +18,7 @@ import TestHelpers from '../../helpers'; import FixtureServer from '../../fixtures/fixture-server'; import { getFixturesServerPort } from '../../fixtures/utils'; import { SmokeSwaps } from '../../tags'; +import Assertions from '../../utils/Assertions'; const fixtureServer = new FixtureServer(); @@ -87,8 +88,11 @@ describe(SmokeSwaps('Swap from Actions'), () => { sourceTokenSymbol, destTokenSymbol, ); - await DetailsModal.isTitleVisible(sourceTokenSymbol, destTokenSymbol); - await DetailsModal.isStatusCorrect('Confirmed'); + await Assertions.checkIfElementToHaveText( + DetailsModal.title, + DetailsModal.generateExpectedTitle(sourceTokenSymbol, destTokenSymbol), + ); + await Assertions.checkIfVisible(DetailsModal.statusConfirmed); await DetailsModal.tapOnCloseIcon(); }, ); diff --git a/e2e/utils/Matchers.js b/e2e/utils/Matchers.js index 1b44e7dd86b..d7934977eee 100644 --- a/e2e/utils/Matchers.js +++ b/e2e/utils/Matchers.js @@ -46,6 +46,17 @@ class Matchers { return element(by.id(parentElement).withDescendant(by.id(childElement))); } + /** + * Get element with ancestor. + * + * @param {string} childElement - The ID of the child element to locate within the parent element. + * @param {string} parentElement - Matches elements with at least one descendant that matches the specified matcher. + * @return {Promise} - Resolves to the located element + */ + static async getElementIDWithAncestor(childElement, parentElement) { + return element(by.id(childElement).withAncestor(by.id(parentElement))); + } + /** * Get element by web ID. * diff --git a/wdio/screen-objects/testIDs/Components/DetailsModal.js b/wdio/screen-objects/testIDs/Components/DetailsModal.js deleted file mode 100644 index 5633f2df3bb..00000000000 --- a/wdio/screen-objects/testIDs/Components/DetailsModal.js +++ /dev/null @@ -1,3 +0,0 @@ -export const DETAILS_MODAL_TITLE = 'details-modal-title'; -export const DETAILS_MODAL_STATUS_CONFIRMED = 'status-confirmed-text'; -export const DETAILS_MODAL_CLOSE_ICON = 'details-modal-close-icon';