11import path from 'node:path' ;
22import { defineWalletSetup } from '@synthetixio/synpress' ;
3- import { getExtensionId , MetaMask } from '@synthetixio/synpress/playwright' ;
3+ import { getExtensionId } from '@synthetixio/synpress/playwright' ;
44import dotenv from 'dotenv' ;
55
66dotenv . config ( { path : path . resolve ( 'e2e/.env' ) } ) ;
@@ -14,14 +14,65 @@ if (!SEED_PHRASE || !PASSWORD) {
1414 ) ;
1515}
1616
17+ /**
18+ * Fill the MetaMask 13.x SRP input via per-word fields.
19+ *
20+ * MM 13.x `SrpInputImport` starts as a single `<Textarea>` and transitions
21+ * to individual `<TextField>` inputs after the first word + Space. Synpress's
22+ * `.type(phrase)` races with the React DOM swap on CI/xvfb, leaving the
23+ * Continue button disabled.
24+ *
25+ * Approach: type the first word into the textarea, press Space to switch to
26+ * per-word mode, then `.fill()` each remaining word — exactly how MetaMask's
27+ * own Playwright tests handle it.
28+ */
29+ async function fillSrpPerWord (
30+ page : import ( '@playwright/test' ) . Page ,
31+ seedPhrase : string ,
32+ ) {
33+ const words = seedPhrase . split ( ' ' ) ;
34+
35+ const textarea = page . getByTestId ( 'srp-input-import__srp-note' ) ;
36+ await textarea . fill ( words [ 0 ] ) ;
37+ await textarea . press ( 'Space' ) ;
38+
39+ for ( let i = 1 ; i < words . length ; i ++ ) {
40+ const field = page . getByTestId ( `import-srp__srp-word-${ i } ` ) ;
41+ await field . fill ( words [ i ] ) ;
42+ if ( i < words . length - 1 ) {
43+ await field . press ( 'Space' ) ;
44+ }
45+ }
46+ }
47+
1748const walletSetup = defineWalletSetup ( PASSWORD , async ( context , walletPage ) => {
1849 const extensionId = await getExtensionId ( context , 'MetaMask' ) ;
19- const metamask = new MetaMask ( context , walletPage , PASSWORD , extensionId ) ;
50+ const homeUrl = `chrome-extension://${ extensionId } /home.html` ;
51+
52+ await walletPage
53+ . locator ( '[data-testid="onboarding-import-wallet"]' )
54+ . click ( ) ;
55+ await walletPage . getByTestId ( 'onboarding-import-with-srp-button' ) . click ( ) ;
2056
21- await metamask . importWallet ( SEED_PHRASE ) ;
57+ await fillSrpPerWord ( walletPage , SEED_PHRASE ) ;
2258
23- const homeUrl = `chrome-extension://${ extensionId } /home.html` ;
59+ await walletPage . getByTestId ( 'import-srp-confirm' ) . click ( ) ;
60+
61+ // Create password.
62+ await walletPage
63+ . locator ( '[data-testid="create-password-new-input"]' )
64+ . fill ( PASSWORD ) ;
65+ await walletPage
66+ . locator ( '[data-testid="create-password-confirm-input"]' )
67+ . fill ( PASSWORD ) ;
68+ await walletPage . locator ( '[data-testid="create-password-terms"]' ) . click ( ) ;
69+ await walletPage . locator ( '[data-testid="create-password-submit"]' ) . click ( ) ;
70+
71+ // Analytics opt-out.
72+ await walletPage . locator ( '#metametrics-opt-in' ) . click ( ) ;
73+ await walletPage . locator ( '[data-testid="metametrics-i-agree"]' ) . click ( ) ;
2474
75+ // Post-import: navigate home, unlock if needed, complete onboarding.
2576 await walletPage . goto ( homeUrl ) ;
2677 await walletPage . waitForTimeout ( 2000 ) ;
2778
0 commit comments