@@ -478,3 +478,51 @@ test('should preserve selection during test run', async ({ runUITest, server },
478478 await page . waitForTimeout ( 1000 ) ;
479479 await expect ( headersPanel ) . toBeVisible ( ) ;
480480} ) ;
481+
482+ test ( 'should support keyboard navigation for resource type filters' , async ( { runUITest, server } ) => {
483+ server . setRoute ( '/api/endpoint' , ( _ , res ) => res . setHeader ( 'Content-Type' , 'application/json' ) . end ( ) ) ;
484+
485+ const { page } = await runUITest ( {
486+ 'network-tab.test.ts' : `
487+ import { test, expect } from '@playwright/test';
488+ test('network tab test', async ({ page }) => {
489+ await page.goto('${ server . PREFIX } /network-tab/network.html');
490+ await page.evaluate(() => (window as any).donePromise);
491+ });
492+ ` ,
493+ } ) ;
494+
495+ await page . getByRole ( 'treeitem' , { name : 'network tab test' } ) . dblclick ( ) ;
496+ await expect ( page . getByTestId ( 'workbench-run-status' ) ) . toContainText ( 'Passed' ) ;
497+
498+ await page . getByRole ( 'tab' , { name : 'Network' } ) . click ( ) ;
499+
500+ const filters = page . locator ( '.network-filters-resource-types' ) ;
501+
502+ // Focus the "All" tab and navigate with arrow keys.
503+ await filters . getByText ( 'All' , { exact : true } ) . focus ( ) ;
504+ await page . keyboard . press ( 'ArrowRight' ) ;
505+ await expect ( filters . getByText ( 'Fetch' , { exact : true } ) ) . toBeFocused ( ) ;
506+
507+ await page . keyboard . press ( 'ArrowRight' ) ;
508+ await expect ( filters . getByText ( 'HTML' , { exact : true } ) ) . toBeFocused ( ) ;
509+
510+ await page . keyboard . press ( 'ArrowRight' ) ;
511+ await expect ( filters . getByText ( 'JS' , { exact : true } ) ) . toBeFocused ( ) ;
512+
513+ // ArrowLeft goes back.
514+ await page . keyboard . press ( 'ArrowLeft' ) ;
515+ await expect ( filters . getByText ( 'HTML' , { exact : true } ) ) . toBeFocused ( ) ;
516+
517+ // Home jumps to first tab.
518+ await page . keyboard . press ( 'Home' ) ;
519+ await expect ( filters . getByText ( 'All' , { exact : true } ) ) . toBeFocused ( ) ;
520+
521+ // End jumps to last tab.
522+ await page . keyboard . press ( 'End' ) ;
523+ await expect ( filters . getByText ( 'WS' , { exact : true } ) ) . toBeFocused ( ) ;
524+
525+ // Wraps around from last to first.
526+ await page . keyboard . press ( 'ArrowRight' ) ;
527+ await expect ( filters . getByText ( 'All' , { exact : true } ) ) . toBeFocused ( ) ;
528+ } ) ;
0 commit comments