session-timeline-accessibility.spec.ts 1.1 KB

12345678910111213141516171819202122
  1. import { expect, test } from "@playwright/test"
  2. import { assistantMessage, setupTimeline, shell, userMessage } from "../performance/timeline-stability/fixture"
  3. test("space activates a focused timeline button instead of scrolling", async ({ page }) => {
  4. const shellID = "prt_space_button_shell"
  5. await setupTimeline(page, {
  6. messages: [userMessage(), assistantMessage([shell(shellID, "completed", lines(5))])],
  7. settings: { shellToolPartsExpanded: false },
  8. reducedMotion: true,
  9. })
  10. const scroller = page.locator(".scroll-view__viewport", { has: page.locator("[data-timeline-row]") })
  11. const trigger = page.locator(`[data-timeline-part-id="${shellID}"] [data-slot="collapsible-trigger"]`)
  12. await trigger.focus()
  13. const before = await scroller.evaluate((element) => element.scrollTop)
  14. await trigger.press("Space")
  15. await expect(trigger).toHaveAttribute("aria-expanded", "true")
  16. expect(await scroller.evaluate((element) => element.scrollTop)).toBe(before)
  17. })
  18. function lines(count: number) {
  19. return Array.from({ length: count }, (_, index) => `line ${index + 1}`).join("\n")
  20. }