Skip to content

feat: Complete Phase 33 - Playwright E2E Testing #202

feat: Complete Phase 33 - Playwright E2E Testing

feat: Complete Phase 33 - Playwright E2E Testing #202

Triggered via push January 7, 2026 12:44
Status Failure
Total duration 17m 14s
Artifacts 1

ci.yml

on: push
Fit to window
Zoom out
Zoom in

Annotations

10 errors, 5 warnings, and 1 notice
[chromium] › e2e/accessibility.spec.ts:70:3 › Accessibility › focusable elements are keyboard accessible: app/e2e/global-setup.ts#L121
4) [chromium] › e2e/accessibility.spec.ts:70:3 › Accessibility › focusable elements are keyboard accessible TimeoutError: locator.waitFor: Timeout 15000ms exceeded. Call log: - waiting for locator('.track-row, .sample-picker').first() to be visible at global-setup.ts:121 119 | export async function waitForAppReady(page: Page): Promise<void> { 120 | // Wait for either track rows OR sample picker to be visible > 121 | await page.locator('.track-row, .sample-picker').first().waitFor({ | ^ 122 | state: 'visible', 123 | timeout: 15000 124 | }); at waitForAppReady (/home/runner/work/keyboardia/keyboardia/app/e2e/global-setup.ts:121:60) at /home/runner/work/keyboardia/keyboardia/app/e2e/accessibility.spec.ts:17:11
[chromium] › e2e/accessibility.spec.ts:52:3 › Accessibility › page has proper heading hierarchy: app/e2e/global-setup.ts#L121
3) [chromium] › e2e/accessibility.spec.ts:52:3 › Accessibility › page has proper heading hierarchy Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── TimeoutError: locator.waitFor: Timeout 15000ms exceeded. Call log: - waiting for locator('.track-row, .sample-picker').first() to be visible at global-setup.ts:121 119 | export async function waitForAppReady(page: Page): Promise<void> { 120 | // Wait for either track rows OR sample picker to be visible > 121 | await page.locator('.track-row, .sample-picker').first().waitFor({ | ^ 122 | state: 'visible', 123 | timeout: 15000 124 | }); at waitForAppReady (/home/runner/work/keyboardia/keyboardia/app/e2e/global-setup.ts:121:60) at /home/runner/work/keyboardia/keyboardia/app/e2e/accessibility.spec.ts:17:11
[chromium] › e2e/accessibility.spec.ts:52:3 › Accessibility › page has proper heading hierarchy: app/e2e/global-setup.ts#L121
3) [chromium] › e2e/accessibility.spec.ts:52:3 › Accessibility › page has proper heading hierarchy Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── TimeoutError: locator.waitFor: Timeout 15000ms exceeded. Call log: - waiting for locator('.track-row, .sample-picker').first() to be visible at global-setup.ts:121 119 | export async function waitForAppReady(page: Page): Promise<void> { 120 | // Wait for either track rows OR sample picker to be visible > 121 | await page.locator('.track-row, .sample-picker').first().waitFor({ | ^ 122 | state: 'visible', 123 | timeout: 15000 124 | }); at waitForAppReady (/home/runner/work/keyboardia/keyboardia/app/e2e/global-setup.ts:121:60) at /home/runner/work/keyboardia/keyboardia/app/e2e/accessibility.spec.ts:17:11
[chromium] › e2e/accessibility.spec.ts:52:3 › Accessibility › page has proper heading hierarchy: app/e2e/global-setup.ts#L121
3) [chromium] › e2e/accessibility.spec.ts:52:3 › Accessibility › page has proper heading hierarchy TimeoutError: locator.waitFor: Timeout 15000ms exceeded. Call log: - waiting for locator('.track-row, .sample-picker').first() to be visible at global-setup.ts:121 119 | export async function waitForAppReady(page: Page): Promise<void> { 120 | // Wait for either track rows OR sample picker to be visible > 121 | await page.locator('.track-row, .sample-picker').first().waitFor({ | ^ 122 | state: 'visible', 123 | timeout: 15000 124 | }); at waitForAppReady (/home/runner/work/keyboardia/keyboardia/app/e2e/global-setup.ts:121:60) at /home/runner/work/keyboardia/keyboardia/app/e2e/accessibility.spec.ts:17:11
[chromium] › e2e/accessibility.spec.ts:25:3 › Accessibility › interactive elements have accessible names: app/e2e/global-setup.ts#L121
2) [chromium] › e2e/accessibility.spec.ts:25:3 › Accessibility › interactive elements have accessible names Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── TimeoutError: locator.waitFor: Timeout 15000ms exceeded. Call log: - waiting for locator('.track-row, .sample-picker').first() to be visible at global-setup.ts:121 119 | export async function waitForAppReady(page: Page): Promise<void> { 120 | // Wait for either track rows OR sample picker to be visible > 121 | await page.locator('.track-row, .sample-picker').first().waitFor({ | ^ 122 | state: 'visible', 123 | timeout: 15000 124 | }); at waitForAppReady (/home/runner/work/keyboardia/keyboardia/app/e2e/global-setup.ts:121:60) at /home/runner/work/keyboardia/keyboardia/app/e2e/accessibility.spec.ts:17:11
[chromium] › e2e/accessibility.spec.ts:25:3 › Accessibility › interactive elements have accessible names: app/e2e/global-setup.ts#L121
2) [chromium] › e2e/accessibility.spec.ts:25:3 › Accessibility › interactive elements have accessible names Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── TimeoutError: locator.waitFor: Timeout 15000ms exceeded. Call log: - waiting for locator('.track-row, .sample-picker').first() to be visible at global-setup.ts:121 119 | export async function waitForAppReady(page: Page): Promise<void> { 120 | // Wait for either track rows OR sample picker to be visible > 121 | await page.locator('.track-row, .sample-picker').first().waitFor({ | ^ 122 | state: 'visible', 123 | timeout: 15000 124 | }); at waitForAppReady (/home/runner/work/keyboardia/keyboardia/app/e2e/global-setup.ts:121:60) at /home/runner/work/keyboardia/keyboardia/app/e2e/accessibility.spec.ts:17:11
[chromium] › e2e/accessibility.spec.ts:25:3 › Accessibility › interactive elements have accessible names: app/e2e/global-setup.ts#L121
2) [chromium] › e2e/accessibility.spec.ts:25:3 › Accessibility › interactive elements have accessible names TimeoutError: locator.waitFor: Timeout 15000ms exceeded. Call log: - waiting for locator('.track-row, .sample-picker').first() to be visible at global-setup.ts:121 119 | export async function waitForAppReady(page: Page): Promise<void> { 120 | // Wait for either track rows OR sample picker to be visible > 121 | await page.locator('.track-row, .sample-picker').first().waitFor({ | ^ 122 | state: 'visible', 123 | timeout: 15000 124 | }); at waitForAppReady (/home/runner/work/keyboardia/keyboardia/app/e2e/global-setup.ts:121:60) at /home/runner/work/keyboardia/keyboardia/app/e2e/accessibility.spec.ts:17:11
[chromium] › e2e/accessibility.spec.ts:20:3 › Accessibility › page has accessible title: app/e2e/global-setup.ts#L121
1) [chromium] › e2e/accessibility.spec.ts:20:3 › Accessibility › page has accessible title ─────── Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── TimeoutError: locator.waitFor: Timeout 15000ms exceeded. Call log: - waiting for locator('.track-row, .sample-picker').first() to be visible at global-setup.ts:121 119 | export async function waitForAppReady(page: Page): Promise<void> { 120 | // Wait for either track rows OR sample picker to be visible > 121 | await page.locator('.track-row, .sample-picker').first().waitFor({ | ^ 122 | state: 'visible', 123 | timeout: 15000 124 | }); at waitForAppReady (/home/runner/work/keyboardia/keyboardia/app/e2e/global-setup.ts:121:60) at /home/runner/work/keyboardia/keyboardia/app/e2e/accessibility.spec.ts:17:11
[chromium] › e2e/accessibility.spec.ts:20:3 › Accessibility › page has accessible title: app/e2e/global-setup.ts#L121
1) [chromium] › e2e/accessibility.spec.ts:20:3 › Accessibility › page has accessible title ─────── Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── TimeoutError: locator.waitFor: Timeout 15000ms exceeded. Call log: - waiting for locator('.track-row, .sample-picker').first() to be visible at global-setup.ts:121 119 | export async function waitForAppReady(page: Page): Promise<void> { 120 | // Wait for either track rows OR sample picker to be visible > 121 | await page.locator('.track-row, .sample-picker').first().waitFor({ | ^ 122 | state: 'visible', 123 | timeout: 15000 124 | }); at waitForAppReady (/home/runner/work/keyboardia/keyboardia/app/e2e/global-setup.ts:121:60) at /home/runner/work/keyboardia/keyboardia/app/e2e/accessibility.spec.ts:17:11
[chromium] › e2e/accessibility.spec.ts:20:3 › Accessibility › page has accessible title: app/e2e/global-setup.ts#L121
1) [chromium] › e2e/accessibility.spec.ts:20:3 › Accessibility › page has accessible title ─────── TimeoutError: locator.waitFor: Timeout 15000ms exceeded. Call log: - waiting for locator('.track-row, .sample-picker').first() to be visible at global-setup.ts:121 119 | export async function waitForAppReady(page: Page): Promise<void> { 120 | // Wait for either track rows OR sample picker to be visible > 121 | await page.locator('.track-row, .sample-picker').first().waitFor({ | ^ 122 | state: 'visible', 123 | timeout: 15000 124 | }); at waitForAppReady (/home/runner/work/keyboardia/keyboardia/app/e2e/global-setup.ts:121:60) at /home/runner/work/keyboardia/keyboardia/app/e2e/accessibility.spec.ts:17:11
Lint: app/src/state/grid.tsx#L36
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
Lint: app/src/state/grid.tsx#L13
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
Lint: app/src/state/grid.tsx#L8
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
Lint: app/src/components/ScaleSidebar.tsx#L37
The 'noteNames' array makes the dependencies of useMemo Hook (at line 95) change on every render. To fix this, wrap the initialization of 'noteNames' in its own useMemo() Hook
Lint: app/src/components/ScaleSidebar.tsx#L37
The 'noteNames' array makes the dependencies of useMemo Hook (at line 66) change on every render. To fix this, wrap the initialization of 'noteNames' in its own useMemo() Hook
🎭 Playwright Run Summary
110 failed [chromium] › e2e/accessibility.spec.ts:20:3 › Accessibility › page has accessible title ──────── [chromium] › e2e/accessibility.spec.ts:25:3 › Accessibility › interactive elements have accessible names [chromium] › e2e/accessibility.spec.ts:52:3 › Accessibility › page has proper heading hierarchy [chromium] › e2e/accessibility.spec.ts:70:3 › Accessibility › focusable elements are keyboard accessible [chromium] › e2e/accessibility.spec.ts:86:3 › Accessibility › step cells can be activated with keyboard [chromium] › e2e/accessibility.spec.ts:120:3 › Accessibility › color contrast meets minimum requirements [chromium] › e2e/accessibility.spec.ts:139:3 › Accessibility › focus indicators are visible ──── [chromium] › e2e/accessibility.spec.ts:159:3 › Accessibility › no elements with tabindex > 0 ─── [chromium] › e2e/accessibility.spec.ts:164:3 › Accessibility › images have alt text ──────────── [chromium] › e2e/core.spec.ts:23:3 › Drag to Paint Steps › can drag to paint multiple steps active [chromium] › e2e/core.spec.ts:83:3 › Drag to Paint Steps › can drag to erase multiple steps ──── [chromium] › e2e/core.spec.ts:137:3 › Tempo Control › can drag to change tempo ───────────────── [chromium] › e2e/core.spec.ts:183:3 › Tempo Control › tempo stays within valid range ─────────── [chromium] › e2e/core.spec.ts:233:3 › Track Management › can delete a track ──────────────────── [chromium] › e2e/core.spec.ts:287:3 › Track Management › can reorder tracks by dragging ──────── [chromium] › e2e/core.spec.ts:368:3 › Swing Control › can drag to change swing ───────────────── [chromium] › e2e/core.spec.ts:412:3 › Session Name › can edit session name ───────────────────── [chromium] › e2e/core.spec.ts:452:3 › Step Count Control › can change track step count ───────── [chromium] › e2e/keyboard.spec.ts:20:3 › Keyboard Navigation › Tab navigates through interactive elements [chromium] › e2e/keyboard.spec.ts:41:3 › Keyboard Navigation › Shift+Tab navigates backwards ─── [chromium] › e2e/keyboard.spec.ts:55:3 › Keyboard Navigation › Space/Enter activates focused elements [chromium] › e2e/keyboard.spec.ts:82:3 › Keyboard Navigation › Escape closes modal dialogs ───── [chromium] › e2e/keyboard.spec.ts:101:3 › Keyboard Navigation › Arrow keys navigate within grids [chromium] › e2e/keyboard.spec.ts:133:3 › Keyboard Shortcuts › Space toggles playback (if implemented) [chromium] › e2e/keyboard.spec.ts:152:3 › Keyboard Shortcuts › Ctrl+A selects all (if implemented) [chromium] › e2e/keyboard.spec.ts:159:3 › Keyboard Shortcuts › Delete clears selected steps (if implemented) [chromium] › e2e/keyboard.spec.ts:178:3 › Keyboard Shortcuts › Undo/Redo with Ctrl+Z and Ctrl+Y (if implemented) [chromium] › e2e/keyboard.spec.ts:209:3 › Focus Management › focus is visible on all focusable elements [chromium] › e2e/keyboard.spec.ts:245:3 › Focus Management › focus does not get trapped ──────── [chromium] › e2e/keyboard.spec.ts:271:3 › Focus Management › focus returns after closing dialogs [chromium] › e2e/last-cell-flicker.spec.ts:54:3 › Last cell flickering › last cell should only be highlighted when playhead is on it [chromium] › e2e/mobile-android.spec.ts:16:3 › Android Mobile › app works on Android ─────────── [chromium] › e2e/mobile-iphone.spec.ts:21:3 › Mobile Layout (iPhone) › app is usable on mobile viewport [chromium] › e2e/mobile-iphone.spec.ts:31:3 › Mobile Layout (iPhone) ›

Artifacts

Produced during runtime
Name Size Digest
playwright-report Expired
215 MB
sha256:89ba487aec9a74e212ded4ade32442cfb56861bbadb0d530cf611915f45ee7f1