@@ -250,6 +250,12 @@ async function testBasic(page: Page) {
250250 // verify closing trace viewer doesn't immediately auto-open it again
251251 await traceView . getByRole ( 'button' , { name : 'Close Trace Viewer' } ) . click ( )
252252 await expect ( traceView ) . toBeHidden ( )
253+
254+ // reopen the trace viewer from the report
255+ await page . getByTestId ( 'btn-report' ) . click ( )
256+ await page . getByTestId ( 'trace-open-button' ) . click ( )
257+ await expect ( traceView ) . toBeVisible ( )
258+ await expect ( traceFrame . getByRole ( 'button' , { name : 'Switch Target' } ) ) . toBeVisible ( )
253259}
254260
255261async function testViewport ( page : Page ) {
@@ -361,25 +367,28 @@ async function testAttempts(page: Page) {
361367
362368 const traceView = page . getByTestId ( 'trace-view' )
363369 const traceFrame = traceView . frameLocator ( 'iframe' )
370+ const traceSteps = traceView . getByTestId ( 'trace-step' )
364371
365372 await expect ( traceView ) . toBeVisible ( )
366-
367- const traceOpenButtons = page . getByTestId ( 'trace-open-button' )
368- await expect ( traceOpenButtons ) . toHaveText ( [
369- 'Open trace viewer' ,
370- 'Open trace viewer Retry 1' ,
371- 'Open trace viewer Retry 2' ,
373+ const attemptSelect = traceView . getByRole ( 'combobox' , { name : 'Trace attempt' } )
374+ await expect ( attemptSelect . locator ( 'option' ) ) . toHaveText ( [
375+ 'Initial run' ,
376+ 'Retry 1' ,
377+ 'Retry 2' ,
372378 ] )
373379
374- await traceOpenButtons . nth ( 0 ) . click ( )
380+ await expect ( attemptSelect ) . toHaveValue ( '0:0' )
375381 await expect ( traceFrame . getByText ( 'retryCount: 0' ) ) . toBeVisible ( )
376382 await expect ( traceFrame . getByText ( 'repeatCount: 0' ) ) . toBeVisible ( )
377383
378- await traceOpenButtons . nth ( 1 ) . click ( )
384+ // trace step is reset to first step when switching attempts
385+ await traceSteps . nth ( 1 ) . click ( )
386+ await attemptSelect . selectOption ( '0:1' )
387+ await expect ( traceSteps . nth ( 0 ) ) . toHaveAttribute ( 'aria-selected' , 'true' )
379388 await expect ( traceFrame . getByText ( 'retryCount: 1' ) ) . toBeVisible ( )
380389 await expect ( traceFrame . getByText ( 'repeatCount: 0' ) ) . toBeVisible ( )
381390
382- await traceOpenButtons . nth ( 2 ) . click ( )
391+ await attemptSelect . selectOption ( '0:2' )
383392 await expect ( traceFrame . getByText ( 'retryCount: 2' ) ) . toBeVisible ( )
384393 await expect ( traceFrame . getByText ( 'repeatCount: 0' ) ) . toBeVisible ( )
385394}
@@ -483,8 +492,8 @@ async function testPersistsAttemptInURL(page: Page) {
483492 const traceView = page . getByTestId ( 'trace-view' )
484493 const traceFrame = traceView . frameLocator ( 'iframe' )
485494
486- // Opening a retry writes its attempt key to the URL.
487- await page . getByTestId ( 'trace-open-button' ) . nth ( 1 ) . click ( )
495+ // Selecting a retry writes its attempt key to the URL.
496+ await traceView . getByRole ( 'combobox' , { name : 'Trace attempt' } ) . selectOption ( '0:1' )
488497 await expect . poll ( ( ) => getHashParams ( page ) ) . toMatchObject ( {
489498 traceAttempt : '0:1' ,
490499 traceStep : '0' ,
@@ -499,6 +508,7 @@ async function testPersistsAttemptInURL(page: Page) {
499508 traceStep : '0' ,
500509 test : testId ,
501510 } )
511+ await expect ( traceView . getByRole ( 'combobox' , { name : 'Trace attempt' } ) ) . toHaveValue ( '0:1' )
502512 await expect ( traceFrame . getByText ( 'retryCount: 1' ) ) . toBeVisible ( )
503513}
504514
0 commit comments