1- import type { Locator } from "@playwright/test" ;
1+ import type { Locator , Page } from "@playwright/test" ;
22
33import { expect , test } from "../fixtures" ;
44import { openToolbarSettings } from "../pages/extension" ;
@@ -19,6 +19,17 @@ async function ensureVotePressedOn(locator: Locator): Promise<void> {
1919 await expect ( locator ) . toHaveAttribute ( "aria-pressed" , "true" ) ;
2020}
2121
22+ async function openToolbarSettingsUntilVisible ( page : Page , target : Locator ) : Promise < void > {
23+ for ( let i = 0 ; i < 2 ; i ++ ) {
24+ await openToolbarSettings ( page ) ;
25+ const visible = await target . isVisible ( { timeout : 1000 } ) . catch ( ( ) => false ) ;
26+ if ( visible ) {
27+ return ;
28+ }
29+ }
30+ await expect ( target ) . toBeVisible ( ) ;
31+ }
32+
2233test . describe ( "Toolbar settings menu" , ( ) => {
2334 test ( "feature voting and behaviour toggles are visible and interactive" , async ( {
2435 context,
@@ -31,11 +42,10 @@ test.describe("Toolbar settings menu", () => {
3142 await openStableTestPage ( page ) ;
3243 await expect ( getExtensionRoot ( page ) ) . toHaveCount ( 1 ) ;
3344 await expectSvelteAppLoaded ( page ) ;
34-
35- await openToolbarSettings ( page ) ;
45+ const settingsMenu = page . getByRole ( "menu" ) . first ( ) ;
3646
3747 const featureVoting = page . getByRole ( "group" , { name : "Feature Voting" } ) . first ( ) ;
38- await expect ( featureVoting ) . toBeVisible ( ) ;
48+ await openToolbarSettingsUntilVisible ( page , featureVoting ) ;
3949
4050 const animationDebuggerVote = page
4151 . getByRole ( "button" , { name : "Animation Debugger" } )
@@ -55,21 +65,21 @@ test.describe("Toolbar settings menu", () => {
5565
5666 const autoHideBefore = await toolbarAutoHideItem . getAttribute ( "aria-checked" ) ;
5767 await toolbarAutoHideItem . click ( ) ;
68+ const autoHideAfter = await toolbarAutoHideItem . getAttribute ( "aria-checked" ) ;
69+ expect ( autoHideAfter ) . not . toBe ( autoHideBefore ) ;
5870
5971 const viewport = page . viewportSize ( ) ;
6072 expect ( viewport ) . toBeTruthy ( ) ;
6173 if ( ! viewport ) throw new Error ( "viewport not available" ) ;
62-
6374 await page . mouse . move ( viewport . width / 2 , viewport . height - 1 ) ;
64- await openToolbarSettings ( page ) ;
75+ await openToolbarSettingsUntilVisible ( page , settingsMenu ) ;
6576
66- const toolbarAutoHideItemAfter = page
77+ const toolbarAutoHideItemAfter = settingsMenu
6778 . getByRole ( "menuitemcheckbox" , { name : / A u t o - H i d e / i } )
6879 . first ( ) ;
6980 await expect ( toolbarAutoHideItemAfter ) . toBeVisible ( ) ;
70-
71- const autoHideAfter = await toolbarAutoHideItemAfter . getAttribute ( "aria-checked" ) ;
72- expect ( autoHideAfter ) . not . toBe ( autoHideBefore ) ;
81+ const autoHideAfterReopen = await toolbarAutoHideItemAfter . getAttribute ( "aria-checked" ) ;
82+ expect ( autoHideAfterReopen ) . toBe ( autoHideAfter ) ;
7383 } ) ;
7484
7585 test ( "Feature Voting upvotes can both be on and do not cross-toggle" , async ( {
@@ -84,10 +94,8 @@ test.describe("Toolbar settings menu", () => {
8494 await expect ( getExtensionRoot ( page ) ) . toHaveCount ( 1 ) ;
8595 await expectSvelteAppLoaded ( page ) ;
8696
87- await openToolbarSettings ( page ) ;
88-
8997 const featureVoting = page . getByRole ( "group" , { name : "Feature Voting" } ) . first ( ) ;
90- await expect ( featureVoting ) . toBeVisible ( ) ;
98+ await openToolbarSettingsUntilVisible ( page , featureVoting ) ;
9199
92100 const voteA = featureVoting . getByRole ( "button" , {
93101 name : "Animation Debugger" ,
0 commit comments