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';