From 1e29fa9f8c21e7c1767d3117a13be4034209e343 Mon Sep 17 00:00:00 2001 From: LeVinhGithub Date: Wed, 4 Mar 2026 14:11:47 +0700 Subject: [PATCH 1/6] test: init --- .../solana-wallet-standard/connect.spec.ts | 24 ++------ .../signMessage.spec.ts | 12 ++-- .../solana-wallet-standard/testHelpers.ts | 35 ------------ .../transaction_sol.spec.ts | 57 +++++++------------ .../transaction_wsol.spec.ts | 36 ++++++------ .../snap-sign-message-confirmation.ts | 10 ++++ .../snap-transaction-confirmation.ts | 10 ++++ 7 files changed, 71 insertions(+), 113 deletions(-) diff --git a/test/e2e/flask/solana-wallet-standard/connect.spec.ts b/test/e2e/flask/solana-wallet-standard/connect.spec.ts index d4672ac3223e..140c5ce9e767 100644 --- a/test/e2e/flask/solana-wallet-standard/connect.spec.ts +++ b/test/e2e/flask/solana-wallet-standard/connect.spec.ts @@ -1,8 +1,8 @@ -import { strict as assert } from 'assert'; import { SOLANA_DEVNET_URL } from '../../tests/solana/common-solana'; +import SnapSignMessageConfirmation from '../../page-objects/pages/confirmations/snap-sign-message-confirmation'; import { TestDappSolana } from '../../page-objects/pages/test-dapp-solana'; import { DAPP_PATH, WINDOW_TITLES } from '../../constants'; -import { regularDelayMs, withFixtures } from '../../helpers'; +import { withFixtures } from '../../helpers'; import FixtureBuilder from '../../fixtures/fixture-builder'; import FixtureBuilderV2 from '../../fixtures/fixture-builder-v2'; import { loginWithBalanceValidation } from '../../page-objects/flows/login.flow'; @@ -89,14 +89,9 @@ describe('Solana Wallet Standard - e2e tests', function () { const header = await testDapp.getHeader(); await header.connect(); - // wait to display wallet connect modal - await driver.delay(regularDelayMs); - const modal = await testDapp.getWalletModal(); await modal.connectToMetaMaskWallet(); - await driver.delay(regularDelayMs); - // Cancel the connection await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); const connectAccountConfirmation = new ConnectAccountConfirmation( @@ -140,10 +135,8 @@ describe('Solana Wallet Standard - e2e tests', function () { // Start connection const header = await testDapp.getHeader(); await header.connect(); - await driver.delay(regularDelayMs); const modal = await testDapp.getWalletModal(); await modal.connectToMetaMaskWallet(); - await driver.delay(regularDelayMs); // Open the permissions modal await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); @@ -228,7 +221,6 @@ describe('Solana Wallet Standard - e2e tests', function () { await testDapp.openTestDappPage(); await testDapp.checkPageIsLoaded(); await connectSolanaTestDapp(driver, testDapp); - await driver.delay(regularDelayMs); // Check that we're connected to the last selected account const header = await testDapp.getHeader(); @@ -395,16 +387,10 @@ describe('Solana Wallet Standard - e2e tests', function () { await signMessageTest.setMessage('Hello, world!'); await signMessageTest.signMessage(); - await driver.delay(regularDelayMs); - await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - - // Check that mainnet appears in the dialog - const el = await driver.waitForSelector({ - text: 'Solana Mainnet', - tag: 'p', - }); - assert.ok(el); + const signMsgConfirmation = new SnapSignMessageConfirmation(driver); + await signMsgConfirmation.checkPageIsLoaded(); + await signMsgConfirmation.checkNetworkIsDisplayed('Solana Mainnet'); }, ); }); diff --git a/test/e2e/flask/solana-wallet-standard/signMessage.spec.ts b/test/e2e/flask/solana-wallet-standard/signMessage.spec.ts index bd7647ff1cc6..79ac4424db76 100644 --- a/test/e2e/flask/solana-wallet-standard/signMessage.spec.ts +++ b/test/e2e/flask/solana-wallet-standard/signMessage.spec.ts @@ -1,12 +1,12 @@ +import SnapSignMessageConfirmation from '../../page-objects/pages/confirmations/snap-sign-message-confirmation'; import { TestDappSolana } from '../../page-objects/pages/test-dapp-solana'; import { DAPP_PATH, WINDOW_TITLES } from '../../constants'; -import { largeDelayMs, veryLargeDelayMs, withFixtures } from '../../helpers'; -import FixtureBuilderV2 from '../../fixtures/fixture-builder-v2'; +import { withFixtures } from '../../helpers'; import { loginWithBalanceValidation } from '../../page-objects/flows/login.flow'; +import FixtureBuilderV2 from '../../fixtures/fixture-builder-v2'; import { account1, assertSignedMessageIsValid, - clickConfirmButton, connectSolanaTestDapp, } from './testHelpers'; @@ -34,13 +34,13 @@ describe('Solana Wallet Standard - Sign Message', function () { await signMessageTest.signMessage(); - await driver.delay(veryLargeDelayMs); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await clickConfirmButton(driver); + const signMsgConfirmation = new SnapSignMessageConfirmation(driver); + await signMsgConfirmation.checkPageIsLoaded(); + await signMsgConfirmation.clickFooterConfirmButton(); await testDapp.switchTo(); - await driver.delay(largeDelayMs); const signedMessage = await signMessageTest.getSignedMessage(); assertSignedMessageIsValid({ diff --git a/test/e2e/flask/solana-wallet-standard/testHelpers.ts b/test/e2e/flask/solana-wallet-standard/testHelpers.ts index f172b9723166..a165f0e3dd63 100644 --- a/test/e2e/flask/solana-wallet-standard/testHelpers.ts +++ b/test/e2e/flask/solana-wallet-standard/testHelpers.ts @@ -1,8 +1,6 @@ import { strict as assert } from 'assert'; -import { By } from 'selenium-webdriver'; import nacl from 'tweetnacl'; import { WINDOW_TITLES } from '../../constants'; -import { largeDelayMs, regularDelayMs } from '../../helpers'; import { Driver } from '../../webdriver/driver'; import { TestDappSolana } from '../../page-objects/pages/test-dapp-solana'; import { SOLANA_DEVNET_URL } from '../../tests/solana/common-solana'; @@ -62,14 +60,9 @@ export const connectSolanaTestDapp = async ( await header.connect(); - // wait to display wallet connect modal - await driver.delay(regularDelayMs); - const modal = await testDapp.getWalletModal(); await modal.connectToMetaMaskWallet(); - // Get to extension modal, and click on the "Connect" button - await driver.delay(largeDelayMs); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); if (options?.includeDevnet) { @@ -85,34 +78,6 @@ export const connectSolanaTestDapp = async ( console.log('solana test dapp connected'); }; -/** - * Waits for the Confirm button in the footer of a Solana-specific modal to be clickable then clicks it. - * Note: This function does not work for general purpose modals like connect/disconnect. - * - * @param driver - */ -export const clickConfirmButton = async (driver: Driver): Promise => { - const footerButtons = await driver.findClickableElements( - By.css('button.snap-ui-renderer__footer-button'), - ); - const confirmButton = footerButtons[1]; - await confirmButton.click(); -}; - -/** - * Clicks the Cancel button in the footer in a Solana-specific modal. - * Note: This function does not work for general purpose modals like connect/disconnect. - * - * @param driver - */ -export const clickCancelButton = async (driver: Driver): Promise => { - const footerButtons = await driver.findClickableElements( - By.css('button.snap-ui-renderer__footer-button'), - ); - const cancelButton = footerButtons[0]; - await cancelButton.click(); -}; - /** * Switches to the specified account in the account menu. * diff --git a/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts b/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts index d14d1d99c959..964e9a89b86c 100644 --- a/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts +++ b/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts @@ -1,16 +1,13 @@ import { strict as assert } from 'assert'; -import { By } from 'selenium-webdriver'; +import SnapSignTransactionConfirmation from '../../page-objects/pages/confirmations/snap-sign-transaction-confirmation'; +import SnapTransactionConfirmation from '../../page-objects/pages/confirmations/snap-transaction-confirmation'; import { TestDappSolana } from '../../page-objects/pages/test-dapp-solana'; import FixtureBuilderV2 from '../../fixtures/fixture-builder-v2'; import { DAPP_PATH, WINDOW_TITLES } from '../../constants'; -import { largeDelayMs, withFixtures } from '../../helpers'; +import { withFixtures } from '../../helpers'; import { loginWithBalanceValidation } from '../../page-objects/flows/login.flow'; import { buildSolanaTestSpecificMock } from '../../tests/solana/common-solana'; -import { - clickCancelButton, - clickConfirmButton, - connectSolanaTestDapp, -} from './testHelpers'; +import { connectSolanaTestDapp } from './testHelpers'; describe('Solana Wallet Standard - Transfer SOL', function () { describe('Send a transaction', function () { @@ -39,13 +36,14 @@ describe('Solana Wallet Standard - Transfer SOL', function () { const sendSolTest = await testDapp.getSendSolTest(); await sendSolTest.signTransaction(); - // Confirm the signature - await driver.delay(largeDelayMs); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await clickConfirmButton(driver); + const signTxConfirmation = new SnapSignTransactionConfirmation( + driver, + ); + await signTxConfirmation.checkPageIsLoaded(); + await signTxConfirmation.clickFooterConfirmButton(); await testDapp.switchTo(); - await driver.delay(largeDelayMs); const signedTransaction = await sendSolTest.getSignedTransaction(); assert.strictEqual(signedTransaction.length, 1); assert.ok(signedTransaction[0]); @@ -53,14 +51,12 @@ describe('Solana Wallet Standard - Transfer SOL', function () { // 2. Send the transaction await sendSolTest.sendTransaction(); - // Confirm the transaction - await driver.delay(largeDelayMs); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await clickConfirmButton(driver); + const txConfirmation = new SnapTransactionConfirmation(driver); + await txConfirmation.checkPageIsLoaded(); + await txConfirmation.clickFooterConfirmButton(); await testDapp.switchTo(); - // Assert that a transaction hash is received - await driver.delay(largeDelayMs); const transactionHash = await sendSolTest.getTransactionHash(); assert.ok(transactionHash); }, @@ -92,23 +88,21 @@ describe('Solana Wallet Standard - Transfer SOL', function () { const sendSolTest = await testDapp.getSendSolTest(); await sendSolTest.sendTransaction(); - // Cancel the sendTransaction - await driver.delay(largeDelayMs); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await clickCancelButton(driver); + const cancelTxConfirmation = new SnapTransactionConfirmation(driver); + await cancelTxConfirmation.checkPageIsLoaded(); + await cancelTxConfirmation.clickFooterCancelButton(); await testDapp.switchTo(); // 2. Send another transaction await sendSolTest.sendTransaction(); - // Confirm the transaction - await driver.delay(largeDelayMs); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await clickConfirmButton(driver); + const txConfirmation = new SnapTransactionConfirmation(driver); + await txConfirmation.checkPageIsLoaded(); + await txConfirmation.clickFooterConfirmButton(); await testDapp.switchTo(); - // Assert that a transaction hash is received - await driver.delay(largeDelayMs); const transactionHash = await sendSolTest.getTransactionHash(); assert.ok(transactionHash); }, @@ -141,18 +135,11 @@ describe('Solana Wallet Standard - Transfer SOL', function () { const sendSolTest = await testDapp.getSendSolTest(); await sendSolTest.sendTransaction(); - // Confirm the signature - await driver.delay(largeDelayMs); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - - // Look for the target chain to be set to Devnet - const permission = await driver.findElement( - By.xpath("//p[contains(text(), 'Solana Devnet')]"), - ); - assert.ok(permission); - - // Confirm connection - await driver.clickElement({ text: 'Confirm', tag: 'span' }); + const txConfirmation = new SnapTransactionConfirmation(driver); + await txConfirmation.checkPageIsLoaded(); + await txConfirmation.checkNetworkIsDisplayed('Solana Devnet'); + await txConfirmation.clickFooterConfirmButton(); }, ); }); diff --git a/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts b/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts index bebc5e6e9b38..365a22a104d5 100644 --- a/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts +++ b/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts @@ -1,11 +1,13 @@ import { strict as assert } from 'assert'; +import SnapSignTransactionConfirmation from '../../page-objects/pages/confirmations/snap-sign-transaction-confirmation'; +import SnapTransactionConfirmation from '../../page-objects/pages/confirmations/snap-transaction-confirmation'; import { TestDappSolana } from '../../page-objects/pages/test-dapp-solana'; import { DAPP_PATH, WINDOW_TITLES } from '../../constants'; -import { largeDelayMs, withFixtures } from '../../helpers'; +import { withFixtures } from '../../helpers'; import FixtureBuilderV2 from '../../fixtures/fixture-builder-v2'; import { loginWithBalanceValidation } from '../../page-objects/flows/login.flow'; import { buildSolanaTestSpecificMock } from '../../tests/solana/common-solana'; -import { clickConfirmButton, connectSolanaTestDapp } from './testHelpers'; +import { connectSolanaTestDapp } from './testHelpers'; describe('Solana Wallet Standard - Transfer WSOL', function () { describe('Send WSOL transactions', function () { @@ -35,19 +37,19 @@ describe('Solana Wallet Standard - Transfer WSOL', function () { // 1. Sign multiple transactions const sendWSolTest = await testDapp.getSendWSolTest(); await sendWSolTest.signTransaction(); - // Confirm the first signature - await driver.delay(largeDelayMs); + await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await clickConfirmButton(driver); + const signTxConfirmation = new SnapSignTransactionConfirmation( + driver, + ); + await signTxConfirmation.checkPageIsLoaded(); + await signTxConfirmation.clickFooterConfirmButton(); - // Confirm the second signature - await driver.delay(largeDelayMs); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await clickConfirmButton(driver); + await signTxConfirmation.checkPageIsLoaded(); + await signTxConfirmation.clickFooterConfirmButton(); await testDapp.switchTo(); - // Assert that the transactions were signed - await driver.delay(largeDelayMs); const signedTransactions = await sendWSolTest.getSignedTransactions(); assert.strictEqual(signedTransactions.length, 2); assert.ok(signedTransactions[0]); @@ -55,19 +57,17 @@ describe('Solana Wallet Standard - Transfer WSOL', function () { // 2. Send multiple transactions await sendWSolTest.sendTransaction(); - // Confirm the first transaction - await driver.delay(largeDelayMs); + await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await clickConfirmButton(driver); + const txConfirmation = new SnapTransactionConfirmation(driver); + await txConfirmation.checkPageIsLoaded(); + await txConfirmation.clickFooterConfirmButton(); - // Confirm the second transaction - await driver.delay(largeDelayMs); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await clickConfirmButton(driver); + await txConfirmation.checkPageIsLoaded(); + await txConfirmation.clickFooterConfirmButton(); await testDapp.switchTo(); - // Assert that transaction hashes were received - await driver.delay(largeDelayMs); const transactionHashes = await sendWSolTest.getTransactionHashs(); assert.strictEqual(transactionHashes.length, 2); assert.ok(transactionHashes[0]); diff --git a/test/e2e/page-objects/pages/confirmations/snap-sign-message-confirmation.ts b/test/e2e/page-objects/pages/confirmations/snap-sign-message-confirmation.ts index f50462645f43..1afdb643cbd6 100644 --- a/test/e2e/page-objects/pages/confirmations/snap-sign-message-confirmation.ts +++ b/test/e2e/page-objects/pages/confirmations/snap-sign-message-confirmation.ts @@ -31,6 +31,16 @@ class SnapSignMessageConfirmation { }); } + async checkNetworkIsDisplayed(networkName: string): Promise { + console.log( + `Checking network ${networkName} is displayed on snap sign message confirmation page.`, + ); + await this.driver.waitForSelector({ + text: networkName, + tag: 'p', + }); + } + async checkPageIsLoaded(): Promise { try { await this.driver.waitForMultipleSelectors([ diff --git a/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts b/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts index 8c80ef735519..0d305237ecc0 100644 --- a/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts +++ b/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts @@ -53,6 +53,16 @@ class SnapTransactionConfirmation { console.log('Snap transaction confirmation page is loaded'); } + async checkNetworkIsDisplayed(networkName: string): Promise { + console.log( + `Checking network ${networkName} is displayed on snap transaction confirmation page.`, + ); + await this.driver.waitForSelector({ + text: networkName, + tag: 'p', + }); + } + async checkSecurityAlertsErrorIsDisplayed(): Promise { await this.driver.waitForSelector(this.securityAlertsError); } From b08ef1664f5d1f17c9057ecaecfff7aeac7e2736 Mon Sep 17 00:00:00 2001 From: LeVinhGithub Date: Fri, 6 Mar 2026 15:30:27 +0700 Subject: [PATCH 2/6] test: fix few tests --- .../transaction_sol.spec.ts | 26 +++++-------- .../transaction_wsol.spec.ts | 28 ++++++-------- .../snap-transaction-confirmation.ts | 14 +++++++ .../page-objects/pages/test-dapp-solana.ts | 38 +++++++++++++------ test/e2e/webdriver/driver.js | 32 ++++++++++++++++ 5 files changed, 93 insertions(+), 45 deletions(-) diff --git a/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts b/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts index 964e9a89b86c..5bd38814da29 100644 --- a/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts +++ b/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts @@ -1,5 +1,4 @@ import { strict as assert } from 'assert'; -import SnapSignTransactionConfirmation from '../../page-objects/pages/confirmations/snap-sign-transaction-confirmation'; import SnapTransactionConfirmation from '../../page-objects/pages/confirmations/snap-transaction-confirmation'; import { TestDappSolana } from '../../page-objects/pages/test-dapp-solana'; import FixtureBuilderV2 from '../../fixtures/fixture-builder-v2'; @@ -37,11 +36,8 @@ describe('Solana Wallet Standard - Transfer SOL', function () { await sendSolTest.signTransaction(); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - const signTxConfirmation = new SnapSignTransactionConfirmation( - driver, - ); - await signTxConfirmation.checkPageIsLoaded(); - await signTxConfirmation.clickFooterConfirmButton(); + const signTxConfirmation = new SnapTransactionConfirmation(driver); + await signTxConfirmation.clickFooterConfirmButtonWithoutWait(); await testDapp.switchTo(); const signedTransaction = await sendSolTest.getSignedTransaction(); @@ -53,8 +49,7 @@ describe('Solana Wallet Standard - Transfer SOL', function () { await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); const txConfirmation = new SnapTransactionConfirmation(driver); - await txConfirmation.checkPageIsLoaded(); - await txConfirmation.clickFooterConfirmButton(); + await txConfirmation.clickFooterConfirmButtonWithoutWait(); await testDapp.switchTo(); const transactionHash = await sendSolTest.getTransactionHash(); @@ -87,20 +82,18 @@ describe('Solana Wallet Standard - Transfer SOL', function () { // 1. Start a transaction and cancel it const sendSolTest = await testDapp.getSendSolTest(); await sendSolTest.sendTransaction(); - await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); const cancelTxConfirmation = new SnapTransactionConfirmation(driver); - await cancelTxConfirmation.checkPageIsLoaded(); - await cancelTxConfirmation.clickFooterCancelButton(); + await cancelTxConfirmation.clickFooterCancelButtonWithoutWait(); await testDapp.switchTo(); // 2. Send another transaction await sendSolTest.sendTransaction(); - await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); + await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); + const txConfirmation = new SnapTransactionConfirmation(driver); - await txConfirmation.checkPageIsLoaded(); - await txConfirmation.clickFooterConfirmButton(); + await txConfirmation.clickFooterConfirmButtonWithoutWait(); await testDapp.switchTo(); const transactionHash = await sendSolTest.getTransactionHash(); @@ -135,11 +128,10 @@ describe('Solana Wallet Standard - Transfer SOL', function () { const sendSolTest = await testDapp.getSendSolTest(); await sendSolTest.sendTransaction(); - await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); + await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); const txConfirmation = new SnapTransactionConfirmation(driver); - await txConfirmation.checkPageIsLoaded(); await txConfirmation.checkNetworkIsDisplayed('Solana Devnet'); - await txConfirmation.clickFooterConfirmButton(); + await txConfirmation.clickFooterConfirmButtonWithoutWait(); }, ); }); diff --git a/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts b/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts index 365a22a104d5..29963dcc4d53 100644 --- a/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts +++ b/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts @@ -1,5 +1,4 @@ import { strict as assert } from 'assert'; -import SnapSignTransactionConfirmation from '../../page-objects/pages/confirmations/snap-sign-transaction-confirmation'; import SnapTransactionConfirmation from '../../page-objects/pages/confirmations/snap-transaction-confirmation'; import { TestDappSolana } from '../../page-objects/pages/test-dapp-solana'; import { DAPP_PATH, WINDOW_TITLES } from '../../constants'; @@ -35,19 +34,17 @@ describe('Solana Wallet Standard - Transfer WSOL', function () { }); // 1. Sign multiple transactions + console.log('1. Sign multiple transactions'); const sendWSolTest = await testDapp.getSendWSolTest(); await sendWSolTest.signTransaction(); - await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - const signTxConfirmation = new SnapSignTransactionConfirmation( - driver, - ); - await signTxConfirmation.checkPageIsLoaded(); - await signTxConfirmation.clickFooterConfirmButton(); + await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); + const signTxConfirmation = new SnapTransactionConfirmation(driver); + await signTxConfirmation.clickFooterConfirmButtonWithoutWait(); + await driver.delay(1000); - await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await signTxConfirmation.checkPageIsLoaded(); - await signTxConfirmation.clickFooterConfirmButton(); + await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); + await signTxConfirmation.clickFooterConfirmButtonWithoutWait(); await testDapp.switchTo(); const signedTransactions = await sendWSolTest.getSignedTransactions(); @@ -56,16 +53,15 @@ describe('Solana Wallet Standard - Transfer WSOL', function () { assert.ok(signedTransactions[1]); // 2. Send multiple transactions + console.log('2. Send multiple transactions'); await sendWSolTest.sendTransaction(); - await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); + await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); const txConfirmation = new SnapTransactionConfirmation(driver); - await txConfirmation.checkPageIsLoaded(); - await txConfirmation.clickFooterConfirmButton(); + await txConfirmation.clickFooterConfirmButtonWithoutWait(); - await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await txConfirmation.checkPageIsLoaded(); - await txConfirmation.clickFooterConfirmButton(); + await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); + await txConfirmation.clickFooterConfirmButtonWithoutWait(); await testDapp.switchTo(); const transactionHashes = await sendWSolTest.getTransactionHashs(); diff --git a/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts b/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts index 0d305237ecc0..cb5b8f98a80e 100644 --- a/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts +++ b/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts @@ -72,11 +72,25 @@ class SnapTransactionConfirmation { } async clickFooterConfirmButton() { + console.log('Clicking footer confirm button'); await this.driver.clickElementAndWaitToDisappear(this.confirmButton); } async clickFooterConfirmButtonAndWaitForWindowToClose() { + console.log( + 'Clicking footer confirm button and waiting for window to close', + ); await this.driver.clickElementAndWaitForWindowToClose(this.confirmButton); } + + async clickFooterConfirmButtonWithoutWait() { + console.log('Clicking footer confirm button without waiting'); + await this.driver.clickElement(this.confirmButton); + } + + async clickFooterCancelButtonWithoutWait() { + console.log('Clicking footer cancel button without waiting'); + await this.driver.clickElement(this.cancelButton); + } } export default SnapTransactionConfirmation; diff --git a/test/e2e/page-objects/pages/test-dapp-solana.ts b/test/e2e/page-objects/pages/test-dapp-solana.ts index b86f7c8d6f95..fc5b98826293 100644 --- a/test/e2e/page-objects/pages/test-dapp-solana.ts +++ b/test/e2e/page-objects/pages/test-dapp-solana.ts @@ -81,6 +81,7 @@ export class TestDappSolana { * Focus on the Solana test dapp window. */ async switchTo() { + console.log('Switching to Solana Test Dapp window'); await this.driver.switchToWindowWithTitle(WINDOW_TITLES.SolanaTestDApp); await this.checkPageIsLoaded(); } @@ -190,20 +191,33 @@ export class TestDappSolana { await this.waitSelectorTestId(dataTestIds.testPage.sendSol.id); return { - setAddress: (address: string) => - this.setInputValue(dataTestIds.testPage.sendSol.address, address), - signTransaction: async () => - await this.clickElement(dataTestIds.testPage.sendSol.signTransaction), - sendTransaction: async () => - await this.clickElement(dataTestIds.testPage.sendSol.sendTransaction), - getSignedTransaction: async () => - await this.getSignedMessages( + setAddress: (address: string) => { + console.log('Setting address'); + return this.setInputValue( + dataTestIds.testPage.sendSol.address, + address, + ); + }, + signTransaction: async () => { + console.log('Clicking sign transaction button'); + await this.clickElement(dataTestIds.testPage.sendSol.signTransaction); + }, + sendTransaction: async () => { + console.log('Clicking send transaction button'); + await this.clickElement(dataTestIds.testPage.sendSol.sendTransaction); + }, + getSignedTransaction: async () => { + console.log('Getting signed transaction'); + return await this.getSignedMessages( dataTestIds.testPage.sendSol.signedTransaction, - ), - getTransactionHash: async () => - await this.getSolscanShortContent( + ); + }, + getTransactionHash: async () => { + console.log('Getting transaction hash'); + return await this.getSolscanShortContent( dataTestIds.testPage.sendSol.transactionHash, - ), + ); + }, }; } diff --git a/test/e2e/webdriver/driver.js b/test/e2e/webdriver/driver.js index f661c69d5b10..a585d282c735 100644 --- a/test/e2e/webdriver/driver.js +++ b/test/e2e/webdriver/driver.js @@ -1371,6 +1371,38 @@ class Driver { throw new Error(`No window with title: ${title}`); } + /** + * Attempts to switch to the window/tab with the given title, retrying on failure. + * Retries every 500ms for up to 5 seconds. + * + * @param {string} title - The title of the window or tab to switch to. + * @param {number} timeout - Total timeout in milliseconds. + * @param {number} interval - Delay between retries in milliseconds. + * @returns {Promise} promise that resolves once the switch is complete + * @throws {Error} throws an error if no window with the specified title is found after all retries + */ + async switchToWindowWithTitleWithRetry( + title, + timeout = this.timeout, + interval = 1000, + ) { + const start = Date.now(); + let lastError; + while (Date.now() - start <= timeout) { + try { + await this.switchToWindowWithTitle(title); + return; + } catch (e) { + lastError = e; + console.log( + `Switching to window with title: ${title} failed, retrying...`, + ); + await this.delay(interval); + } + } + throw lastError ?? new Error(`No window with title: ${title}`); + } + /** * Waits until there is a window/tab with the given title, without changing the current window focus. * From fa3a2c9b18680902b9963e47535901c347a3f39b Mon Sep 17 00:00:00 2001 From: LeVinhGithub Date: Mon, 9 Mar 2026 15:22:17 +0700 Subject: [PATCH 3/6] test: fix test --- .../transaction_sol.spec.ts | 16 ++++++---- .../transaction_wsol.spec.ts | 21 ++++++------ .../snap-transaction-confirmation.ts | 13 +++----- test/e2e/webdriver/driver.js | 32 ------------------- 4 files changed, 26 insertions(+), 56 deletions(-) diff --git a/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts b/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts index 5bd38814da29..a838c36952b1 100644 --- a/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts +++ b/test/e2e/flask/solana-wallet-standard/transaction_sol.spec.ts @@ -37,7 +37,7 @@ describe('Solana Wallet Standard - Transfer SOL', function () { await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); const signTxConfirmation = new SnapTransactionConfirmation(driver); - await signTxConfirmation.clickFooterConfirmButtonWithoutWait(); + await signTxConfirmation.clickFooterConfirmButtonAndWaitForWindowToClose(); await testDapp.switchTo(); const signedTransaction = await sendSolTest.getSignedTransaction(); @@ -49,7 +49,7 @@ describe('Solana Wallet Standard - Transfer SOL', function () { await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); const txConfirmation = new SnapTransactionConfirmation(driver); - await txConfirmation.clickFooterConfirmButtonWithoutWait(); + await txConfirmation.clickFooterConfirmButtonAndWaitForWindowToClose(); await testDapp.switchTo(); const transactionHash = await sendSolTest.getTransactionHash(); @@ -83,17 +83,19 @@ describe('Solana Wallet Standard - Transfer SOL', function () { const sendSolTest = await testDapp.getSendSolTest(); await sendSolTest.sendTransaction(); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); + const dialogHandle = await driver.getCurrentWindowHandle(); const cancelTxConfirmation = new SnapTransactionConfirmation(driver); - await cancelTxConfirmation.clickFooterCancelButtonWithoutWait(); + await cancelTxConfirmation.clickFooterCancelButtonAndWaitForWindowToClose(); await testDapp.switchTo(); // 2. Send another transaction await sendSolTest.sendTransaction(); - await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); + await driver.waitForWindowToClose(dialogHandle); + await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); const txConfirmation = new SnapTransactionConfirmation(driver); - await txConfirmation.clickFooterConfirmButtonWithoutWait(); + await txConfirmation.clickFooterConfirmButtonAndWaitForWindowToClose(); await testDapp.switchTo(); const transactionHash = await sendSolTest.getTransactionHash(); @@ -128,10 +130,10 @@ describe('Solana Wallet Standard - Transfer SOL', function () { const sendSolTest = await testDapp.getSendSolTest(); await sendSolTest.sendTransaction(); - await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); + await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); const txConfirmation = new SnapTransactionConfirmation(driver); await txConfirmation.checkNetworkIsDisplayed('Solana Devnet'); - await txConfirmation.clickFooterConfirmButtonWithoutWait(); + await txConfirmation.clickFooterConfirmButtonAndWaitForWindowToClose(); }, ); }); diff --git a/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts b/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts index 29963dcc4d53..5e7bd0cb7ccb 100644 --- a/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts +++ b/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts @@ -38,13 +38,14 @@ describe('Solana Wallet Standard - Transfer WSOL', function () { const sendWSolTest = await testDapp.getSendWSolTest(); await sendWSolTest.signTransaction(); - await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); + await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); const signTxConfirmation = new SnapTransactionConfirmation(driver); - await signTxConfirmation.clickFooterConfirmButtonWithoutWait(); - await driver.delay(1000); + let dialogHandle = await driver.getCurrentWindowHandle(); + await signTxConfirmation.clickFooterConfirmButtonAndWaitForWindowToClose(); - await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); - await signTxConfirmation.clickFooterConfirmButtonWithoutWait(); + await driver.waitForWindowToClose(dialogHandle); + await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); + await signTxConfirmation.clickFooterConfirmButtonAndWaitForWindowToClose(); await testDapp.switchTo(); const signedTransactions = await sendWSolTest.getSignedTransactions(); @@ -56,12 +57,14 @@ describe('Solana Wallet Standard - Transfer WSOL', function () { console.log('2. Send multiple transactions'); await sendWSolTest.sendTransaction(); - await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); + await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); + dialogHandle = await driver.getCurrentWindowHandle(); const txConfirmation = new SnapTransactionConfirmation(driver); - await txConfirmation.clickFooterConfirmButtonWithoutWait(); + await txConfirmation.clickFooterConfirmButtonAndWaitForWindowToClose(); - await driver.switchToWindowWithTitleWithRetry(WINDOW_TITLES.Dialog); - await txConfirmation.clickFooterConfirmButtonWithoutWait(); + await driver.waitForWindowToClose(dialogHandle); + await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); + await txConfirmation.clickFooterConfirmButtonAndWaitForWindowToClose(); await testDapp.switchTo(); const transactionHashes = await sendWSolTest.getTransactionHashs(); diff --git a/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts b/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts index cb5b8f98a80e..24247f87aa21 100644 --- a/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts +++ b/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts @@ -83,14 +83,11 @@ class SnapTransactionConfirmation { await this.driver.clickElementAndWaitForWindowToClose(this.confirmButton); } - async clickFooterConfirmButtonWithoutWait() { - console.log('Clicking footer confirm button without waiting'); - await this.driver.clickElement(this.confirmButton); - } - - async clickFooterCancelButtonWithoutWait() { - console.log('Clicking footer cancel button without waiting'); - await this.driver.clickElement(this.cancelButton); + async clickFooterCancelButtonAndWaitForWindowToClose() { + console.log( + 'Clicking footer cancel button and waiting for window to close', + ); + await this.driver.clickElementAndWaitForWindowToClose(this.cancelButton); } } export default SnapTransactionConfirmation; diff --git a/test/e2e/webdriver/driver.js b/test/e2e/webdriver/driver.js index a585d282c735..f661c69d5b10 100644 --- a/test/e2e/webdriver/driver.js +++ b/test/e2e/webdriver/driver.js @@ -1371,38 +1371,6 @@ class Driver { throw new Error(`No window with title: ${title}`); } - /** - * Attempts to switch to the window/tab with the given title, retrying on failure. - * Retries every 500ms for up to 5 seconds. - * - * @param {string} title - The title of the window or tab to switch to. - * @param {number} timeout - Total timeout in milliseconds. - * @param {number} interval - Delay between retries in milliseconds. - * @returns {Promise} promise that resolves once the switch is complete - * @throws {Error} throws an error if no window with the specified title is found after all retries - */ - async switchToWindowWithTitleWithRetry( - title, - timeout = this.timeout, - interval = 1000, - ) { - const start = Date.now(); - let lastError; - while (Date.now() - start <= timeout) { - try { - await this.switchToWindowWithTitle(title); - return; - } catch (e) { - lastError = e; - console.log( - `Switching to window with title: ${title} failed, retrying...`, - ); - await this.delay(interval); - } - } - throw lastError ?? new Error(`No window with title: ${title}`); - } - /** * Waits until there is a window/tab with the given title, without changing the current window focus. * From ffbac93a011993f7f999d2baca5e60a7f5fadaa5 Mon Sep 17 00:00:00 2001 From: LeVinhGithub Date: Mon, 9 Mar 2026 22:13:47 +0700 Subject: [PATCH 4/6] test: clean code --- .../transaction_wsol.spec.ts | 2 -- .../confirmations/snap-transaction-confirmation.ts | 14 ++++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts b/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts index 5e7bd0cb7ccb..ce5f03120b54 100644 --- a/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts +++ b/test/e2e/flask/solana-wallet-standard/transaction_wsol.spec.ts @@ -34,7 +34,6 @@ describe('Solana Wallet Standard - Transfer WSOL', function () { }); // 1. Sign multiple transactions - console.log('1. Sign multiple transactions'); const sendWSolTest = await testDapp.getSendWSolTest(); await sendWSolTest.signTransaction(); @@ -54,7 +53,6 @@ describe('Solana Wallet Standard - Transfer WSOL', function () { assert.ok(signedTransactions[1]); // 2. Send multiple transactions - console.log('2. Send multiple transactions'); await sendWSolTest.sendTransaction(); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); diff --git a/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts b/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts index 24247f87aa21..0bb0b078c754 100644 --- a/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts +++ b/test/e2e/page-objects/pages/confirmations/snap-transaction-confirmation.ts @@ -13,6 +13,13 @@ class SnapTransactionConfirmation { text: 'Confirm', }; + private getNetworkDisplayLocator(networkName: string) { + return { + text: networkName, + tag: 'p', + }; + } + private header = { text: 'Transaction request', tag: 'h2', @@ -57,10 +64,9 @@ class SnapTransactionConfirmation { console.log( `Checking network ${networkName} is displayed on snap transaction confirmation page.`, ); - await this.driver.waitForSelector({ - text: networkName, - tag: 'p', - }); + await this.driver.waitForSelector( + this.getNetworkDisplayLocator(networkName), + ); } async checkSecurityAlertsErrorIsDisplayed(): Promise { From a56193a7e014e3b653b6cbaebf6c29b1d9d2c33a Mon Sep 17 00:00:00 2001 From: LeVinhGithub Date: Mon, 9 Mar 2026 22:16:17 +0700 Subject: [PATCH 5/6] test: clean code --- .../confirmations/snap-sign-message-confirmation.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/test/e2e/page-objects/pages/confirmations/snap-sign-message-confirmation.ts b/test/e2e/page-objects/pages/confirmations/snap-sign-message-confirmation.ts index 1afdb643cbd6..f50462645f43 100644 --- a/test/e2e/page-objects/pages/confirmations/snap-sign-message-confirmation.ts +++ b/test/e2e/page-objects/pages/confirmations/snap-sign-message-confirmation.ts @@ -31,16 +31,6 @@ class SnapSignMessageConfirmation { }); } - async checkNetworkIsDisplayed(networkName: string): Promise { - console.log( - `Checking network ${networkName} is displayed on snap sign message confirmation page.`, - ); - await this.driver.waitForSelector({ - text: networkName, - tag: 'p', - }); - } - async checkPageIsLoaded(): Promise { try { await this.driver.waitForMultipleSelectors([ From 18477bfc529bf870f37348b776d9ff368c632c4d Mon Sep 17 00:00:00 2001 From: LeVinhGithub Date: Mon, 9 Mar 2026 22:47:33 +0700 Subject: [PATCH 6/6] test: fix lint --- test/e2e/flask/solana-wallet-standard/connect.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/e2e/flask/solana-wallet-standard/connect.spec.ts b/test/e2e/flask/solana-wallet-standard/connect.spec.ts index 140c5ce9e767..69a9419bc41c 100644 --- a/test/e2e/flask/solana-wallet-standard/connect.spec.ts +++ b/test/e2e/flask/solana-wallet-standard/connect.spec.ts @@ -9,6 +9,7 @@ import { loginWithBalanceValidation } from '../../page-objects/flows/login.flow' import { addAccount } from '../../page-objects/flows/add-account.flow'; import ConnectAccountConfirmation from '../../page-objects/pages/confirmations/connect-account-confirmation'; import NetworkPermissionSelectModal from '../../page-objects/pages/dialog/network-permission-select-modal'; +import SnapTransactionConfirmation from '../../page-objects/pages/confirmations/snap-transaction-confirmation'; import { account1Short, account2Short, @@ -389,8 +390,9 @@ describe('Solana Wallet Standard - e2e tests', function () { await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); const signMsgConfirmation = new SnapSignMessageConfirmation(driver); + const txConfirmation = new SnapTransactionConfirmation(driver); await signMsgConfirmation.checkPageIsLoaded(); - await signMsgConfirmation.checkNetworkIsDisplayed('Solana Mainnet'); + await txConfirmation.checkNetworkIsDisplayed('Solana Mainnet'); }, ); });