@@ -58,24 +58,41 @@ module.exports = {
5858 return activeTabName ;
5959 } ,
6060 async metamaskExtensionId ( ) {
61- const extensionsData = await module . exports . getExtensionsData ( ) ;
61+ log ( '[metamaskExtensionId] Starting to get MetaMask extension ID...' ) ;
6262
63- const metamaskExtensionData = extensionsData . metamask ;
64- if ( ! metamaskExtensionData ) {
65- // 尝试查找包含 "metamask" 的扩展
66- const metamaskKey = Object . keys ( extensionsData ) . find ( key =>
67- key . toLowerCase ( ) . includes ( 'metamask' )
68- ) ;
63+ try {
64+ const extensionsData = await module . exports . getExtensionsData ( ) ;
65+ log ( `[metamaskExtensionId] Extensions data keys: ${ Object . keys ( extensionsData ) . join ( ', ' ) } ` ) ;
6966
70- if ( metamaskKey ) {
71- console . log ( `Found MetaMask with key: "${ metamaskKey } "` ) ;
72- return extensionsData [ metamaskKey ] . id ;
67+ const metamaskExtensionData = extensionsData . metamask ;
68+ if ( ! metamaskExtensionData ) {
69+ log ( '[metamaskExtensionId] MetaMask not found with exact key "metamask", searching for similar keys...' ) ;
70+
71+ // 尝试查找包含 "metamask" 的扩展
72+ const metamaskKey = Object . keys ( extensionsData ) . find ( key =>
73+ key . toLowerCase ( ) . includes ( 'metamask' )
74+ ) ;
75+
76+ if ( metamaskKey ) {
77+ log ( `[metamaskExtensionId] Found MetaMask with key: "${ metamaskKey } "` ) ;
78+ const extensionId = extensionsData [ metamaskKey ] . id ;
79+ log ( `[metamaskExtensionId] MetaMask extension ID: ${ extensionId } ` ) ;
80+ return extensionId ;
81+ }
82+
83+ const availableExtensions = Object . keys ( extensionsData ) . map ( key => `"${ key } "` ) . join ( ', ' ) ;
84+ log ( `[metamaskExtensionId] ERROR: MetaMask extension not found. Available extensions: ${ availableExtensions } ` ) ;
85+ throw new Error ( `MetaMask extension not found in extensions list. Available extensions: ${ availableExtensions } ` ) ;
7386 }
7487
75- throw new Error ( `MetaMask extension not found in extensions list. Available extensions: ${ Object . keys ( extensionsData ) . map ( key => `"${ key } "` ) . join ( ', ' ) } ` ) ;
88+ const extensionId = metamaskExtensionData . id ;
89+ log ( `[metamaskExtensionId] MetaMask extension ID: ${ extensionId } ` ) ;
90+ return extensionId ;
91+ } catch ( error ) {
92+ log ( `[metamaskExtensionId] ERROR: ${ error . message } ` ) ;
93+ log ( `[metamaskExtensionId] ERROR stack: ${ error . stack } ` ) ;
94+ throw error ;
7695 }
77-
78- return metamaskExtensionData . id ;
7996 } ,
8097 async setExpectInstance ( expect ) {
8198 expectInstance = expect ;
@@ -116,35 +133,86 @@ module.exports = {
116133 return true ;
117134 } ,
118135 async assignWindows ( ) {
119- const metamaskExtensionId = await module . exports . metamaskExtensionId ( ) ;
136+ log ( '[assignWindows] Starting window assignment...' ) ;
137+
138+ try {
139+ const metamaskExtensionId = await module . exports . metamaskExtensionId ( ) ;
140+ log ( `[assignWindows] MetaMask Extension ID: ${ metamaskExtensionId } ` ) ;
120141
121- let pages = await browser . contexts ( ) [ 0 ] . pages ( ) ;
122- for ( const page of pages ) {
123- if ( page . url ( ) . includes ( 'specs/runner' ) ) {
124- mainWindow = page ;
125- } else if (
126- page
127- . url ( )
128- . includes ( `chrome-extension://${ metamaskExtensionId } /home.html` )
129- ) {
130- metamaskWindow = page ;
131- } else if (
132- page
133- . url ( )
134- . includes (
135- `chrome-extension://${ metamaskExtensionId } /notification.html` ,
136- )
137- ) {
138- metamaskNotificationWindow = page ;
139- } else if (
140- page
141- . url ( )
142- . includes ( `chrome-extension://${ metamaskExtensionId } /popup.html` )
143- ) {
144- metamaskPopupWindow = page ;
142+ if ( ! browser || ! browser . contexts ( ) || browser . contexts ( ) . length === 0 ) {
143+ log ( '[assignWindows] ERROR: Browser or contexts not available' ) ;
144+ throw new Error ( 'Browser or contexts not available' ) ;
145+ }
146+
147+ let pages = await browser . contexts ( ) [ 0 ] . pages ( ) ;
148+ log ( `[assignWindows] Found ${ pages . length } pages in browser context` ) ;
149+
150+ // Log all page URLs for debugging
151+ for ( let i = 0 ; i < pages . length ; i ++ ) {
152+ try {
153+ const url = pages [ i ] . url ( ) ;
154+ log ( `[assignWindows] Page ${ i } : ${ url } ` ) ;
155+ } catch ( error ) {
156+ log ( `[assignWindows] Page ${ i } : Error getting URL - ${ error . message } ` ) ;
157+ }
158+ }
159+
160+ let mainWindowAssigned = false ;
161+ let metamaskWindowAssigned = false ;
162+ let metamaskNotificationWindowAssigned = false ;
163+ let metamaskPopupWindowAssigned = false ;
164+
165+ for ( const page of pages ) {
166+ try {
167+ const pageUrl = page . url ( ) ;
168+
169+ if ( pageUrl . includes ( 'specs/runner' ) ) {
170+ mainWindow = page ;
171+ mainWindowAssigned = true ;
172+ log ( `[assignWindows] Main window assigned: ${ pageUrl } ` ) ;
173+ } else if (
174+ pageUrl . includes ( `chrome-extension://${ metamaskExtensionId } /home.html` )
175+ ) {
176+ metamaskWindow = page ;
177+ metamaskWindowAssigned = true ;
178+ log ( `[assignWindows] MetaMask window assigned: ${ pageUrl } ` ) ;
179+ } else if (
180+ pageUrl . includes (
181+ `chrome-extension://${ metamaskExtensionId } /notification.html` ,
182+ )
183+ ) {
184+ metamaskNotificationWindow = page ;
185+ metamaskNotificationWindowAssigned = true ;
186+ log ( `[assignWindows] MetaMask notification window assigned: ${ pageUrl } ` ) ;
187+ } else if (
188+ pageUrl . includes ( `chrome-extension://${ metamaskExtensionId } /popup.html` )
189+ ) {
190+ metamaskPopupWindow = page ;
191+ metamaskPopupWindowAssigned = true ;
192+ log ( `[assignWindows] MetaMask popup window assigned: ${ pageUrl } ` ) ;
193+ }
194+ } catch ( error ) {
195+ log ( `[assignWindows] Error processing page: ${ error . message } ` ) ;
196+ }
197+ }
198+
199+ // Log assignment results
200+ log ( `[assignWindows] Assignment results:` ) ;
201+ log ( `[assignWindows] - Main window: ${ mainWindowAssigned ? 'ASSIGNED' : 'NOT ASSIGNED' } ` ) ;
202+ log ( `[assignWindows] - MetaMask window: ${ metamaskWindowAssigned ? 'ASSIGNED' : 'NOT ASSIGNED' } ` ) ;
203+ log ( `[assignWindows] - MetaMask notification window: ${ metamaskNotificationWindowAssigned ? 'ASSIGNED' : 'NOT ASSIGNED' } ` ) ;
204+ log ( `[assignWindows] - MetaMask popup window: ${ metamaskPopupWindowAssigned ? 'ASSIGNED' : 'NOT ASSIGNED' } ` ) ;
205+
206+ if ( ! metamaskWindowAssigned ) {
207+ log ( `[assignWindows] WARNING: MetaMask window not found! Looking for: chrome-extension://${ metamaskExtensionId } /home.html` ) ;
145208 }
209+
210+ return true ;
211+ } catch ( error ) {
212+ log ( `[assignWindows] ERROR: ${ error . message } ` ) ;
213+ log ( `[assignWindows] ERROR stack: ${ error . stack } ` ) ;
214+ throw error ;
146215 }
147- return true ;
148216 } ,
149217 async assignActiveTabName ( tabName ) {
150218 activeTabName = tabName ;
@@ -429,16 +497,41 @@ module.exports = {
429497 } ,
430498 // workaround for metamask random blank page on first run
431499 async fixBlankPage ( page = metamaskWindow ) {
432- await page . waitForTimeout ( 1000 ) ;
433- for ( let times = 0 ; times < 5 ; times ++ ) {
434- if (
435- ( await page . locator ( onboardingWelcomePageElements . app ) . count ( ) ) === 0
436- ) {
437- await page . reload ( ) ;
438- await module . exports . waitUntilMetamaskWindowIsStable ( ) ;
439- } else {
440- break ;
500+ log ( '[fixBlankPage] Starting fixBlankPage...' ) ;
501+ log ( `[fixBlankPage] Page parameter: ${ page ? 'PROVIDED' : 'UNDEFINED' } ` ) ;
502+ log ( `[fixBlankPage] metamaskWindow: ${ metamaskWindow ? 'AVAILABLE' : 'UNDEFINED' } ` ) ;
503+
504+ if ( ! page ) {
505+ log ( '[fixBlankPage] ERROR: Page is undefined! Cannot proceed.' ) ;
506+ throw new Error ( '[fixBlankPage] Page is undefined - metamaskWindow was not properly assigned' ) ;
507+ }
508+
509+ try {
510+ log ( `[fixBlankPage] Page URL: ${ page . url ( ) } ` ) ;
511+ log ( '[fixBlankPage] Waiting 1 second...' ) ;
512+ await page . waitForTimeout ( 1000 ) ;
513+
514+ for ( let times = 0 ; times < 5 ; times ++ ) {
515+ log ( `[fixBlankPage] Attempt ${ times + 1 } /5: Checking for onboarding app...` ) ;
516+
517+ const appCount = await page . locator ( onboardingWelcomePageElements . app ) . count ( ) ;
518+ log ( `[fixBlankPage] Onboarding app count: ${ appCount } ` ) ;
519+
520+ if ( appCount === 0 ) {
521+ log ( `[fixBlankPage] Blank page detected, reloading...` ) ;
522+ await page . reload ( ) ;
523+ await module . exports . waitUntilMetamaskWindowIsStable ( ) ;
524+ } else {
525+ log ( `[fixBlankPage] Page is not blank, continuing...` ) ;
526+ break ;
527+ }
441528 }
529+
530+ log ( '[fixBlankPage] fixBlankPage completed successfully' ) ;
531+ } catch ( error ) {
532+ log ( `[fixBlankPage] ERROR: ${ error . message } ` ) ;
533+ log ( `[fixBlankPage] ERROR stack: ${ error . stack } ` ) ;
534+ throw error ;
442535 }
443536 } ,
444537 async fixCriticalError ( page = metamaskWindow ) {
0 commit comments