@@ -244,7 +244,7 @@ async function runOnce(electronPath, scenario, mockServer, verbose, runIndex, ru
244244 await extHostInspector . send ( 'Profiler.enable' ) ;
245245 await extHostInspector . send ( 'Profiler.start' ) ;
246246 extHostHeapBefore = await extHostInspector . send ( 'Runtime.getHeapUsage' ) ;
247- if ( verbose ) {
247+ if ( verbose && extHostHeapBefore ) {
248248 console . log ( ` [ext-host] Heap before: ${ Math . round ( extHostHeapBefore . usedSize / 1024 / 1024 ) } MB` ) ;
249249 }
250250 } catch ( err ) {
@@ -417,27 +417,32 @@ async function runOnce(electronPath, scenario, mockServer, verbose, runIndex, ru
417417 await window . locator ( actualInputSelector ) . pressSequentially ( userTurn . message , { delay : 0 } ) ;
418418 }
419419
420- // Note current response count before submitting
421- const responseCountBefore = await window . evaluate ( ( sel ) => {
422- return document . querySelectorAll ( sel ) . length ;
423- } , responseSelector ) ;
424-
425420 // Submit follow-up
426421 const utCompBefore = mockServer . completionCount ( ) ;
427422 await window . keyboard . press ( 'Enter' ) ;
428423
429424 // Wait for mock server to serve the response for this turn
430425 try { await mockServer . waitForCompletion ( utCompBefore + 1 , 60_000 ) ; } catch { }
431426
432- // Wait for a new response element to appear and settle
427+ // Wait for the new response to finish rendering.
428+ // The chat list is virtualized — old response elements are
429+ // recycled out of the DOM as new ones appear, so we cannot
430+ // rely on counting DOM elements. Instead, scroll to the
431+ // bottom and wait for no response to be in loading state.
433432 await dismissDialog ( ) ;
433+ await window . evaluate ( ( chatViewSel ) => {
434+ const input = document . querySelector ( chatViewSel + ' .interactive-input-part' ) ;
435+ if ( input ) { input . scrollIntoView ( { block : 'end' } ) ; }
436+ } , CHAT_VIEW ) ;
437+ await new Promise ( r => setTimeout ( r , 200 ) ) ;
438+
434439 await window . waitForFunction (
435- ( { sel, prevCount } ) => {
440+ ( sel ) => {
436441 const responses = document . querySelectorAll ( sel ) ;
437- if ( responses . length <= prevCount ) { return false ; }
442+ if ( responses . length === 0 ) { return false ; }
438443 return ! responses [ responses . length - 1 ] . classList . contains ( 'chat-response-loading' ) ;
439444 } ,
440- { sel : responseSelector , prevCount : responseCountBefore } ,
445+ responseSelector ,
441446 { timeout : 30_000 } ,
442447 ) ;
443448 responseCompleteTime = Date . now ( ) ;
0 commit comments