Commit graph

4 commits

Author SHA1 Message Date
Daniel Han
c8b13b7fe2 CI(ui-extra): use Enter to submit Compare composer + add aria-label
Compare-mode composer (shared-composer.tsx) wraps the send button in
TooltipIconButton without setting aria-label="Send message", so the
playwright_extra_ui Compare step's button[aria-label="Send message"]
selector matched 0 elements and timed out at 30s.

Two changes:

  1. Test: switch from clicking the send button to pressing Enter on
     the textarea. The composer's onKeyDown handler maps plain Enter
     to send(), which is also the natural user flow.

  2. Frontend: add aria-label="Send message" to the compare composer's
     send button. Single-thread composer (thread.tsx) already sets
     this; mirror it for accessibility consistency and to keep the
     selector working as a fallback in older builds.
2026-05-07 06:01:19 +00:00
Daniel Han
4aff5610e5 CI(ui): nuke startViewTransition + force=True nav clicks (Chromium reliability)
Chat UI Tests was failing in CI with "<html> intercepts pointer events"
on the New Chat sidebar click. Root cause: after the theme toggle's
animated reveal, Chromium's view-transition state can leave the html
element reported as the topmost click target for a beat -- even after
the documentElement classList has settled. The previous CSS-only
neutraliser (animation: none + pointer-events: auto) wasn't enough
once the runtime captured the html.

Two-pronged fix in both playwright_chat_ui.py and playwright_extra_ui.py:

  1. Monkey-patch document.startViewTransition in add_init_script so
     the callback runs synchronously, no animation pipeline runs, and
     the html is never captured. This is the only way to fully
     neutralise the transition without disabling the feature in the
     app code.
  2. Use force=True + a 5s timeout in click_nav() (sidebar nav
     clicks). The element IS visible + enabled; force=True bypasses
     Playwright's actionability check belt-and-suspenders if the
     monkey-patch ever misses an edge case.

Also broadened the CSS pseudo-element list (added ::view-transition,
-group, -image-pair) to display:none, so even if startViewTransition
is somehow re-attached, the captured pseudos can't paint over the page.
2026-05-07 05:39:31 +00:00
pre-commit-ci[bot]
3dfba6b1df [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-05-07 04:09:29 +00:00
Daniel Han
240efa86f8 CI(ui): add second Playwright job covering Compare/Recipes/Export/Studio/Settings
The first Chat UI Tests step ends by clicking the Shutdown menuitem,
which leaves the server dead. So a SECOND Studio is booted on port
18894 in the same job (warm install -- adds ~3-5s) and a second
Playwright test exercises the routes the chat UI doesn't touch:

  1. /chat?compare=... -- assigns two models, sends 2 prompts, asserts
     both panes respond (so 4 total new assistant bubbles).
  2. /data-recipes -- clicks the first template card, verifies the
     React-Flow canvas mounts.
  3. /export -- in chat-only mode (CI default) asserts the route
     redirects; in non-chat-only asserts [data-tour='export-cta'] +
     HF token field exist.
  4. /studio -- chat-only redirects, non-chat-only asserts the three
     tabs (Configure / Current run / History) + [data-tour='studio-*']
     anchors exist.
  5. Settings dialog -- Cmd/Ctrl-, opens it, cycles through every
     visible tab (General / Profile / Appearance / Chat / Developer /
     About), asserts each tab body is non-trivial.

Same STRICT=1 mode + soft_fail() pattern as playwright_chat_ui.py.

Both Playwright runs' screenshots + studio logs are bundled into the
existing studio-ui-smoke-artifacts upload; the artifact name doesn't
change.
2026-05-07 04:09:09 +00:00