After login, #navBar loses d-none from the /auth "complete"
callback, which can fire before Bootstrap has finished the async
fade-out of #connectDialog. The lingering .show then intercepts the
immediate nav click, exhausting the 30s budget on WebKit under CI
load. Wait for the dialog to be fully hidden before interacting with
the nav, mirroring the explicit-wait pattern from
735609c1.
// Login as read-only
await login(page2, readOnlyPassword);
await page2.waitForSelector("#navBar:not(.d-none)");
+ // Bootstrap dismisses #connectDialog asynchronously (fade transition).
+ // navBar loses d-none from the /auth "complete" callback, which can fire
+ // before the modal finishes closing — the lingering .show then intercepts
+ // nav clicks (seen on WebKit under CI load).
+ await expect(page2.locator("#connectDialog")).toBeHidden({timeout: 10000});
// Go to Scan in RO
await gotoTabLocal("scan");
);
await page2.locator("#connectButton").click();
await page2.waitForSelector("#navBar:not(.d-none)");
+ await expect(page2.locator("#connectDialog")).toBeHidden({timeout: 10000});
await p;
// Expect classifiers to be populated