From 5d38a13c46299b004f65355f24ea36eb80e0531c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 08:51:33 +0000 Subject: [PATCH] Update ghcr.io/element-hq/element-web:develop Docker digest to 9d8d8fc (#4243) * Update ghcr.io/element-hq/element-web:develop Docker digest to 1850bf6 * Adapt to latest EW * Reformat * Next try * Fix regexp * Fix DM path * Next try --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Johannes Marbach --- docker-compose-playwright.yml | 4 ++-- playwright/fixtures/widget-user.ts | 17 ++++++++++++---- playwright/widget/test-helpers.ts | 31 ++++++++++++++++++++++++++---- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/docker-compose-playwright.yml b/docker-compose-playwright.yml index 424f1c650..90c36a2aa 100644 --- a/docker-compose-playwright.yml +++ b/docker-compose-playwright.yml @@ -19,7 +19,7 @@ services: - ./backend/playwright_homeserver-othersite.yaml:/data/cfg/homeserver.yaml:Z element-web: # Pin to a SHA so that upstream cannot break our tests. Renovate handles regular updates. - image: ghcr.io/element-hq/element-web:develop@sha256:6ed62b2963ae098a1f79521eb516834dcf29452168e281cc359d9cfb4380adf6 + image: ghcr.io/element-hq/element-web:develop@sha256:1850bf66c2eab668aedfc48c280dbdeae3a03f0c59946b0631ffa0c97a3716ff element-web-1: # Pin to a SHA so that upstream cannot break our tests. Renovate handles regular updates. - image: ghcr.io/element-hq/element-web:develop@sha256:6ed62b2963ae098a1f79521eb516834dcf29452168e281cc359d9cfb4380adf6 + image: ghcr.io/element-hq/element-web:develop@sha256:1850bf66c2eab668aedfc48c280dbdeae3a03f0c59946b0631ffa0c97a3716ff diff --git a/playwright/fixtures/widget-user.ts b/playwright/fixtures/widget-user.ts index 74d9ad8ec..35c2d9fbf 100644 --- a/playwright/fixtures/widget-user.ts +++ b/playwright/fixtures/widget-user.ts @@ -109,10 +109,15 @@ export const widgetTest = test.extend({ await TestHelpers.dismissInviteUnknownUserModal(ewPage1); // Accept the invite + await TestHelpers.closeReleaseAnnouncement( + ewPage2, + "Introducing Sections", + ); + await TestHelpers.expandAllSections(ewPage2); await expect( - ewPage2.getByRole("option", { name: "Welcome Room" }), + TestHelpers.roomListItem(ewPage2, "Welcome Room"), ).toBeVisible(); - await ewPage2.getByRole("option", { name: "Welcome Room" }).click(); + await TestHelpers.roomListItem(ewPage2, "Welcome Room").click(); await ewPage2.getByRole("button", { name: "Accept" }).click(); await expect( ewPage2 @@ -152,8 +157,12 @@ export const widgetTest = test.extend({ ).toBeVisible(); // Accept the DM invite from brooks - // This how playwright record selects the DM invite in the room list - await ewPage2.getByRole("button", { name: "Open room" }).click(); + await TestHelpers.closeReleaseAnnouncement( + ewPage2, + "Introducing Sections", + ); + await TestHelpers.expandAllSections(ewPage2); + await TestHelpers.roomListItem(ewPage2, brooksDisplayName).click(); await ewPage2.getByRole("button", { name: "Start chatting" }).click(); } diff --git a/playwright/widget/test-helpers.ts b/playwright/widget/test-helpers.ts index 0322596aa..331b35aca 100644 --- a/playwright/widget/test-helpers.ts +++ b/playwright/widget/test-helpers.ts @@ -11,6 +11,7 @@ import { type JSHandle, type Page, type FrameLocator, + type Locator, } from "@playwright/test"; import { type MatrixClient } from "matrix-js-sdk"; @@ -203,6 +204,16 @@ export class TestHelpers { } } + public static async expandAllSections(page: Page): Promise { + try { + await page + .getByRole("button", { name: "Expand all sections" }) + .click({ timeout: 2000 }); + } catch { + // Already expanded or button not present + } + } + public static async createRoom( name: string, page: Page, @@ -253,9 +264,9 @@ export class TestHelpers { roomName: string, page: Page, ): Promise { - await page.getByRole("option", { name: roomName }).click({ - timeout: 10000, - }); + await TestHelpers.closeReleaseAnnouncement(page, "Introducing Sections"); + await TestHelpers.expandAllSections(page); + await TestHelpers.roomListItem(page, roomName).click({ timeout: 10000 }); await page.getByRole("button", { name: "Accept" }).click({ timeout: 5000, }); @@ -350,6 +361,17 @@ export class TestHelpers { .click(); } + /** + * Locates a room in the room list by its name. + * + * Matches on the aria-label prefix because the item's role differs between + * the flat room list (`option`) and the sectioned room list (`button`), and + * the label may carry a suffix such as " invitation.". + */ + public static roomListItem(page: Page, roomName: string): Locator { + return page.locator(`[aria-label^="Open room ${roomName}"]`); + } + /** * Switches to a room in the room list by its name. * @param page - The EW page @@ -359,7 +381,8 @@ export class TestHelpers { page: Page, roomName: string, ): Promise { - await page.getByRole("option", { name: `Open room ${roomName}` }).click(); + await TestHelpers.expandAllSections(page); + await TestHelpers.roomListItem(page, roomName).click(); } public static async dismissInviteUnknownUserModal(page: Page): Promise {