diff --git a/packages/app/e2e/fixtures.ts b/packages/app/e2e/fixtures.ts index 77a609c45d..7b1941319e 100644 --- a/packages/app/e2e/fixtures.ts +++ b/packages/app/e2e/fixtures.ts @@ -88,6 +88,21 @@ function clean(value: string | null) { return (value ?? "").replace(/\u200B/g, "").trim() } +async function visit(page: Page, url: string) { + let err: unknown + for (const _ of [0, 1, 2]) { + try { + await page.goto(url) + return + } catch (cause) { + err = cause + if (!String(cause).includes("ERR_CONNECTION_REFUSED")) throw cause + await new Promise((resolve) => setTimeout(resolve, 300)) + } + } + throw err +} + async function promptSend(page: Page) { return page .evaluate(() => { @@ -279,7 +294,7 @@ export const test = base.extend({ await seedStorage(page, { directory }) const gotoSession = async (sessionID?: string) => { - await page.goto(sessionPath(directory, sessionID)) + await visit(page, sessionPath(directory, sessionID)) await waitSession(page, { directory, sessionID }) } await use(gotoSession) @@ -349,7 +364,7 @@ function makeProject( const gotoSession = async (sessionID?: string) => { const cur = need() - await page.goto(sessionPath(cur.directory, sessionID)) + await visit(page, sessionPath(cur.directory, sessionID)) await waitSession(page, { directory: cur.directory, sessionID, serverUrl: backend.url }) const current = sessionIDFromUrl(page.url()) if (current) trackSession(current) @@ -521,7 +536,7 @@ async function runProject( }) const gotoSession = async (sessionID?: string) => { - await page.goto(sessionPath(root, sessionID)) + await visit(page, sessionPath(root, sessionID)) await waitSession(page, { directory: root, sessionID, serverUrl: url }) const current = sessionIDFromUrl(page.url()) if (current) trackSession(current) diff --git a/packages/app/e2e/projects/project-edit.spec.ts b/packages/app/e2e/projects/project-edit.spec.ts index bc182a6953..1ffe4219d1 100644 --- a/packages/app/e2e/projects/project-edit.spec.ts +++ b/packages/app/e2e/projects/project-edit.spec.ts @@ -34,6 +34,8 @@ test("dialog edit project updates name and startup script", async ({ page, proje await expect .poll( async () => { + await page.reload() + await openSidebar(page) const reopened = await open() const value = await reopened.getByLabel("Name").inputValue() const next = await reopened.getByLabel("Workspace startup script").inputValue() diff --git a/packages/app/e2e/projects/workspaces.spec.ts b/packages/app/e2e/projects/workspaces.spec.ts index 16caa3d496..b8a0720401 100644 --- a/packages/app/e2e/projects/workspaces.spec.ts +++ b/packages/app/e2e/projects/workspaces.spec.ts @@ -12,6 +12,7 @@ import { clickMenuItem, confirmDialog, openSidebar, + openProjectMenu, openWorkspaceMenu, resolveSlug, setWorkspacesEnabled, @@ -19,7 +20,7 @@ import { waitDir, waitSlug, } from "../actions" -import { dropdownMenuContentSelector, inlineInputSelector, workspaceItemSelector } from "../selectors" +import { inlineInputSelector, workspaceItemSelector } from "../selectors" import { dirSlug } from "../utils" async function setupWorkspaceTest(page: Page, project: { slug: string; trackDirectory: (directory: string) => void }) { diff --git a/packages/app/e2e/settings/settings.spec.ts b/packages/app/e2e/settings/settings.spec.ts index 1b151b6066..3327bf3114 100644 --- a/packages/app/e2e/settings/settings.spec.ts +++ b/packages/app/e2e/settings/settings.spec.ts @@ -92,6 +92,7 @@ test("changing theme persists in localStorage", async ({ page, gotoSession }) => await select.locator('[data-slot="select-select-trigger"]').click() const items = page.locator('[data-slot="select-select-item"]') + await expect(items.first()).toBeVisible() const count = await items.count() expect(count).toBeGreaterThan(1) diff --git a/packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts b/packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts index 8f7646c3e7..05a129a613 100644 --- a/packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts +++ b/packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts @@ -65,9 +65,8 @@ test("open sidebar project popover stays closed after clicking avatar", async ({ await projectButton.hover() await expect(card.getByText(/recent sessions/i)).toBeVisible() - await page.mouse.down() + await projectButton.click() await expect(card).toHaveCount(0) - await page.mouse.up() await waitSession(page, { directory: other }) await expect(card).toHaveCount(0)