diff --git a/apps/web/__e2e__/backups.test.ts b/apps/web/__e2e__/backups.test.ts index 81f2b5f86..224d7b29e 100644 --- a/apps/web/__e2e__/backups.test.ts +++ b/apps/web/__e2e__/backups.test.ts @@ -48,7 +48,9 @@ test("restore a backup", async ({ page }) => { expect(await tags.isEmpty()).toBeFalsy(); }); -test("create an encrypted backup", async ({ page }) => { +test("create an encrypted backup", async ({ page }, info) => { + info.setTimeout(60 * 1000); + const app = new AppModel(page); await app.auth.goto(); await app.auth.login(USER.CURRENT); diff --git a/apps/web/__e2e__/models/base-item.model.ts b/apps/web/__e2e__/models/base-item.model.ts index ceeb3c4ba..ce5b3a909 100644 --- a/apps/web/__e2e__/models/base-item.model.ts +++ b/apps/web/__e2e__/models/base-item.model.ts @@ -40,7 +40,8 @@ export class BaseItemModel { } async click() { - await this.locator.scrollIntoViewIfNeeded(); + if (!(await this.locator.isVisible())) + await this.locator.scrollIntoViewIfNeeded(); await this.locator.click(); } diff --git a/apps/web/__e2e__/models/settings-view.model.ts b/apps/web/__e2e__/models/settings-view.model.ts index 15a26a341..f6db08d22 100644 --- a/apps/web/__e2e__/models/settings-view.model.ts +++ b/apps/web/__e2e__/models/settings-view.model.ts @@ -19,7 +19,12 @@ along with this program. If not, see . import { Page } from "@playwright/test"; import { downloadAndReadFile, getTestId, uploadFile } from "../utils"; -import { confirmDialog, fillPasswordDialog, waitToHaveText } from "./utils"; +import { + confirmDialog, + fillPasswordDialog, + waitForDialog, + waitToHaveText +} from "./utils"; import { NavigationMenuModel } from "./navigation-menu.model"; export class SettingsViewModel { @@ -112,5 +117,7 @@ export class SettingsViewModel { await uploadFile(this.page, restoreBackup, filename); if (password) await fillPasswordDialog(this.page, password); + + await waitForDialog(this.page, "Restoring backup"); } } diff --git a/apps/web/__e2e__/models/utils.ts b/apps/web/__e2e__/models/utils.ts index 0c737f44a..f85f0e73c 100644 --- a/apps/web/__e2e__/models/utils.ts +++ b/apps/web/__e2e__/models/utils.ts @@ -140,6 +140,14 @@ export async function denyDialog(page: Page) { // await dialogConfirm.waitFor({ state: "detached" }); } +export async function waitForDialog(page: Page, title: string) { + const dialogTitle = page + .locator(getTestId("dialog-title")) + .filter({ hasText: title }); + await dialogTitle.waitFor({ state: "attached" }); + await dialogTitle.waitFor({ state: "detached" }); +} + export async function waitToHaveText(page: Page, id: string) { await page.waitForFunction( ({ id }) => { diff --git a/apps/web/src/components/dialog/index.tsx b/apps/web/src/components/dialog/index.tsx index 48b5b88b8..60a5ad3fc 100644 --- a/apps/web/src/components/dialog/index.tsx +++ b/apps/web/src/components/dialog/index.tsx @@ -130,6 +130,7 @@ function BaseDialog(props: React.PropsWithChildren) { {props.title && (