From c74cf3fa37aaf89021a38d7eadc79d73caf674a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Wed, 18 Feb 2026 16:54:03 +0100 Subject: [PATCH 1/5] :wrench: Make config.js automatically mocked in playwright tests --- frontend/playwright/ui/pages/BasePage.js | 4 ++++ .../playwright/ui/pages/BaseWebSocketPage.js | 9 ++------- frontend/playwright/ui/pages/DashboardPage.js | 20 +++++++++---------- frontend/playwright/ui/pages/LoginPage.js | 4 ++++ frontend/playwright/ui/pages/RegisterPage.js | 7 ++++++- .../ui/pages/SubscriptionProfilePage.js | 4 ++-- frontend/playwright/ui/pages/ViewerPage.js | 10 ---------- frontend/playwright/ui/pages/WorkspacePage.js | 4 ++-- frontend/playwright/ui/specs/login.spec.js | 2 ++ frontend/playwright/ui/specs/versions.spec.js | 1 - .../ui/visual-specs/visual-login.spec.js | 2 ++ 11 files changed, 34 insertions(+), 33 deletions(-) diff --git a/frontend/playwright/ui/pages/BasePage.js b/frontend/playwright/ui/pages/BasePage.js index 2e7380b2a4..bb95840664 100644 --- a/frontend/playwright/ui/pages/BasePage.js +++ b/frontend/playwright/ui/pages/BasePage.js @@ -1,4 +1,8 @@ export class BasePage { + static async init(page) { + await BasePage.mockConfigFlags(page, []); + } + /** * Mocks multiple RPC calls in a single call. * diff --git a/frontend/playwright/ui/pages/BaseWebSocketPage.js b/frontend/playwright/ui/pages/BaseWebSocketPage.js index 21855312ee..e5de194537 100644 --- a/frontend/playwright/ui/pages/BaseWebSocketPage.js +++ b/frontend/playwright/ui/pages/BaseWebSocketPage.js @@ -2,13 +2,8 @@ import { MockWebSocketHelper } from "../../helpers/MockWebSocketHelper"; import BasePage from "./BasePage"; export class BaseWebSocketPage extends BasePage { - /** - * This should be called on `test.beforeEach`. - * - * @param {Page} page - * @returns - */ - static async initWebSockets(page) { + static async init(page) { + await super.init(page); await MockWebSocketHelper.init(page); } diff --git a/frontend/playwright/ui/pages/DashboardPage.js b/frontend/playwright/ui/pages/DashboardPage.js index 111913e5a3..8fbabf0d81 100644 --- a/frontend/playwright/ui/pages/DashboardPage.js +++ b/frontend/playwright/ui/pages/DashboardPage.js @@ -3,50 +3,50 @@ import { BaseWebSocketPage } from "./BaseWebSocketPage"; export class DashboardPage extends BaseWebSocketPage { static async init(page) { - await BaseWebSocketPage.initWebSockets(page); + await super.init(page); - await BaseWebSocketPage.mockRPC( + await super.mockRPC( page, "get-teams", "logged-in-user/get-teams-default.json", ); - await BaseWebSocketPage.mockRPC( + await super.mockRPC( page, "get-font-variants?team-id=*", "workspace/get-font-variants-empty.json", ); - await BaseWebSocketPage.mockRPC( + await super.mockRPC( page, "get-projects?team-id=*", "logged-in-user/get-projects-default.json", ); - await BaseWebSocketPage.mockRPC( + await super.mockRPC( page, "get-team-members?team-id=*", "logged-in-user/get-team-members-your-penpot.json", ); - await BaseWebSocketPage.mockRPC( + await super.mockRPC( page, "get-team-users?team-id=*", "logged-in-user/get-team-users-single-user.json", ); - await BaseWebSocketPage.mockRPC( + await super.mockRPC( page, "get-unread-comment-threads?team-id=*", "logged-in-user/get-team-users-single-user.json", ); - await BaseWebSocketPage.mockRPC( + await super.mockRPC( page, "get-team-recent-files?team-id=*", "logged-in-user/get-team-recent-files-empty.json", ); - await BaseWebSocketPage.mockRPC( + await super.mockRPC( page, "get-profiles-for-file-comments", "workspace/get-profile-for-file-comments.json", ); - await BaseWebSocketPage.mockRPC( + await super.mockRPC( page, "get-builtin-templates", "logged-in-user/get-built-in-templates-empty.json", diff --git a/frontend/playwright/ui/pages/LoginPage.js b/frontend/playwright/ui/pages/LoginPage.js index 80f471aa43..bb2efc68c6 100644 --- a/frontend/playwright/ui/pages/LoginPage.js +++ b/frontend/playwright/ui/pages/LoginPage.js @@ -1,6 +1,10 @@ import { BasePage } from "./BasePage"; export class LoginPage extends BasePage { + static async init(page) { + await super.init(page); + } + constructor(page) { super(page); this.loginButton = page.getByRole("button", { name: "Continue" }); diff --git a/frontend/playwright/ui/pages/RegisterPage.js b/frontend/playwright/ui/pages/RegisterPage.js index 097bbefb97..8d3633e678 100644 --- a/frontend/playwright/ui/pages/RegisterPage.js +++ b/frontend/playwright/ui/pages/RegisterPage.js @@ -29,8 +29,13 @@ export class RegisterPage extends BasePage { ); } + static async init(page) { + await BasePage.init(page); + } + static async initWithLoggedOutUser(page) { - await this.mockRPC(page, "get-profile", "get-profile-anonymous.json"); + await BasePage.init(page); + await BasePage.mockRPC(page, "get-profile", "get-profile-anonymous.json"); } } diff --git a/frontend/playwright/ui/pages/SubscriptionProfilePage.js b/frontend/playwright/ui/pages/SubscriptionProfilePage.js index b0e349a81a..b9769cfa52 100644 --- a/frontend/playwright/ui/pages/SubscriptionProfilePage.js +++ b/frontend/playwright/ui/pages/SubscriptionProfilePage.js @@ -3,9 +3,9 @@ import { DashboardPage } from "./DashboardPage"; export class SubscriptionProfilePage extends DashboardPage { static async init(page) { - await DashboardPage.initWebSockets(page); + await super.init(page); - await DashboardPage.mockRPC( + await super.mockRPC( page, "get-subscription-usage", "subscription/get-subscription-usage.json", diff --git a/frontend/playwright/ui/pages/ViewerPage.js b/frontend/playwright/ui/pages/ViewerPage.js index cf97f80fc6..05ba705bc5 100644 --- a/frontend/playwright/ui/pages/ViewerPage.js +++ b/frontend/playwright/ui/pages/ViewerPage.js @@ -4,16 +4,6 @@ export class ViewerPage extends BaseWebSocketPage { static anyFileId = "c7ce0794-0992-8105-8004-38f280443849"; static anyPageId = "c7ce0794-0992-8105-8004-38f28044384a"; - /** - * This should be called on `test.beforeEach`. - * - * @param {Page} page - * @returns - */ - static async init(page) { - await BaseWebSocketPage.initWebSockets(page); - } - async setupLoggedInUser() { await this.mockRPC( "get-profile", diff --git a/frontend/playwright/ui/pages/WorkspacePage.js b/frontend/playwright/ui/pages/WorkspacePage.js index 18da0810bd..7f1e871c66 100644 --- a/frontend/playwright/ui/pages/WorkspacePage.js +++ b/frontend/playwright/ui/pages/WorkspacePage.js @@ -112,9 +112,9 @@ export class WorkspacePage extends BaseWebSocketPage { * @returns */ static async init(page) { - await BaseWebSocketPage.initWebSockets(page); + await super.init(page); - await BaseWebSocketPage.mockRPCs(page, { + await super.mockRPCs(page, { "get-profile": "logged-in-user/get-profile-logged-in.json", "get-team-users?file-id=*": "logged-in-user/get-team-users-single-user.json", diff --git a/frontend/playwright/ui/specs/login.spec.js b/frontend/playwright/ui/specs/login.spec.js index 4a2604f4b1..254e205b75 100644 --- a/frontend/playwright/ui/specs/login.spec.js +++ b/frontend/playwright/ui/specs/login.spec.js @@ -2,6 +2,8 @@ import { test, expect } from "@playwright/test"; import { LoginPage } from "../pages/LoginPage"; test.beforeEach(async ({ page }) => { + await LoginPage.init(page); + const login = new LoginPage(page); await login.initWithLoggedOutUser(); diff --git a/frontend/playwright/ui/specs/versions.spec.js b/frontend/playwright/ui/specs/versions.spec.js index d3d566efd1..ea5a3e9606 100644 --- a/frontend/playwright/ui/specs/versions.spec.js +++ b/frontend/playwright/ui/specs/versions.spec.js @@ -1,6 +1,5 @@ import { test, expect } from "@playwright/test"; import { WasmWorkspacePage } from "../pages/WasmWorkspacePage"; -import { presenceFixture } from "../../data/workspace/ws-notifications"; test.beforeEach(async ({ page }) => { await WasmWorkspacePage.init(page); diff --git a/frontend/playwright/ui/visual-specs/visual-login.spec.js b/frontend/playwright/ui/visual-specs/visual-login.spec.js index b3b63a0c56..5ee1ba7a2b 100644 --- a/frontend/playwright/ui/visual-specs/visual-login.spec.js +++ b/frontend/playwright/ui/visual-specs/visual-login.spec.js @@ -2,6 +2,8 @@ import { test, expect } from "@playwright/test"; import { LoginPage } from "../pages/LoginPage"; test.beforeEach(async ({ page }) => { + await LoginPage.init(page); + const login = new LoginPage(page); await login.initWithLoggedOutUser(); await login.page.goto("/#/auth/login"); From 48fb9fa6ea549cdbefbe7d080632dfd82cf9bea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Wed, 18 Feb 2026 17:10:57 +0100 Subject: [PATCH 2/5] :sparkles: Fix broken playwright tests --- frontend/playwright/ui/specs/versions.spec.js | 2 +- .../main/ui/workspace/sidebar/options/menus/layout_item.cljs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/playwright/ui/specs/versions.spec.js b/frontend/playwright/ui/specs/versions.spec.js index ea5a3e9606..22fbdc08be 100644 --- a/frontend/playwright/ui/specs/versions.spec.js +++ b/frontend/playwright/ui/specs/versions.spec.js @@ -105,7 +105,7 @@ test("BUG 11006 - Fix history panel shortcut", async ({ page }) => { await workspacePage.goToWorkspace(); - await page.keyboard.press("Control+Alt+h"); + await page.keyboard.press("ControlOrMeta+Alt+h"); await expect( workspacePage.rightSidebar.getByText("There are no versions yet"), diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs index dd6c661030..f5bc637567 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs @@ -540,7 +540,7 @@ [:values schema:layout-item-props-schema] [:applied-tokens [:maybe [:map-of :keyword :string]]] [:ids [::sm/vec ::sm/uuid]] - [:v-sizing {:optional true} [:maybe [:= :fill]]]]) + [:v-sizing {:optional true} [:maybe [:enum :fill :fix :auto]]]]) (mf/defc layout-size-constraints* {::mf/private true From 4d05827fa9283ba59cbc2d7ee163fa8da40fdff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Wed, 18 Feb 2026 17:42:40 +0100 Subject: [PATCH 3/5] :wrench: Use disable-onboarding config flag instead of mocking get-profile in playwright --- .../get-profile-logged-in-no-onboarding.json | 26 ------------------- frontend/playwright/ui/pages/DashboardPage.js | 8 ++++++ .../ui/specs/dashboard-deleted.spec.js | 5 ---- .../ui/specs/dashboard-libraries.spec.js | 5 ---- .../ui/specs/dashboard-teams.spec.js | 5 ---- .../ui/specs/dashboard-viewer-role.spec.js | 6 +---- .../playwright/ui/specs/dashboard.spec.js | 5 ---- .../playwright/ui/specs/onboarding.spec.js | 1 + .../playwright/ui/specs/profile-menu.spec.js | 5 ---- .../ui/visual-specs/visual-dashboard.spec.js | 5 ---- 10 files changed, 10 insertions(+), 61 deletions(-) delete mode 100644 frontend/playwright/data/logged-in-user/get-profile-logged-in-no-onboarding.json diff --git a/frontend/playwright/data/logged-in-user/get-profile-logged-in-no-onboarding.json b/frontend/playwright/data/logged-in-user/get-profile-logged-in-no-onboarding.json deleted file mode 100644 index 0b416835f7..0000000000 --- a/frontend/playwright/data/logged-in-user/get-profile-logged-in-no-onboarding.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "~:email": "foo@example.com", - "~:is-demo": false, - "~:auth-backend": "penpot", - "~:fullname": "Princesa Leia", - "~:modified-at": "~m1713533116365", - "~:is-active": true, - "~:default-project-id": "~uc7ce0794-0992-8105-8004-38e630f7920b", - "~:id": "~uc7ce0794-0992-8105-8004-38e630f29a9b", - "~:is-muted": false, - "~:default-team-id": "~uc7ce0794-0992-8105-8004-38e630f40f6d", - "~:created-at": "~m1713533116365", - "~:is-blocked": false, - "~:props": { - "~:nudge": { - "~:big": 10, - "~:small": 1 - }, - "~:v2-info-shown": true, - "~:viewed-tutorial?": false, - "~:viewed-walkthrough?": false, - "~:onboarding-viewed": true, - "~:builtin-templates-collapsed-status": - true - } -} diff --git a/frontend/playwright/ui/pages/DashboardPage.js b/frontend/playwright/ui/pages/DashboardPage.js index 8fbabf0d81..f7e4df2582 100644 --- a/frontend/playwright/ui/pages/DashboardPage.js +++ b/frontend/playwright/ui/pages/DashboardPage.js @@ -5,6 +5,8 @@ export class DashboardPage extends BaseWebSocketPage { static async init(page) { await super.init(page); + await super.mockConfigFlags(page, ["disable-onboarding"]); + await super.mockRPC( page, "get-teams", @@ -51,6 +53,12 @@ export class DashboardPage extends BaseWebSocketPage { "get-builtin-templates", "logged-in-user/get-built-in-templates-empty.json", ); + + await super.mockRPC( + page, + "get-profile", + "logged-in-user/get-profile-logged-in.json", + ); } static anyTeamId = "c7ce0794-0992-8105-8004-38e630f40f6d"; diff --git a/frontend/playwright/ui/specs/dashboard-deleted.spec.js b/frontend/playwright/ui/specs/dashboard-deleted.spec.js index bacf85ae75..062d6d1bfa 100644 --- a/frontend/playwright/ui/specs/dashboard-deleted.spec.js +++ b/frontend/playwright/ui/specs/dashboard-deleted.spec.js @@ -3,11 +3,6 @@ import DashboardPage from "../pages/DashboardPage"; test.beforeEach(async ({ page }) => { await DashboardPage.init(page); - await DashboardPage.mockRPC( - page, - "get-profile", - "logged-in-user/get-profile-logged-in-no-onboarding.json", - ); }); test.describe("Dashboard Deleted Page", () => { diff --git a/frontend/playwright/ui/specs/dashboard-libraries.spec.js b/frontend/playwright/ui/specs/dashboard-libraries.spec.js index d30f6e82c0..efb258aef4 100644 --- a/frontend/playwright/ui/specs/dashboard-libraries.spec.js +++ b/frontend/playwright/ui/specs/dashboard-libraries.spec.js @@ -3,11 +3,6 @@ import DashboardPage from "../pages/DashboardPage"; test.beforeEach(async ({ page }) => { await DashboardPage.init(page); - await DashboardPage.mockRPC( - page, - "get-profile", - "logged-in-user/get-profile-logged-in-no-onboarding.json", - ); }); test("BUG 10421 - Fix libraries context menu", async ({ page }) => { diff --git a/frontend/playwright/ui/specs/dashboard-teams.spec.js b/frontend/playwright/ui/specs/dashboard-teams.spec.js index 8a95cf8e12..31153ac4cb 100644 --- a/frontend/playwright/ui/specs/dashboard-teams.spec.js +++ b/frontend/playwright/ui/specs/dashboard-teams.spec.js @@ -3,11 +3,6 @@ import DashboardPage from "../pages/DashboardPage"; test.beforeEach(async ({ page }) => { await DashboardPage.init(page); - await DashboardPage.mockRPC( - page, - "get-profile", - "logged-in-user/get-profile-logged-in-no-onboarding.json", - ); }); test("BUG 12359 - Selected invitations count is not pluralized", async ({ diff --git a/frontend/playwright/ui/specs/dashboard-viewer-role.spec.js b/frontend/playwright/ui/specs/dashboard-viewer-role.spec.js index 55197be037..0ab4ef8446 100644 --- a/frontend/playwright/ui/specs/dashboard-viewer-role.spec.js +++ b/frontend/playwright/ui/specs/dashboard-viewer-role.spec.js @@ -3,11 +3,7 @@ import DashboardPage from "../pages/DashboardPage"; test.beforeEach(async ({ page }) => { await DashboardPage.init(page); - await DashboardPage.mockRPC( - page, - "get-profile", - "logged-in-user/get-profile-logged-in-no-onboarding.json", - ); + await DashboardPage.mockRPC( page, "get-teams", diff --git a/frontend/playwright/ui/specs/dashboard.spec.js b/frontend/playwright/ui/specs/dashboard.spec.js index 768106634e..23e3b7a669 100644 --- a/frontend/playwright/ui/specs/dashboard.spec.js +++ b/frontend/playwright/ui/specs/dashboard.spec.js @@ -3,11 +3,6 @@ import DashboardPage from "../pages/DashboardPage"; test.beforeEach(async ({ page }) => { await DashboardPage.init(page); - await DashboardPage.mockRPC( - page, - "get-profile", - "logged-in-user/get-profile-logged-in-no-onboarding.json", - ); }); test("Dashboad page has title ", async ({ page }) => { diff --git a/frontend/playwright/ui/specs/onboarding.spec.js b/frontend/playwright/ui/specs/onboarding.spec.js index a14b0abe42..87a8da65b7 100644 --- a/frontend/playwright/ui/specs/onboarding.spec.js +++ b/frontend/playwright/ui/specs/onboarding.spec.js @@ -4,6 +4,7 @@ import OnboardingPage from "../pages/OnboardingPage"; test.beforeEach(async ({ page }) => { await DashboardPage.init(page); + await DashboardPage.mockConfigFlags(page, ["enable-onboarding"]); await DashboardPage.mockRPC( page, "get-profile", diff --git a/frontend/playwright/ui/specs/profile-menu.spec.js b/frontend/playwright/ui/specs/profile-menu.spec.js index fdb35e28e6..e86a79a826 100644 --- a/frontend/playwright/ui/specs/profile-menu.spec.js +++ b/frontend/playwright/ui/specs/profile-menu.spec.js @@ -3,11 +3,6 @@ import DashboardPage from "../pages/DashboardPage"; test.beforeEach(async ({ page }) => { await DashboardPage.init(page); - await DashboardPage.mockRPC( - page, - "get-profile", - "logged-in-user/get-profile-logged-in-no-onboarding.json", - ); }); test("Navigate to penpot changelog from profile menu", async ({ page }) => { diff --git a/frontend/playwright/ui/visual-specs/visual-dashboard.spec.js b/frontend/playwright/ui/visual-specs/visual-dashboard.spec.js index 50ed19787f..5e3f1a5eff 100644 --- a/frontend/playwright/ui/visual-specs/visual-dashboard.spec.js +++ b/frontend/playwright/ui/visual-specs/visual-dashboard.spec.js @@ -3,11 +3,6 @@ import DashboardPage from "../pages/DashboardPage"; test.beforeEach(async ({ page }) => { await DashboardPage.init(page); - await DashboardPage.mockRPC( - page, - "get-profile", - "logged-in-user/get-profile-logged-in-no-onboarding.json", - ); }); test("User goes to an empty dashboard", async ({ page }) => { From f6d041444928c028ef171d395a20ee1295a99eee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Wed, 18 Feb 2026 17:48:09 +0100 Subject: [PATCH 4/5] :wrench: Use config flag for variants tests --- .../playwright/data/get-teams-variants.json | 26 ------------------- frontend/playwright/ui/specs/variants.spec.js | 4 +-- 2 files changed, 2 insertions(+), 28 deletions(-) delete mode 100644 frontend/playwright/data/get-teams-variants.json diff --git a/frontend/playwright/data/get-teams-variants.json b/frontend/playwright/data/get-teams-variants.json deleted file mode 100644 index 50b323d047..0000000000 --- a/frontend/playwright/data/get-teams-variants.json +++ /dev/null @@ -1,26 +0,0 @@ -[ - { - "~:features": { - "~#set": [ - "variants/v1", - "layout/grid", - "styles/v2", - "fdata/pointer-map", - "fdata/objects-map", - "components/v2", - "fdata/shape-data-type" - ] - }, - "~:permissions": { - "~:type": "~:membership", - "~:is-owner": true, - "~:is-admin": true, - "~:can-edit": true - }, - "~:name": "Default", - "~:modified-at": "~m1713533116375", - "~:id": "~uc7ce0794-0992-8105-8004-38e630f7920a", - "~:created-at": "~m1713533116375", - "~:is-default": true - } -] \ No newline at end of file diff --git a/frontend/playwright/ui/specs/variants.spec.js b/frontend/playwright/ui/specs/variants.spec.js index b053a2ca7d..9cbe4ca440 100644 --- a/frontend/playwright/ui/specs/variants.spec.js +++ b/frontend/playwright/ui/specs/variants.spec.js @@ -1,5 +1,5 @@ import { test, expect } from "@playwright/test"; -import { WasmWorkspacePage } from "../pages/WasmWorkspacePage"; +import { WasmWorkspacePage } from "../pages/WasmWorkspacePage"; import { BaseWebSocketPage } from "../pages/BaseWebSocketPage"; import { Clipboard } from "../../helpers/Clipboard"; @@ -7,7 +7,7 @@ test.beforeEach(async ({ page, context }) => { await Clipboard.enable(context, Clipboard.Permission.ALL); await WasmWorkspacePage.init(page); - await BaseWebSocketPage.mockRPC(page, "get-teams", "get-teams-variants.json"); + await WasmWorkspacePage.mockConfigFlags(page, ["enable-feature-variants"]); }); test.afterEach(async ({ context }) => { From c2ee31e7913a34f8582efa918b9ce1a1c4f1c7cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Thu, 19 Feb 2026 11:02:38 +0100 Subject: [PATCH 5/5] :sparkles: Fix some flaky text editor v2 tests --- frontend/playwright/ui/pages/WorkspacePage.js | 11 +++++++++-- frontend/playwright/ui/specs/text-editor-v2.spec.js | 7 ++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/frontend/playwright/ui/pages/WorkspacePage.js b/frontend/playwright/ui/pages/WorkspacePage.js index 7f1e871c66..a4624ce37c 100644 --- a/frontend/playwright/ui/pages/WorkspacePage.js +++ b/frontend/playwright/ui/pages/WorkspacePage.js @@ -45,24 +45,27 @@ export class WorkspacePage extends BaseWebSocketPage { return this.waitForEditor(); } - stopEditing() { - return this.page.keyboard.press("Escape"); + async stopEditing() { + await this.page.keyboard.press("Escape"); } async moveToLeft(amount = 0) { for (let i = 0; i < amount; i++) { await this.page.keyboard.press("ArrowLeft"); } + await this.waitForIdle(); } async moveToRight(amount = 0) { for (let i = 0; i < amount; i++) { await this.page.keyboard.press("ArrowRight"); } + await this.waitForIdle(); } async moveFromStart(offset = 0) { await this.page.keyboard.press("Home"); + await this.waitForIdle(); await this.moveToRight(offset); } @@ -103,6 +106,10 @@ export class WorkspacePage extends BaseWebSocketPage { changeLetterSpacing(newValue) { return this.changeNumericInput(this.letterSpacing, newValue); } + + async waitForIdle() { + await this.page.evaluate(() => new Promise((resolve) => globalThis.requestIdleCallback(resolve))); + } }; /** diff --git a/frontend/playwright/ui/specs/text-editor-v2.spec.js b/frontend/playwright/ui/specs/text-editor-v2.spec.js index e32e0536a3..197a19c743 100644 --- a/frontend/playwright/ui/specs/text-editor-v2.spec.js +++ b/frontend/playwright/ui/specs/text-editor-v2.spec.js @@ -2,8 +2,6 @@ import { test, expect } from "@playwright/test"; import { Clipboard } from "../../helpers/Clipboard"; import { WasmWorkspacePage } from "../pages/WasmWorkspacePage"; -const timeToWait = 100; - test.beforeEach(async ({ page, context }) => { await Clipboard.enable(context, Clipboard.Permission.ALL); @@ -37,11 +35,13 @@ test("Create a new text shape from pasting text", async ({ page, context }) => { await workspace.setupEmptyFile(); await workspace.mockRPC("update-file?id=*", "text-editor/update-file.json"); await workspace.goToWorkspace(); + await workspace.moveButton.click(); await Clipboard.writeText(page, textToPaste); await workspace.clickAt(190, 150); await workspace.paste("keyboard"); + await workspace.textEditor.stopEditing(); await expect(workspace.layers.getByText(textToPaste)).toBeVisible(); @@ -57,6 +57,7 @@ test("Create a new text shape from pasting text using context menu", async ({ }); await workspace.setupEmptyFile(); await workspace.goToWorkspace(); + await workspace.moveButton.click(); await Clipboard.writeText(page, textToPaste); @@ -138,7 +139,7 @@ test("Update a new text shape appending text by pasting text", async ({ await workspace.paste("keyboard"); await workspace.textEditor.stopEditing(); await workspace.waitForSelectedShapeName("Lorem ipsum dolor sit amet"); - }); +}); test.skip("Update a new text shape prepending text by pasting text", async ({ page,