@@ -62,6 +62,15 @@ test.beforeAll(async function recordTrace({ browser, browserName, browserType, s
6262 }
6363 await doClick ( ) ;
6464
65+ await context . tracing . group ( 'High-level Group' ) ;
66+ await context . tracing . group ( 'First Mid-level Group' , { location : { file : `${ __dirname } /tracing.spec.ts` , line : 100 , column : 10 } } ) ;
67+ await page . locator ( 'button >> nth=0' ) . click ( ) ;
68+ await context . tracing . groupEnd ( ) ;
69+ await context . tracing . group ( 'Second Mid-level Group' , { location : { file : __filename } } ) ;
70+ await expect ( page . getByText ( 'Click' ) ) . toBeVisible ( ) ;
71+ await context . tracing . groupEnd ( ) ;
72+ await context . tracing . groupEnd ( ) ;
73+
6574 await Promise . all ( [
6675 page . waitForNavigation ( ) ,
6776 page . waitForResponse ( server . PREFIX + '/frames/frame.html' ) ,
@@ -102,6 +111,67 @@ test('should open trace viewer on specific host', async ({ showTraceViewer }, te
102111 await expect ( traceViewer . page ) . toHaveURL ( / 1 2 7 .0 .0 .1 / ) ;
103112} ) ;
104113
114+ test ( 'should show groups as tree in trace viewer' , async ( { showTraceViewer } ) => {
115+ const traceViewer = await showTraceViewer ( [ traceFile ] ) ;
116+ await expect ( traceViewer . actionTitles ) . toHaveText ( [
117+ / b r o w s e r C o n t e x t .n e w P a g e / ,
118+ / p a g e .g o t o d a t a : t e x t \/ h t m l , < ! D O C T Y P E h t m l > < h t m l > H e l l o w o r l d < \/ h t m l > / ,
119+ / p a g e .s e t C o n t e n t / ,
120+ / e x p e c t .t o H a v e T e x t l o c a t o r \( ' b u t t o n ' \) / ,
121+ / e x p e c t .t o B e H i d d e n g e t B y T e s t I d \( ' a m a z i n g - b t n ' \) / ,
122+ / e x p e c t .t o B e H i d d e n g e t B y T e s t I d \( \/ a m a z i n g - b t n - r e g e x \/ \) / ,
123+ / p a g e .e v a l u a t e / ,
124+ / p a g e .e v a l u a t e / ,
125+ / l o c a t o r .c l i c k g e t B y T e x t \( ' C l i c k ' \) / ,
126+ / H i g h - l e v e l G r o u p / ,
127+ / p a g e .w a i t F o r N a v i g a t i o n / ,
128+ / p a g e .w a i t F o r R e s p o n s e / ,
129+ / p a g e .w a i t F o r T i m e o u t / ,
130+ / p a g e .g o t o h t t p : \/ \/ l o c a l h o s t : \d + \/ f r a m e s \/ f r a m e .h t m l / ,
131+ / p a g e .s e t V i e w p o r t S i z e / ,
132+ ] ) ;
133+ await traceViewer . actionsTree . locator ( '.list-view-entry:has-text("High-level Group") .codicon-chevron-right' ) . click ( ) ;
134+ await traceViewer . actionsTree . locator ( '.list-view-entry:has-text("First Mid-level Group") .codicon-chevron-right' ) . click ( ) ;
135+ await traceViewer . actionsTree . locator ( '.list-view-entry:has-text("Second Mid-level Group") .codicon-chevron-right' ) . click ( ) ;
136+ await expect ( traceViewer . actionTitles ) . toHaveText ( [
137+ / b r o w s e r C o n t e x t .n e w P a g e / ,
138+ / p a g e .g o t o d a t a : t e x t \/ h t m l , < ! D O C T Y P E h t m l > < h t m l > H e l l o w o r l d < \/ h t m l > / ,
139+ / p a g e .s e t C o n t e n t / ,
140+ / e x p e c t .t o H a v e T e x t l o c a t o r \( ' b u t t o n ' \) / ,
141+ / e x p e c t .t o B e H i d d e n g e t B y T e s t I d \( ' a m a z i n g - b t n ' \) / ,
142+ / e x p e c t .t o B e H i d d e n g e t B y T e s t I d \( \/ a m a z i n g - b t n - r e g e x \/ \) / ,
143+ / p a g e .e v a l u a t e / ,
144+ / p a g e .e v a l u a t e / ,
145+ / l o c a t o r .c l i c k g e t B y T e x t \( ' C l i c k ' \) / ,
146+ / H i g h - l e v e l G r o u p / ,
147+ / F i r s t M i d - l e v e l G r o u p / ,
148+ / l o c a t o r \. c l i c k l o c a t o r \( ' b u t t o n ' \) \. f i r s t \( \) / ,
149+ / S e c o n d M i d - l e v e l G r o u p / ,
150+ / e x p e c t \. t o B e V i s i b l e g e t B y T e x t \( ' C l i c k ' \) / ,
151+ / p a g e .w a i t F o r N a v i g a t i o n / ,
152+ / p a g e .w a i t F o r R e s p o n s e / ,
153+ / p a g e .w a i t F o r T i m e o u t / ,
154+ / p a g e .g o t o h t t p : \/ \/ l o c a l h o s t : \d + \/ f r a m e s \/ f r a m e .h t m l / ,
155+ / p a g e .s e t V i e w p o r t S i z e / ,
156+ ] ) ;
157+ await expect ( traceViewer . actionsTree . locator ( '.list-view-entry:has-text("First Mid-level Group") > .list-view-indent' ) ) . toHaveCount ( 1 ) ;
158+ await expect ( traceViewer . actionsTree . locator ( '.list-view-entry:has-text("Second Mid-level Group") > .list-view-indent' ) ) . toHaveCount ( 1 ) ;
159+ await expect ( traceViewer . actionsTree . locator ( '.list-view-entry:has-text("locator.clicklocator(\'button\').first()") > .list-view-indent' ) ) . toHaveCount ( 2 ) ;
160+ await expect ( traceViewer . actionsTree . locator ( '.list-view-entry:has-text("expect.toBeVisiblegetByText(\'Click\')") > .list-view-indent' ) ) . toHaveCount ( 2 ) ;
161+
162+ await traceViewer . showSourceTab ( ) ;
163+ await traceViewer . selectAction ( 'High-level Group' ) ;
164+ await expect ( traceViewer . sourceCodeTab . locator ( '.source-tab-file-name' ) ) . toHaveAttribute ( 'title' , __filename ) ;
165+ await expect ( traceViewer . sourceCodeTab . locator ( '.source-line-running' ) ) . toHaveText ( / \d + \s + a w a i t c o n t e x t .t r a c i n g .g r o u p \( ' H i g h - l e v e l G r o u p ' \) ; / ) ;
166+
167+ await traceViewer . selectAction ( 'First Mid-level Group' ) ;
168+ await expect ( traceViewer . sourceCodeTab . locator ( '.source-tab-file-name' ) ) . toHaveAttribute ( 'title' , `${ __dirname } /tracing.spec.ts` ) ;
169+
170+ await traceViewer . selectAction ( 'Second Mid-level Group' ) ;
171+ await expect ( traceViewer . sourceCodeTab . getByText ( / L i c e n s e d u n d e r t h e A p a c h e L i c e n s e / ) ) . toBeVisible ( ) ;
172+ } ) ;
173+
174+
105175test ( 'should open simple trace viewer' , async ( { showTraceViewer } ) => {
106176 const traceViewer = await showTraceViewer ( [ traceFile ] ) ;
107177 await expect ( traceViewer . actionTitles ) . toHaveText ( [
@@ -114,6 +184,7 @@ test('should open simple trace viewer', async ({ showTraceViewer }) => {
114184 / p a g e .e v a l u a t e / ,
115185 / p a g e .e v a l u a t e / ,
116186 / l o c a t o r .c l i c k g e t B y T e x t \( ' C l i c k ' \) / ,
187+ / H i g h - l e v e l G r o u p / ,
117188 / p a g e .w a i t F o r N a v i g a t i o n / ,
118189 / p a g e .w a i t F o r R e s p o n s e / ,
119190 / p a g e .w a i t F o r T i m e o u t / ,
0 commit comments