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