@@ -140,12 +140,6 @@ describe("PDF Thumbnail View", () => {
140140 await closePages ( pages ) ;
141141 } ) ;
142142
143- async function isElementFocused ( page , selector ) {
144- await page . waitForSelector ( selector , { visible : true } ) ;
145-
146- return page . $eval ( selector , el => el === document . activeElement ) ;
147- }
148-
149143 it ( "should navigate with the keyboard" , async ( ) => {
150144 await Promise . all (
151145 pages . map ( async ( [ browserName , page ] ) => {
@@ -156,57 +150,40 @@ describe("PDF Thumbnail View", () => {
156150 await waitForThumbnailVisible ( page , 3 ) ;
157151
158152 await kbFocusNext ( page ) ;
159- expect ( await isElementFocused ( page , "#viewsManagerSelectorButton" ) )
160- . withContext ( `In ${ browserName } ` )
161- . toBe ( true ) ;
153+ await page . waitForSelector ( "#viewsManagerSelectorButton:focus" , {
154+ visible : true ,
155+ } ) ;
162156
163157 await kbFocusNext ( page ) ;
164- expect (
165- await isElementFocused ( page , "#viewsManagerStatusActionButton" )
166- )
167- . withContext ( `In ${ browserName } ` )
168- . toBe ( true ) ;
158+ await page . waitForSelector ( "#viewsManagerStatusActionButton:focus" , {
159+ visible : true ,
160+ } ) ;
169161
170162 await kbFocusNext ( page ) ;
171- expect (
172- await isElementFocused (
173- page ,
174- `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":1}']`
175- )
176- )
177- . withContext ( `In ${ browserName } ` )
178- . toBe ( true ) ;
163+ await page . waitForSelector (
164+ `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":1}']:focus` ,
165+ { visible : true }
166+ ) ;
179167
180168 await page . keyboard . press ( "ArrowDown" ) ;
181- expect (
182- await isElementFocused (
183- page ,
184- `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":2}']`
185- )
186- )
187- . withContext ( `In ${ browserName } ` )
188- . toBe ( true ) ;
169+ await page . waitForSelector (
170+ `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":2}']:focus` ,
171+ { visible : true }
172+ ) ;
189173
190174 await page . keyboard . press ( "ArrowUp" ) ;
191- expect (
192- await isElementFocused (
193- page ,
194- `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":1}']`
195- )
196- )
197- . withContext ( `In ${ browserName } ` )
198- . toBe ( true ) ;
175+ await page . waitForSelector (
176+ `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":1}']:focus` ,
177+ { visible : true }
178+ ) ;
199179
200180 await page . keyboard . press ( "ArrowDown" ) ;
201181 await page . keyboard . press ( "ArrowDown" ) ;
202- expect (
203- await isElementFocused (
204- page ,
205- `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":3}']`
206- )
207- )
208- . withContext ( `In ${ browserName } ` )
209- . toBe ( true ) ;
182+ await page . waitForSelector (
183+ `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":3}']:focus` ,
184+ { visible : true }
185+ ) ;
186+
210187 await page . keyboard . press ( "Enter" ) ;
211188 const currentPage = await page . $eval (
212189 "#pageNumber" ,
@@ -215,24 +192,16 @@ describe("PDF Thumbnail View", () => {
215192 expect ( currentPage ) . withContext ( `In ${ browserName } ` ) . toBe ( 3 ) ;
216193
217194 await page . keyboard . press ( "End" ) ;
218- expect (
219- await isElementFocused (
220- page ,
221- `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":14}']`
222- )
223- )
224- . withContext ( `In ${ browserName } ` )
225- . toBe ( true ) ;
195+ await page . waitForSelector (
196+ `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":14}']:focus` ,
197+ { visible : true }
198+ ) ;
226199
227200 await page . keyboard . press ( "Home" ) ;
228- expect (
229- await isElementFocused (
230- page ,
231- `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":1}']`
232- )
233- )
234- . withContext ( `In ${ browserName } ` )
235- . toBe ( true ) ;
201+ await page . waitForSelector (
202+ `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":1}']:focus` ,
203+ { visible : true }
204+ ) ;
236205 } )
237206 ) ;
238207 } ) ;
@@ -443,4 +412,87 @@ describe("PDF Thumbnail View", () => {
443412 ) ;
444413 } ) ;
445414 } ) ;
415+
416+ describe ( "Checkbox keyboard navigation" , ( ) => {
417+ let pages ;
418+
419+ beforeEach ( async ( ) => {
420+ pages = await loadAndWait (
421+ "tracemonkey.pdf" ,
422+ "#viewsManagerToggleButton" ,
423+ null ,
424+ null ,
425+ { enableSplitMerge : true }
426+ ) ;
427+ } ) ;
428+
429+ afterEach ( async ( ) => {
430+ await closePages ( pages ) ;
431+ } ) ;
432+
433+ it ( "should focus checkboxes with Tab key" , async ( ) => {
434+ await Promise . all (
435+ pages . map ( async ( [ browserName , page ] ) => {
436+ await page . click ( "#viewsManagerToggleButton" ) ;
437+
438+ await waitForThumbnailVisible ( page , 1 ) ;
439+
440+ // Focus the first thumbnail button
441+ await kbFocusNext ( page ) ;
442+ await kbFocusNext ( page ) ;
443+ await kbFocusNext ( page ) ;
444+
445+ // Verify we're on the first thumbnail
446+ await page . waitForSelector (
447+ `#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":1}']:focus` ,
448+ { visible : true }
449+ ) ;
450+
451+ // Tab to checkbox
452+ await kbFocusNext ( page ) ;
453+ await page . waitForSelector (
454+ `.thumbnail[page-number="1"] input[type="checkbox"]:focus` ,
455+ { visible : true }
456+ ) ;
457+ } )
458+ ) ;
459+ } ) ;
460+
461+ it ( "should navigate checkboxes with arrow keys" , async ( ) => {
462+ await Promise . all (
463+ pages . map ( async ( [ browserName , page ] ) => {
464+ await page . click ( "#viewsManagerToggleButton" ) ;
465+
466+ await waitForThumbnailVisible ( page , 1 ) ;
467+ await waitForThumbnailVisible ( page , 2 ) ;
468+
469+ // Navigate to first checkbox
470+ await kbFocusNext ( page ) ;
471+ await kbFocusNext ( page ) ;
472+ await kbFocusNext ( page ) ;
473+ await kbFocusNext ( page ) ;
474+
475+ // Verify first checkbox is focused
476+ await page . waitForSelector (
477+ `.thumbnail[page-number="1"] input[type="checkbox"]:focus` ,
478+ { visible : true }
479+ ) ;
480+
481+ // Navigate to next checkbox with ArrowDown
482+ await page . keyboard . press ( "ArrowDown" ) ;
483+ await page . waitForSelector (
484+ `.thumbnail[page-number="2"] input[type="checkbox"]:focus` ,
485+ { visible : true }
486+ ) ;
487+
488+ // Navigate back with ArrowUp
489+ await page . keyboard . press ( "ArrowUp" ) ;
490+ await page . waitForSelector (
491+ `.thumbnail[page-number="1"] input[type="checkbox"]:focus` ,
492+ { visible : true }
493+ ) ;
494+ } )
495+ ) ;
496+ } ) ;
497+ } ) ;
446498} ) ;
0 commit comments