Skip to content

Cache waveform peaks and use direct URLs for faster replay loads #2402

Cache waveform peaks and use direct URLs for faster replay loads

Cache waveform peaks and use direct URLs for faster replay loads #2402

Triggered via pull request July 2, 2026 22:57
Status Failure
Total duration 12m 40s
Artifacts

playwright.yml

on: pull_request
Matrix: test
Fit to window
Zoom out
Zoom in

Annotations

12 errors, 2 warnings, and 2 notices
[chromium] › tests/example-mvnv.spec.ts:174:1 › test: tests/example-mvnv.spec.ts#L107
1) [chromium] › tests/example-mvnv.spec.ts:174:1 › test ────────────────────────────────────────── Error: locator.check: Test timeout of 180000ms exceeded. Call log: - waiting for getByRole('radio').first() 105 | const radio = radioOptions.nth(i); 106 | if (await radio.isVisible().catch(() => false)) { > 107 | await radio.check(); | ^ 108 | break; 109 | } 110 | } at answerCurrentMvnvPrompt (/home/runner/work/study/study/tests/example-mvnv.spec.ts:107:21) at /home/runner/work/study/study/tests/example-mvnv.spec.ts:238:5
[chromium] › tests/example-mvnv.spec.ts:174:1 › test: tests/example-mvnv.spec.ts#L0
1) [chromium] › tests/example-mvnv.spec.ts:174:1 › test ────────────────────────────────────────── Test timeout of 180000ms exceeded.
🧪 webkit E2E Tests
Process completed with exit code 1.
[webkit] › tests/test-training-feedback.spec.ts:94:1 › test: tests/test-training-feedback.spec.ts#L6
5) [webkit] › tests/test-training-feedback.spec.ts:94:1 › test ─────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: getByRole('heading', { name: 'Introduction' }) Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for getByRole('heading', { name: 'Introduction' }) 4 | 5 | async function goToTraining(page: Page) { > 6 | await expect(page.getByRole('heading', { name: 'Introduction' })).toBeVisible(); | ^ 7 | 8 | // Click on the next button 9 | await nextClick(page); at goToTraining (/Users/runner/work/study/study/tests/test-training-feedback.spec.ts:6:69) at /Users/runner/work/study/study/tests/test-training-feedback.spec.ts:103:9
[webkit] › tests/replay-current-trial-dynamic.spec.ts:114:1 › preserves non-dynamic routes when navigating directly: tests/utils.ts#L86
4) [webkit] › tests/replay-current-trial-dynamic.spec.ts:114:1 › preserves non-dynamic routes when navigating directly TimeoutError: locator.click: Timeout 2000ms exceeded. Call log: - waiting for getByRole('button', { name: 'Next', exact: true }) - locator resolved to <button type="submit" class="mantine-focus-auto mantine-active m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root">…</button> - attempting click action - waiting for element to be visible, enabled and stable - element is visible, enabled and stable - scrolling into view if needed - done scrolling - performing click action at utils.ts:86 84 | await expect(nextButton).toBeEnabled({ timeout: remaining }); 85 | try { > 86 | await nextButton.click({ timeout: Math.min(2000, remaining), noWaitAfter: true }); | ^ 87 | return; 88 | } catch (error) { 89 | const message = error instanceof Error ? error.message : String(error); at nextClick (/Users/runner/work/study/study/tests/utils.ts:86:24) at /Users/runner/work/study/study/tests/replay-current-trial-dynamic.spec.ts:127:3
[webkit] › tests/example-cleveland.spec.ts:5:1 › Test example cleveland: tests/example-cleveland.spec.ts#L51
3) [webkit] › tests/example-cleveland.spec.ts:5:1 › Test example cleveland ─────────────────────── Error: expect(received).toBeGreaterThan(expected) Expected: > 0 Received: 0 49 | await expect(vis).toBeVisible(); 50 | const visChildren = await page.locator(visSearchArray[idx]); > 51 | await expect(await visChildren.count()).toBeGreaterThan(0); | ^ 52 | 53 | // Fill in answer guess 54 | await page.getByPlaceholder('0-100').fill('66'); at /Users/runner/work/study/study/tests/example-cleveland.spec.ts:51:45
[webkit] › tests/demo-form-elements.spec.ts:52:1 › Test questionnaire component with responses and randomizing questions and responses: tests/demo-form-elements.spec.ts#L136
2) [webkit] › tests/demo-form-elements.spec.ts:52:1 › Test questionnaire component with responses and randomizing questions and responses Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: getByText('Custom Response') Expected: visible Error: strict mode violation: getByText('Custom Response') resolved to 3 elements: 1) <p data-size="sm" title="Custom Response" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Custom Response</p> aka locator('a').filter({ hasText: 'Custom Response' }) 2) <h1 data-order="1" class="m_8a5d1357 mantine-Title-root">Custom Response</h1> aka getByRole('heading', { name: 'Custom Response' }) 3) <p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">…</p> aka getByText('This page demonstrates a') Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for getByText('Custom Response') 134 | 135 | // Custom Response page > 136 | await expect(page.getByText('Custom Response')).toBeVisible(); | ^ 137 | const customResponseNextButton = page.getByRole('button', { name: 'Next', exact: true }); 138 | await expect(customResponseNextButton).toBeEnabled(); 139 | await page.getByRole('button', { name: 'Bar', exact: true }).click(); at /Users/runner/work/study/study/tests/demo-form-elements.spec.ts:136:51
[webkit] › tests/demo-form-elements.spec.ts:52:1 › Test questionnaire component with responses and randomizing questions and responses: tests/utils.ts#L86
2) [webkit] › tests/demo-form-elements.spec.ts:52:1 › Test questionnaire component with responses and randomizing questions and responses TimeoutError: locator.click: Timeout 2000ms exceeded. Call log: - waiting for getByRole('button', { name: 'Next', exact: true }) - locator resolved to <button type="submit" class="mantine-focus-auto mantine-active m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root">…</button> - attempting click action - waiting for element to be visible, enabled and stable - element is visible, enabled and stable - scrolling into view if needed - done scrolling - performing click action at utils.ts:86 84 | await expect(nextButton).toBeEnabled({ timeout: remaining }); 85 | try { > 86 | await nextButton.click({ timeout: Math.min(2000, remaining), noWaitAfter: true }); | ^ 87 | return; 88 | } catch (error) { 89 | const message = error instanceof Error ? error.message : String(error); at nextClick (/Users/runner/work/study/study/tests/utils.ts:86:24) at /Users/runner/work/study/study/tests/demo-form-elements.spec.ts:174:3
[webkit] › tests/test-skip-logic.spec.ts:192:1 › test: tests/test-skip-logic.spec.ts#L197
1) [webkit] › tests/test-skip-logic.spec.ts:192:1 › test ───────────────────────────────────────── Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: getByText('Please answer the following questions') Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for getByText('Please answer the following questions') 195 | // Make sure that we loaded in 196 | const introText = await page.getByText('Please answer the following questions'); > 197 | await expect(introText).toBeVisible(); | ^ 198 | 199 | // ***** All questions are correct ***** 200 | await goToCheck(page, 'end'); at /Users/runner/work/study/study/tests/test-skip-logic.spec.ts:197:27
[webkit] › tests/test-skip-logic.spec.ts:192:1 › test: tests/test-skip-logic.spec.ts#L89
1) [webkit] › tests/test-skip-logic.spec.ts:192:1 › test ───────────────────────────────────────── Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: getByText('Please answer the following questions') Expected: visible Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for getByText('Please answer the following questions') - waiting for" http://localhost:8080/test-skip-logic" navigation to finish... - navigated to "http://localhost:8080/test-skip-logic" 87 | await page.locator('.studyBrowserMenuDropdown').click(); 88 | await page.getByRole('menuitem', { name: 'Next Participant' }).click(); > 89 | await expect(page.getByText('Please answer the following questions')).toBeVisible(); | ^ 90 | } 91 | 92 | async function goToCheck(page: Page, check: 'response' | 'responses' | 'attention-check-singular' | 'attention-check-block' | 'nested-responses' | 'nested-responses-block' | 'block-correct' | 'block-incorrect' | 'end') { at getNextParticipant (/Users/runner/work/study/study/tests/test-skip-logic.spec.ts:89:73) at /Users/runner/work/study/study/tests/test-skip-logic.spec.ts:242:3
[webkit] › tests/test-skip-logic.spec.ts:192:1 › test: tests/test-skip-logic.spec.ts#L0
1) [webkit] › tests/test-skip-logic.spec.ts:192:1 › test ───────────────────────────────────────── Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Test timeout of 180000ms exceeded.
[webkit] › tests/test-skip-logic.spec.ts:192:1 › test: tests/test-skip-logic.spec.ts#L13
1) [webkit] › tests/test-skip-logic.spec.ts:192:1 › test ───────────────────────────────────────── Error: expect(received).toBe(expected) // Object.is equality Expected: true Received: false Call Log: - Timeout 10000ms exceeded while waiting on the predicate 11 | async function selectRadioOption(page: Page, label: string, timeout = 10000) { 12 | const main = getStudyMain(page); > 13 | await expect.poll(async () => { | ^ 14 | const radios = main.getByRole('radio', { name: label, exact: true }); 15 | const count = await radios.count().catch(() => 0); 16 | at selectRadioOption (/Users/runner/work/study/study/tests/test-skip-logic.spec.ts:13:3) at answerTrial1 (/Users/runner/work/study/study/tests/test-skip-logic.spec.ts:37:3) at goToCheck (/Users/runner/work/study/study/tests/test-skip-logic.spec.ts:142:3) at /Users/runner/work/study/study/tests/test-skip-logic.spec.ts:200:3
🧪 chromium E2E Tests
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/setup-node@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
🧪 webkit E2E Tests
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/setup-node@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
🎭 Playwright Run Summary
1 flaky [chromium] › tests/example-mvnv.spec.ts:174:1 › test ─────────────────────────────────────────── 34 passed (6.7m)
🎭 Playwright Run Summary
1 failed [webkit] › tests/test-skip-logic.spec.ts:192:1 › test ────────────────────────────────────────── 4 flaky [webkit] › tests/demo-form-elements.spec.ts:52:1 › Test questionnaire component with responses and randomizing questions and responses [webkit] › tests/example-cleveland.spec.ts:5:1 › Test example cleveland ──────────────────────── [webkit] › tests/replay-current-trial-dynamic.spec.ts:114:1 › preserves non-dynamic routes when navigating directly [webkit] › tests/test-training-feedback.spec.ts:94:1 › test ──────────────────────────────────── 1 skipped 29 passed (10.2m)