diff --git a/test/helpers/actions.ts b/test/helpers/actions.ts index c754058..344fa77 100644 --- a/test/helpers/actions.ts +++ b/test/helpers/actions.ts @@ -647,11 +647,10 @@ export async function receiveOnchainFunds( const address = await getReceiveAddress(); await swipeFullScreen('down'); await rpc.sendToAddress(address, btc); - await mineBlocks(rpc, blocksToMine); - // https://github.com/synonymdev/bitkit-android/issues/268 - // send - onchain - receiver sees no confetti — missing-in-ldk-node missing onchain payment event - // await elementById('ReceivedTransaction').waitForDisplayed(); + await acknowledgeReceivedPayment(); + + await mineBlocks(rpc, blocksToMine); if (driver.isAndroid) { await dismissBackupTimedSheet(); @@ -671,6 +670,41 @@ export async function receiveOnchainFunds( } } +export type ToastId = + | 'BalanceUnitSwitchedToast' + | 'BalanceHiddenToast' + | 'RgsUpdatedToast' + | 'RgsErrorToast' + | 'ElectrumErrorToast' + | 'ElectrumUpdatedToast' + | 'PaymentFailedToast' + | 'ReceivedTransactionReplacedToast' + | 'TransactionReplacedToast' + | 'TransactionUnconfirmedToast' + | 'TransactionRemovedToast'; + +export async function waitForToast( + toastId: ToastId, + { waitToDisappear = false, dismiss = true } = {} +) { + await elementById(toastId).waitForDisplayed(); + if (waitToDisappear) { + await elementById(toastId).waitForDisplayed({ reverse: true }); + return; + } + if (dismiss) { + await dragOnElement(toastId, 'up', 0.2); + } +} + +/** Acknowledges the received payment notification by tapping the button. + */ +export async function acknowledgeReceivedPayment() { + await elementById('ReceivedTransaction').waitForDisplayed(); + await tap('ReceivedTransactionButton'); + await sleep(300); +} + /** * Triggers the timed backup sheet by navigating to settings and back. * Since timed sheets are sometimes triggered by user behavior (when user goes back to home screen), @@ -681,12 +715,25 @@ export async function receiveOnchainFunds( * await doTriggerTimedSheet(); */ export async function doTriggerTimedSheet() { + await sleep(700); // wait for any previous animations to finish await tap('HeaderMenu'); await tap('DrawerSettings'); await sleep(500); // wait for the app to settle await doNavigationClose(); } +export async function dismissBackgroundPaymentsTimedSheet({ + triggerTimedSheet = false, +}: { triggerTimedSheet?: boolean } = {}) { + if (triggerTimedSheet) { + await doTriggerTimedSheet(); + } + await elementById('BackgroundPaymentsDescription').waitForDisplayed(); + await sleep(500); // wait for the app to settle + await tap('BackgroundPaymentsCancel'); + await sleep(500); +} + /** * Dismisses the backup reminder sheet. * This sheet is triggered by first onchain balance change. @@ -710,7 +757,7 @@ export async function dismissBackupTimedSheet({ } await elementById('BackupIntroViewDescription').waitForDisplayed(); await sleep(500); // wait for the app to settle - await tap('BackupIntroViewCancel'); + await swipeFullScreen('down'); await sleep(500); } @@ -732,14 +779,22 @@ export async function dismissBackupTimedSheet({ export async function dismissQuickPayIntro({ triggerTimedSheet = false, }: { triggerTimedSheet?: boolean } = {}) { - if (driver.isIOS) return; // Not supported on iOS yet if (triggerTimedSheet) { await doTriggerTimedSheet(); } - await elementById('QuickpayIntro-button').waitForDisplayed(); - await sleep(500); // wait for the app to settle - await swipeFullScreen('down'); - await sleep(500); + + if (driver.isAndroid) { + // TODO: it's temp, change on Android to match iOS testID + await elementById('QuickpayIntro-button').waitForDisplayed(); + await sleep(500); // wait for the app to settle + await swipeFullScreen('down'); + await sleep(500); + } else { + await elementById('QuickpayIntroDescription').waitForDisplayed(); + await sleep(500); // wait for the app to settle + await tap('QuickpayIntroCancel'); + await sleep(500); + } } /** diff --git a/test/helpers/lnd.ts b/test/helpers/lnd.ts index d8242c2..fb8056b 100644 --- a/test/helpers/lnd.ts +++ b/test/helpers/lnd.ts @@ -103,6 +103,7 @@ export async function getLDKNodeID(): Promise { await elementById('LDKNodeID').waitForDisplayed({ timeout: 60_000 }); const ldkNodeId = (await elementById('LDKNodeID').getText()).trim(); console.info({ ldkNodeId }); + await sleep(500); await tap('NavigationBack'); return ldkNodeId; } diff --git a/test/helpers/setup.ts b/test/helpers/setup.ts index bfcbfd8..a66dca9 100644 --- a/test/helpers/setup.ts +++ b/test/helpers/setup.ts @@ -1,32 +1,13 @@ import { execSync } from 'node:child_process'; -import { elementsById, sleep, tap } from './actions'; +import { sleep } from './actions'; import { getAppId, getAppPath } from './constants'; -export async function launchFreshApp({ tryHandleAlert = true } = {}) { +export async function launchFreshApp() { const appId = getAppId(); await driver.terminateApp(appId); await driver.activateApp(appId); - // workaround to get rid of "Bitkit is running in background" alert - if (tryHandleAlert) { - await sleep(1000); - try { - await tapBalanceToReset(); - } catch { - await tapBalanceToReset(); - } - } - await sleep(500); -} - -async function tapBalanceToReset() { - await tap('TotalBalance'); - const moneyFiatSymbols = await elementsById('MoneyFiatSymbol'); - moneyFiatSymbols[0].waitForDisplayed(); - moneyFiatSymbols[1].waitForDisplayed(); - if ((await moneyFiatSymbols[1].getText()) !== '₿') { - await tap('TotalBalance'); - } + await sleep(3000); } /** diff --git a/test/specs/boost.e2e.ts b/test/specs/boost.e2e.ts index 2708399..c5bb101 100644 --- a/test/specs/boost.e2e.ts +++ b/test/specs/boost.e2e.ts @@ -15,7 +15,6 @@ import { elementByIdWithin, getTextUnder, mineBlocks, - attemptRefreshOnHomeScreen, doNavigationClose, getSeed, waitForBackup, @@ -80,25 +79,16 @@ describe('@boost - Boost', () => { // check Activity await elementById('BoostingIcon').waitForDisplayed(); await elementById('ActivityShort-0').waitForDisplayed(); - - // no additional boost tx item on iOS, there is one on Android - // https://github.com/synonymdev/bitkit-android/issues/463 - const showsBoostTxItem = driver.isAndroid; - if (showsBoostTxItem) { - await expect(elementById('ActivityShort-1')).toBeDisplayed(); - await expect(elementById('ActivityShort-2')).not.toBeDisplayed(); - } else { - await expect(elementById('ActivityShort-1')).not.toBeDisplayed(); - await expect(elementById('ActivityShort-2')).not.toBeDisplayed(); - } + await elementById('ActivityShort-1').waitForDisplayed(); + await expect(elementById('ActivityShort-2')).not.toBeDisplayed(); + await expectTextWithin('ActivityShort-0', '-'); + await expectTextWithin('ActivityShort-0', 'Boost Fee'); + await expectTextWithin('ActivityShort-1', '100 000'); + await expectTextWithin('ActivityShort-1', '+'); // orig tx still there await swipeFullScreen('up'); - if (showsBoostTxItem) { - await tap('ActivityShort-1'); - } else { - await tap('ActivityShort-0'); - } + await tap('ActivityShort-1'); await expectText('100 000', { strategy: 'contains' }); await elementById('BoostedButton').waitForDisplayed(); await elementById('StatusBoosting').waitForDisplayed(); @@ -111,17 +101,14 @@ describe('@boost - Boost', () => { console.info({ parentTxId }); await doNavigationClose(); - if (showsBoostTxItem) { - // new tx - await tap('ActivityShort-0'); - await tap('ActivityTxDetails'); - const boostTxId = await getTextUnder('TXID'); - console.info({ newTxId: boostTxId }); - await expect(origTxId !== boostTxId).toBe(true); - // TODO: not implemented yet - // await expect(boostTxId === parentTxId).toBe(true); - await doNavigationClose(); - } + // new tx: Boost Fee + await tap('ActivityShort-0'); + await tap('ActivityTxDetails'); + const boostTxId = await getTextUnder('TXID'); + console.info({ newTxId: boostTxId }); + await expect(origTxId !== boostTxId).toBe(true); + await expect(boostTxId === parentTxId).toBe(true); + await doNavigationClose(); // wipe & restore const seed = await getSeed(); @@ -131,39 +118,25 @@ describe('@boost - Boost', () => { // check activity after restore await swipeFullScreen('up'); await elementById('BoostingIcon').waitForDisplayed(); - if (showsBoostTxItem) { - await elementById('ActivityShort-1').waitForDisplayed(); - await tap('ActivityShort-1'); - } else { - await elementById('ActivityShort-0').waitForDisplayed(); - await tap('ActivityShort-0'); - } + await elementById('ActivityShort-1').waitForDisplayed(); + await tap('ActivityShort-1'); await elementById('BoostedButton').waitForDisplayed(); await elementById('StatusBoosting').waitForDisplayed(); // mine new block await mineBlocks(rpc, 1); - - // check activity item after mine - // TEMP: refresh until proper events available await doNavigationClose(); await sleep(500); - await swipeFullScreen('down'); - await attemptRefreshOnHomeScreen(); - await swipeFullScreen('up'); + + // check activity item after mine await elementById('ActivityShort-0').waitForDisplayed(); - if (showsBoostTxItem) { - await elementById('ActivityShort-1').waitForDisplayed(); - } - // TEMP: refresh until proper events available + await elementById('ActivityShort-1').waitForDisplayed(); await tap('ActivityShort-0'); await elementById('StatusConfirmed').waitForDisplayed(); await doNavigationClose(); - if (showsBoostTxItem) { - await tap('ActivityShort-1'); - await elementById('StatusConfirmed').waitForDisplayed(); - } + await tap('ActivityShort-1'); + await elementById('StatusConfirmed').waitForDisplayed(); }); ciIt('@boost_2 - Can do RBF', async () => { @@ -233,11 +206,10 @@ describe('@boost - Boost', () => { await elementById('BoostingIcon').waitForDisplayed(); await elementById('ActivityShort-0').waitForDisplayed(); await elementById('ActivityShort-1').waitForDisplayed(); - await elementById('ActivityShort-2').waitForDisplayed(); + await expect(elementById('ActivityShort-2')).not.toBeDisplayed(); await expectTextWithin('ActivityShort-0', '-'); - await expectTextWithin('ActivityShort-1', '-'); - await expectTextWithin('ActivityShort-2', '100 000'); - await expectTextWithin('ActivityShort-2', '+'); + await expectTextWithin('ActivityShort-1', '100 000'); + await expectTextWithin('ActivityShort-1', '+'); // new tx await tap('ActivityShort-0'); @@ -262,32 +234,20 @@ describe('@boost - Boost', () => { // check activity after restore await swipeFullScreen('up'); (await elementByIdWithin('ActivityShort-0', 'BoostingIcon')).waitForDisplayed(); - (await elementByIdWithin('ActivityShort-1', 'BoostingIcon')).waitForDisplayed(); await tap('ActivityShort-0'); await elementById('BoostedButton').waitForDisplayed(); await elementById('StatusBoosting').waitForDisplayed(); await doNavigationClose(); - await tap('ActivityShort-1'); - await elementById('BoostedButton').waitForDisplayed(); - await elementById('StatusRemoved').waitForDisplayed(); // mine new block await mineBlocks(rpc, 1); - - // check activity item after mine - // TEMP: refresh until proper events available await doNavigationClose(); await sleep(500); - await swipeFullScreen('down'); - await attemptRefreshOnHomeScreen(); - await swipeFullScreen('up'); - // TEMP: refresh until proper events available + + // check activity item after mine await elementById('ActivityShort-0').waitForDisplayed(); await tap('ActivityShort-0'); await elementById('StatusConfirmed').waitForDisplayed(); await doNavigationClose(); - (await elementByIdWithin('ActivityShort-1', 'BoostingIcon')).waitForDisplayed(); - await tap('ActivityShort-1'); - await elementById('StatusRemoved').waitForDisplayed(); }); }); diff --git a/test/specs/lightning.e2e.ts b/test/specs/lightning.e2e.ts index 028f68b..4d62309 100644 --- a/test/specs/lightning.e2e.ts +++ b/test/specs/lightning.e2e.ts @@ -23,6 +23,9 @@ import { elementByText, dismissQuickPayIntro, doNavigationClose, + dismissBackgroundPaymentsTimedSheet, + acknowledgeReceivedPayment, + waitForBackup, } from '../helpers/actions'; import { reinstallApp } from '../helpers/setup'; import { bitcoinURL, lndConfig } from '../helpers/constants'; @@ -97,6 +100,7 @@ describe('@lightning - Lightning', () => { // Toast message await expectText('Spending Balance Ready'); + await expectText('Spending Balance Ready', { visible: false }); // check channel status await checkChannelStatus(); @@ -108,14 +112,20 @@ describe('@lightning - Lightning', () => { console.info({ response }); await elementById('ReceivedTransaction').waitForDisplayed(); await tap('ReceivedTransactionButton'); - await sleep(500); - await dismissQuickPayIntro(); + await sleep(1000); + if (driver.isIOS) { + await dismissBackgroundPaymentsTimedSheet({ triggerTimedSheet: driver.isIOS }); + await dismissQuickPayIntro({ triggerTimedSheet: driver.isIOS }); + } else { + await dismissQuickPayIntro(); + } const totalBalance = await elementByIdWithin('TotalBalance-primary', 'MoneyText'); await expect(totalBalance).toHaveText('11 000'); // 1k onchain + 10k lightning await expectTextWithin('ActivitySpending', '10 000'); // send funds to LDK, 111 sats invoice await tap('Receive'); + await sleep(1000); await tap('SpecifyInvoiceButton'); await tap('ReceiveNumberPadTextField'); await sleep(100); @@ -130,6 +140,7 @@ describe('@lightning - Lightning', () => { await tap('ReceiveTagsSubmit'); await sleep(300); await tap('ShowQrReceive'); + await sleep(500); const invoice2 = await getAddressFromQRCode('lightning'); await swipeFullScreen('down'); await lnd.sendPaymentSync({ paymentRequest: invoice2 }); @@ -191,6 +202,7 @@ describe('@lightning - Lightning', () => { await swipeFullScreen('up'); await swipeFullScreen('up'); await tap('ActivityShowAll'); + // All transactions await expectTextWithin('Activity-1', '-'); await expectTextWithin('Activity-2', '-'); @@ -234,8 +246,7 @@ describe('@lightning - Lightning', () => { // wipe and restore wallet const seed = await getSeed(); - // await waitForBackup(); - await sleep(10_000); //temp wait (until we have a proper event for backup completion) + await waitForBackup(); await restoreWallet(seed); // check balance @@ -260,7 +271,9 @@ describe('@lightning - Lightning', () => { await tap('DrawerSettings'); await tap('AdvancedSettings'); await tap('Channels'); + await sleep(2000); await tap('Channel'); + await sleep(1000); await expectTextWithin('TotalSize', '₿ 100 000'); await swipeFullScreen('up'); await elementById('IsUsableYes').waitForDisplayed(); @@ -273,11 +286,10 @@ describe('@lightning - Lightning', () => { await mineBlocks(rpc, 6); await electrum?.waitForSync(); - // https://github.com/synonymdev/bitkit-android/issues/268 - // send - onchain - receiver sees no confetti — missing-in-ldk-node missing onchain payment event - // await elementById('ReceivedTransaction').waitForDisplayed(); await elementById('Channel').waitForDisplayed({ reverse: true }); - await tap('NavigationBack'); + if (driver.isAndroid) { + await tap('NavigationBack'); + } await doNavigationClose(); await swipeFullScreen('up'); diff --git a/test/specs/numberpad.e2e.ts b/test/specs/numberpad.e2e.ts index 2da5a7e..7cadef3 100644 --- a/test/specs/numberpad.e2e.ts +++ b/test/specs/numberpad.e2e.ts @@ -24,6 +24,7 @@ describe('@numberpad - NumberPad', () => { describe('Modern denomination', () => { ciIt('@numberpad_1 - Receive: Can enter amounts in modern denomination', async () => { await tap('Receive'); + await sleep(700); await tap('SpecifyInvoiceButton'); await tap('ReceiveNumberPadTextField'); await sleep(700); @@ -45,6 +46,7 @@ describe('@numberpad - NumberPad', () => { ciIt('@numberpad_3 - Receive: Can enter amounts in classic denomination', async () => { await tap('Receive'); + await sleep(700); await tap('SpecifyInvoiceButton'); await tap('ReceiveNumberPadTextField'); await sleep(700); diff --git a/test/specs/onchain.e2e.ts b/test/specs/onchain.e2e.ts index 667b857..8c96a64 100644 --- a/test/specs/onchain.e2e.ts +++ b/test/specs/onchain.e2e.ts @@ -24,6 +24,7 @@ import { dismissBackupTimedSheet, handleOver50PercentAlert, handleOver100Alert, + acknowledgeReceivedPayment, } from '../helpers/actions'; import { ciIt } from '../helpers/suite'; @@ -124,13 +125,11 @@ describe('@onchain - Onchain', () => { await swipeFullScreen('down'); await rpc.sendToAddress(address, '1'); + await acknowledgeReceivedPayment(); + await mineBlocks(rpc, 1); await electrum?.waitForSync(); - // https://github.com/synonymdev/bitkit-android/issues/268 - // send - onchain - receiver sees no confetti — missing-in-ldk-node missing onchain payment event - // await elementById('ReceivedTransaction').waitForDisplayed(); - if (i === 1 && driver.isAndroid) { await dismissBackupTimedSheet(); await acknowledgeHighBalanceWarning(); diff --git a/test/specs/settings.e2e.ts b/test/specs/settings.e2e.ts index 2035f83..e98ec85 100644 --- a/test/specs/settings.e2e.ts +++ b/test/specs/settings.e2e.ts @@ -14,8 +14,9 @@ import { confirmInputOnKeyboard, multiTap, getAccessibleText, - expectText, doNavigationClose, + waitForToast, + ToastId, } from '../helpers/actions'; import { electrumHost, electrumPort } from '../helpers/constants'; import { launchFreshApp, reinstallApp } from '../helpers/setup'; @@ -42,6 +43,9 @@ describe('@settings - Settings', () => { await tap('TotalBalance'); } await expect(fiatSymbol).toHaveText('$'); + if (driver.isIOS) { + await waitForToast('BalanceUnitSwitchedToast'); + } // - change settings (currency to EUR) // await tap('HeaderMenu'); @@ -121,6 +125,7 @@ describe('@settings - Settings', () => { // switch to Fast await tap('TransactionSpeedSettings'); await tap('fast'); + await sleep(1000); await expect(await elementByIdWithin('TransactionSpeedSettings', 'Value')).toHaveText( /.*Fast/ ); @@ -131,6 +136,7 @@ describe('@settings - Settings', () => { await tap('N1'); await tap('Continue'); await tap('NavigationBack'); + await sleep(1000); await expect(await elementByIdWithin('TransactionSpeedSettings', 'Value')).toHaveText( /.*Custom/ ); @@ -138,6 +144,7 @@ describe('@settings - Settings', () => { // switch back to Normal await tap('TransactionSpeedSettings'); await tap('normal'); + await sleep(1000); await expect(await elementByIdWithin('TransactionSpeedSettings', 'Value')).toHaveText( /.*Normal/ ); @@ -154,6 +161,7 @@ describe('@settings - Settings', () => { // open receive tags, add a tag const tag = 'test123'; await tap('Receive'); + await sleep(700); await tap('SpecifyInvoiceButton'); (await elementByText(tag)).waitForDisplayed({ reverse: true }); @@ -177,6 +185,7 @@ describe('@settings - Settings', () => { // open receive tags, check tags are gone await tap('Receive'); + await sleep(700); await tap('SpecifyInvoiceButton'); (await elementByText(tag)).waitForDisplayed({ reverse: true }); await tap('TagsAdd'); @@ -215,6 +224,9 @@ describe('@settings - Settings', () => { await dragOnElement('TotalBalance', 'right', 0.5); } await elementById('ShowBalance').waitForDisplayed(); + if (driver.isIOS) { + await waitForToast('BalanceHiddenToast', { waitToDisappear: false, dismiss: true }); + } // Disable 'swipe to hide balance' await tap('HeaderMenu'); @@ -239,9 +251,12 @@ describe('@settings - Settings', () => { // Restart the app await sleep(3000); - await launchFreshApp({ tryHandleAlert: driver.isAndroid }); + await launchFreshApp(); // Balance should be hidden - await elementById('ShowBalance').waitForDisplayed(); + // https://github.com/synonymdev/bitkit-ios/issues/260 + if (driver.isAndroid) { + await elementById('ShowBalance').waitForDisplayed(); + } }); }); @@ -252,7 +267,9 @@ describe('@settings - Settings', () => { await tap('BackupSettings'); await sleep(1000); await tap('ResetAndRestore'); + await sleep(1000); await tap('NavigationBack'); + await sleep(1000); await tap('BackupWallet'); await sleep(1000); // animation @@ -377,8 +394,7 @@ describe('@settings - Settings', () => { await tap('ConnectToHost'); // disconnected warning should appear - await elementById('Disconnected').waitForDisplayed(); - await sleep(1000); + await waitForToast('ElectrumErrorToast'); // scanner - check all possible connection formats // Umbrel format @@ -387,26 +403,14 @@ describe('@settings - Settings', () => { expectedHost: electrumHost, expectedPort: electrumPort.toString(), expectedProtocol: 'TCP', + expectedToastMessage: 'ElectrumUpdatedToast', }; const umbrel2 = { url: `${electrumHost}:${electrumPort}:s`, expectedHost: electrumHost, expectedPort: electrumPort.toString(), expectedProtocol: 'TLS', - }; - - // should detect protocol for common ports - const noProto1 = { - url: `${electrumHost}:50001`, - expectedHost: electrumHost, - expectedPort: '50001', - expectedProtocol: 'TCP', - }; - const noProto2 = { - url: `${electrumHost}:50002`, - expectedHost: electrumHost, - expectedPort: '50002', - expectedProtocol: 'TLS', + expectedToastMessage: 'ElectrumErrorToast', }; // HTTP URL @@ -415,17 +419,20 @@ describe('@settings - Settings', () => { expectedHost: electrumHost, expectedPort: electrumPort.toString(), expectedProtocol: 'TCP', + expectedToastMessage: 'ElectrumUpdatedToast', }; const http2 = { url: `https://${electrumHost}:${electrumPort}`, expectedHost: electrumHost, expectedPort: electrumPort.toString(), expectedProtocol: 'TLS', + expectedToastMessage: 'ElectrumErrorToast', }; - const conns = [umbrel1, umbrel2, noProto1, noProto2, http1, http2]; + const conns = [umbrel1, umbrel2, http1, http2]; let i = 0; for (const conn of conns) { + console.info(`Testing Electrum connection format #${i + 1}: ${conn.url}`); await sleep(1000); await tap('NavigationAction'); // on the first time we need to accept the notifications permission dialog to use camera @@ -435,6 +442,7 @@ describe('@settings - Settings', () => { await tap('ScanPrompt'); await typeText('QRInput', conn.url); await tap('DialogConfirm'); + await waitForToast(conn.expectedToastMessage as ToastId); await expect(await elementById('HostInput')).toHaveText(conn.expectedHost); expect(await elementById('PortInput')).toHaveText(conn.expectedPort); // await expectTextWithin('ElectrumProtocol', conn.expectedProtocol); @@ -445,6 +453,9 @@ describe('@settings - Settings', () => { await elementById('ResetToDefault').waitForEnabled(); await tap('ResetToDefault'); await tap('ConnectToHost'); + if (driver.isIOS) { + await waitForToast('ElectrumUpdatedToast', { waitToDisappear: false }); + } await elementById('Connected').waitForDisplayed(); await sleep(1000); }); @@ -465,16 +476,14 @@ describe('@settings - Settings', () => { await typeText('RGSUrl', newUrl); await confirmInputOnKeyboard(); await tap('ConnectToHost'); - const updatedMsg = 'Rapid-Gossip-Sync Server Updated'; - await expectText(updatedMsg); - await expectText(updatedMsg, { visible: false }); + await waitForToast('RgsUpdatedToast'); const updatedUrl = await (await elementById('ConnectedUrl')).getText(); await expect(updatedUrl).toBe(newUrl); // switch back to default await tap('ResetToDefault'); await tap('ConnectToHost'); - await expectText(updatedMsg); + await waitForToast('RgsUpdatedToast', { waitToDisappear: false }); const resetUrl = await (await elementById('ConnectedUrl')).getText(); await expect(resetUrl).toBe(rgsUrl); diff --git a/test/specs/transfer.e2e.ts b/test/specs/transfer.e2e.ts index 67feb82..d6cac74 100644 --- a/test/specs/transfer.e2e.ts +++ b/test/specs/transfer.e2e.ts @@ -87,7 +87,7 @@ describe('@transfer - Transfer', () => { await tap('TransferIntro-button'); await tap('FundTransfer'); await tap('SpendingIntro-button'); - await sleep(1000); // let the animation finish + await sleep(3000); // let the animation finish //--- skip due to: https://github.com/synonymdev/bitkit-android/issues/425 ---// //// can continue with default client balance (0) @@ -118,6 +118,7 @@ describe('@transfer - Transfer', () => { //--- skip due to: https://github.com/synonymdev/bitkit-android/issues/424 ---// // can continue with 25% client balance + await elementById('SpendingAmountQuarter').waitForEnabled(); await tap('SpendingAmountQuarter'); await elementById('SpendingAmountContinue').waitForEnabled(); await sleep(500);