@@ -122,44 +122,59 @@ test.describe('context menu', () => {
122122 } ) ;
123123
124124 test ( 'pressing F2 should start rename for layer' , async ( { page } ) => {
125- await page
126- . getByLabel ( 'Layers' , { exact : true } )
127- . getByText ( 'Open Topo Map' )
128- . click ( ) ;
129- await page
130- . getByLabel ( 'Layers' , { exact : true } )
131- . getByText ( 'Open Topo Map' )
132- . press ( 'F2' ) ;
133- await page
134- . getByLabel ( 'Layers' , { exact : true } )
135- . getByRole ( 'textbox' )
136- . fill ( 'test name' ) ;
137- await page
138- . getByLabel ( 'Layers' , { exact : true } )
139- . getByRole ( 'textbox' )
140- . press ( 'Enter' ) ;
125+ const layersPanel = page . getByLabel ( 'Layers' , { exact : true } ) ;
126+ const layerName = 'Open Topo Map' ;
127+ const layerText = layersPanel . getByText ( layerName ) ;
128+
129+ // Find the parent layer item container (which gets the selected class)
130+ // Structure: div.jp-gis-layerItem > div.jp-gis-layerTitle > span.jp-gis-layerText
131+ const layerItem = layerText . locator (
132+ 'xpath=ancestor::div[contains(@class, "jp-gis-layerItem")]' ,
133+ ) ;
141134
142- const newText = page . getByText ( 'test name' ) ;
135+ // Select the layer
136+ await layerText . click ( ) ;
137+ await page . waitForTimeout ( 1000 ) ;
138+ await expect ( layerItem ) . toHaveClass ( / j p - m o d - s e l e c t e d / ) ;
143139
144- await expect ( newText ) . toBeVisible ( ) ;
140+ // Start rename with F2
141+ await layerText . press ( 'F2' ) ;
145142
146- // reset layer name
147- await page . locator ( '#jp-gis-layer-tree div' ) . nth ( 2 ) . click ( ) ;
148- await page . locator ( '#jp-gis-layer-tree div' ) . nth ( 2 ) . press ( 'F2' ) ;
149- await page
150- . getByLabel ( 'Layers' , { exact : true } )
151- . getByRole ( 'textbox' )
152- . fill ( 'Open Topo Map' ) ;
153- await page
154- . getByLabel ( 'Layers' , { exact : true } )
155- . getByRole ( 'textbox' )
156- . press ( 'Enter' ) ;
143+ // Wait for the textbox to appear and be focused
144+ const textbox = layersPanel . getByRole ( 'textbox' ) ;
145+ await expect ( textbox ) . toBeVisible ( ) ;
146+ await expect ( textbox ) . toBeFocused ( ) ;
157147
158- const restoredText = page
159- . getByLabel ( 'Layers' , { exact : true } )
160- . getByText ( 'Open Topo Map ') ;
148+ // Enter new name
149+ await textbox . fill ( 'test name' ) ;
150+ await textbox . press ( 'Enter ') ;
161151
162- await expect ( restoredText ) . toBeVisible ( ) ;
152+ // Wait for rename to complete and verify new name appears
153+ await expect ( layersPanel . getByText ( 'test name' ) ) . toBeVisible ( ) ;
154+ await expect ( layersPanel . getByText ( layerName ) ) . not . toBeVisible ( ) ;
155+
156+ // Reset: rename back to original name
157+ const renamedText = layersPanel . getByText ( 'test name' ) ;
158+ const renamedItem = renamedText . locator (
159+ 'xpath=ancestor::div[contains(@class, "jp-gis-layerItem")]' ,
160+ ) ;
161+ await renamedText . click ( ) ;
162+ await page . waitForTimeout ( 1000 ) ;
163+ await expect ( renamedItem ) . toHaveClass ( / j p - m o d - s e l e c t e d / ) ;
164+ await renamedText . press ( 'F2' ) ;
165+
166+ // Wait for textbox again
167+ const resetTextbox = layersPanel . getByRole ( 'textbox' ) ;
168+ await expect ( resetTextbox ) . toBeVisible ( ) ;
169+ await expect ( resetTextbox ) . toBeFocused ( ) ;
170+
171+ // Enter original name
172+ await resetTextbox . fill ( layerName ) ;
173+ await resetTextbox . press ( 'Enter' ) ;
174+
175+ // Verify original name is restored
176+ await expect ( layersPanel . getByText ( layerName ) ) . toBeVisible ( ) ;
177+ await expect ( layersPanel . getByText ( 'test name' ) ) . not . toBeVisible ( ) ;
163178 } ) ;
164179
165180 test ( 'pressing F2 should start rename for group' , async ( { page } ) => {
0 commit comments