Skip to content

Phase 2 Refactor MImageBody to MVVM and remove legacy component #1501

Phase 2 Refactor MImageBody to MVVM and remove legacy component

Phase 2 Refactor MImageBody to MVVM and remove legacy component #1501

Triggered via pull request April 24, 2026 07:10
Status Failure
Total duration 19m 50s
Artifacts 9

build-and-test.yaml

on: pull_request
Build Element Web
2m 14s
Build Element Web
Prepare Element Desktop  /  Prepare
38s
Prepare Element Desktop / Prepare
Matrix: playwright_ew
Downstream Playwright tests [element-modules]  /  Run Playwright end-to-end tests & upload html report
Downstream Playwright tests [element-modules] / Run Playwright end-to-end tests & upload html report
Matrix: Desktop Linux
Matrix: Desktop Windows
Waiting for pending jobs
Desktop macOS  /  Build macOS Universal
Desktop macOS / Build macOS Universal
Desktop macOS  /  ...  /  test
Desktop macOS / Test macOS Universal / test
end-to-end-tests
47s
end-to-end-tests
Fit to window
Zoom out
Zoom in

Annotations

11 errors, 2 warnings, and 5 notices
[Chrome] › playwright/e2e/sliding-sync/sliding-sync.spec.ts:225:5 › Sliding Sync › should show and be able to accept/reject/rescind invites: apps/web/playwright/e2e/sliding-sync/sliding-sync.spec.ts#L41
1) [Chrome] › playwright/e2e/sliding-sync/sliding-sync.spec.ts:225:5 › Sliding Sync › should show and be able to accept/reject/rescind invites Error: expect(locator).toHaveText(expected) failed Locator: getByTestId('room-list').getByTestId('room-name') Timeout: 5000ms - Expected - 1 + Received + 1 Array [ - "Room to Rescind", "Room to Reject", + "Room to Rescind", ] Call log: - Expect "toHaveText" with timeout 5000ms - waiting for getByTestId('room-list').getByTestId('room-name') 3 × locator resolved to 3 elements 6 × locator resolved to 2 elements 39 | test.describe("Sliding Sync", () => { 40 | const checkOrder = async (wantOrder: string[], page: Page) => { > 41 | await expect(page.getByTestId("room-list").getByTestId("room-name")).toHaveText(wantOrder); | ^ 42 | }; 43 | 44 | const bumpRoom = async (roomId: string, app: ElementAppPage) => { at checkOrder (/home/runner/work/element-web/element-web/apps/web/playwright/e2e/sliding-sync/sliding-sync.spec.ts:41:78) at /home/runner/work/element-web/element-web/apps/web/playwright/e2e/sliding-sync/sliding-sync.spec.ts:259:15
Run Tests [Chrome] 2/4
Process completed with exit code 1.
[Chrome] › playwright/e2e/right-panel/file-panel.spec.ts:55:9 › FilePanel › render › should list tiles on the panel @no-firefox @no-webkit @screenshot: apps/web/playwright/e2e/right-panel/file-panel.spec.ts#L97
2) [Chrome] › playwright/e2e/right-panel/file-panel.spec.ts:55:9 › FilePanel › render › should list tiles on the panel @no-firefox @no-webkit @screenshot Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: locator('.mx_FilePanel').locator('.mx_RoomView_MessageList').locator('.mx_EventTile_mediaLine.mx_EventTile_image .mx_MImageBody').locator('img[class=\'mx_MImageBody_thumbnail\']') Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for locator('.mx_FilePanel').locator('.mx_RoomView_MessageList').locator('.mx_EventTile_mediaLine.mx_EventTile_image .mx_MImageBody').locator('img[class=\'mx_MImageBody_thumbnail\']') 95 | const image = filePanelMessageList.locator(".mx_EventTile_mediaLine.mx_EventTile_image .mx_MImageBody"); 96 | // Assert that the image is specified as thumbnail and has the alt string > 97 | await expect(image.locator("img[class='mx_MImageBody_thumbnail']")).toBeVisible(); | ^ 98 | await expect(image.locator("img[alt='riot.png']")).toBeVisible(); 99 | 100 | // Detect the audio file at /home/runner/work/element-web/element-web/apps/web/playwright/e2e/right-panel/file-panel.spec.ts:97:81
[Chrome] › playwright/e2e/right-panel/file-panel.spec.ts:55:9 › FilePanel › render › should list tiles on the panel @no-firefox @no-webkit @screenshot: apps/web/playwright/e2e/right-panel/file-panel.spec.ts#L97
2) [Chrome] › playwright/e2e/right-panel/file-panel.spec.ts:55:9 › FilePanel › render › should list tiles on the panel @no-firefox @no-webkit @screenshot Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: locator('.mx_FilePanel').locator('.mx_RoomView_MessageList').locator('.mx_EventTile_mediaLine.mx_EventTile_image .mx_MImageBody').locator('img[class=\'mx_MImageBody_thumbnail\']') Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for locator('.mx_FilePanel').locator('.mx_RoomView_MessageList').locator('.mx_EventTile_mediaLine.mx_EventTile_image .mx_MImageBody').locator('img[class=\'mx_MImageBody_thumbnail\']') 95 | const image = filePanelMessageList.locator(".mx_EventTile_mediaLine.mx_EventTile_image .mx_MImageBody"); 96 | // Assert that the image is specified as thumbnail and has the alt string > 97 | await expect(image.locator("img[class='mx_MImageBody_thumbnail']")).toBeVisible(); | ^ 98 | await expect(image.locator("img[alt='riot.png']")).toBeVisible(); 99 | 100 | // Detect the audio file at /home/runner/work/element-web/element-web/apps/web/playwright/e2e/right-panel/file-panel.spec.ts:97:81
[Chrome] › playwright/e2e/right-panel/file-panel.spec.ts:55:9 › FilePanel › render › should list tiles on the panel @no-firefox @no-webkit @screenshot: apps/web/playwright/e2e/right-panel/file-panel.spec.ts#L97
2) [Chrome] › playwright/e2e/right-panel/file-panel.spec.ts:55:9 › FilePanel › render › should list tiles on the panel @no-firefox @no-webkit @screenshot Error: expect(locator).toBeVisible() failed Locator: locator('.mx_FilePanel').locator('.mx_RoomView_MessageList').locator('.mx_EventTile_mediaLine.mx_EventTile_image .mx_MImageBody').locator('img[class=\'mx_MImageBody_thumbnail\']') Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for locator('.mx_FilePanel').locator('.mx_RoomView_MessageList').locator('.mx_EventTile_mediaLine.mx_EventTile_image .mx_MImageBody').locator('img[class=\'mx_MImageBody_thumbnail\']') 95 | const image = filePanelMessageList.locator(".mx_EventTile_mediaLine.mx_EventTile_image .mx_MImageBody"); 96 | // Assert that the image is specified as thumbnail and has the alt string > 97 | await expect(image.locator("img[class='mx_MImageBody_thumbnail']")).toBeVisible(); | ^ 98 | await expect(image.locator("img[alt='riot.png']")).toBeVisible(); 99 | 100 | // Detect the audio file at /home/runner/work/element-web/element-web/apps/web/playwright/e2e/right-panel/file-panel.spec.ts:97:81
[Chrome] › playwright/e2e/modules/custom-component.spec.ts:115:9 › Custom Component API › basic functionality › should allow downloading media when the allowDownloading hint is set to true: apps/web/playwright/e2e/modules/custom-component.spec.ts#L135
1) [Chrome] › playwright/e2e/modules/custom-component.spec.ts:115:9 › Custom Component API › basic functionality › should allow downloading media when the allowDownloading hint is set to true Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: getByLabel('Image view').getByLabel('Download') Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for getByLabel('Image view').getByLabel('Download') 133 | await expect(page.getByRole("button", { name: "Download" })).toBeVisible(); 134 | await imgTile.click(); > 135 | await expect(page.getByLabel("Image view").getByLabel("Download")).toBeVisible(); | ^ 136 | }); 137 | test( 138 | "should render the next registered component if the filter function throws", at /home/runner/work/element-web/element-web/apps/web/playwright/e2e/modules/custom-component.spec.ts:135:80
[Chrome] › playwright/e2e/modules/custom-component.spec.ts:115:9 › Custom Component API › basic functionality › should allow downloading media when the allowDownloading hint is set to true: apps/web/playwright/e2e/modules/custom-component.spec.ts#L135
1) [Chrome] › playwright/e2e/modules/custom-component.spec.ts:115:9 › Custom Component API › basic functionality › should allow downloading media when the allowDownloading hint is set to true Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: getByLabel('Image view').getByLabel('Download') Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for getByLabel('Image view').getByLabel('Download') 133 | await expect(page.getByRole("button", { name: "Download" })).toBeVisible(); 134 | await imgTile.click(); > 135 | await expect(page.getByLabel("Image view").getByLabel("Download")).toBeVisible(); | ^ 136 | }); 137 | test( 138 | "should render the next registered component if the filter function throws", at /home/runner/work/element-web/element-web/apps/web/playwright/e2e/modules/custom-component.spec.ts:135:80
[Chrome] › playwright/e2e/modules/custom-component.spec.ts:115:9 › Custom Component API › basic functionality › should allow downloading media when the allowDownloading hint is set to true: apps/web/playwright/e2e/modules/custom-component.spec.ts#L135
1) [Chrome] › playwright/e2e/modules/custom-component.spec.ts:115:9 › Custom Component API › basic functionality › should allow downloading media when the allowDownloading hint is set to true Error: expect(locator).toBeVisible() failed Locator: getByLabel('Image view').getByLabel('Download') Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for getByLabel('Image view').getByLabel('Download') 133 | await expect(page.getByRole("button", { name: "Download" })).toBeVisible(); 134 | await imgTile.click(); > 135 | await expect(page.getByLabel("Image view").getByLabel("Download")).toBeVisible(); | ^ 136 | }); 137 | test( 138 | "should render the next registered component if the filter function throws", at /home/runner/work/element-web/element-web/apps/web/playwright/e2e/modules/custom-component.spec.ts:135:80
[Chrome] › playwright/e2e/oidc/oidc-native.spec.ts:110:5 › OIDC Native › can log in to an existing MAS account @no-firefox @no-webkit @screenshot: apps/web/playwright/e2e/oidc/oidc-native.spec.ts#L134
1) [Chrome] › playwright/e2e/oidc/oidc-native.spec.ts:110:5 › OIDC Native › can log in to an existing MAS account @no-firefox @no-webkit @screenshot Error: expect(locator).toBeVisible() failed Locator: getByText('Confirm your digital identity') Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for getByText('Confirm your digital identity') 132 | 133 | // We should be in > 134 | await expect(page.getByText("Confirm your digital identity")).toBeVisible(); | ^ 135 | }); 136 | 137 | test.describe("with force_verification on", () => { at /home/runner/work/element-web/element-web/apps/web/playwright/e2e/oidc/oidc-native.spec.ts:134:71
end-to-end-tests
Process completed with exit code 1.
end-to-end-tests
2 tests failed, skipping stale screenshot reporter.
Desktop Linux (static, amd64, false) / Build Linux amd64 SQLCipher static
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: nbucic/variable-mapper@0673f6891a0619ba7c002ecfed0f9f4f39017b6f. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
Desktop Linux (static, amd64, false) / Build Linux amd64 SQLCipher static
Failed to save: Failed to FinalizeCacheEntryUpload: Received non-retryable error: Failed request: (404) Not Found: cache entry not found
🎭 Playwright Run Summary
1 flaky [Chrome] › playwright/e2e/sliding-sync/sliding-sync.spec.ts:225:5 › Sliding Sync › should show and be able to accept/reject/rescind invites 1 skipped 129 passed (10.7m)
🎭 Playwright Run Summary
135 passed (12.4m)
🎭 Playwright Run Summary
2 failed [Chrome] › playwright/e2e/modules/custom-component.spec.ts:115:9 › Custom Component API › basic functionality › should allow downloading media when the allowDownloading hint is set to true [Chrome] › playwright/e2e/right-panel/file-panel.spec.ts:55:9 › FilePanel › render › should list tiles on the panel @no-firefox @no-webkit @screenshot 3 skipped 128 passed (13.0m)
🎭 Playwright Run Summary
1 skipped 6 passed (25.7s)
🎭 Playwright Run Summary
1 flaky [Chrome] › playwright/e2e/oidc/oidc-native.spec.ts:110:5 › OIDC Native › can log in to an existing MAS account @no-firefox @no-webkit @screenshot 1 skipped 129 passed (15.5m)

Artifacts

Produced during runtime
Name Size Digest
blob-report-Chrome-1
828 KB
sha256:95396503150b30c071b940d235ee29b67d45ac3a4672cfaede6aa7935637bfc6
blob-report-Chrome-2
13.2 MB
sha256:09dbc470bc1c54b75dc746b455717e8ee9702de55c292ba7a71204427c70bf21
blob-report-Chrome-3
6.63 MB
sha256:5c21ce9780d55035d2fa0928a58ac370efdc0a82905539dfa2c27b92d40750c3
blob-report-Chrome-4
6.61 MB
sha256:7a48991557ff5a1a305c30ac8b06de50686501a808c947a4622c78ec16d0031b
blob-report-linux-amd64-sqlcipher-static
57.6 KB
sha256:85505ca6a9a9f32fe21d6a851d5867bf80cfe07bbe8d499505b026f1f626f066
desktop-prepare
41.2 MB
sha256:9a581b8d31fdc942d5bf82a1f129e6d3c0d60bd23fe9f91bb094e6eda8608595
html-report
25.4 MB
sha256:f46ddf18d1b5b71b32f97fc011ec5e190c5684a54a4dfae3583dec433b405ec5
linux-amd64-sqlcipher-static
283 MB
sha256:e1aaee185a764bcf930c54c6a793df5a5c4a96eb178db752989d068c7a0783ab
webapp
41.4 MB
sha256:dcf73453c85433da7f29d40dcb6865cf5ab1b090566d7c5533b096613ea20fcf