Repository navigation
Open several trace zips or a whole run in the player - #523
Merged
Merged
Conversation
This was referenced Oct 30, 2026
With traceGranularity 'test' every test writes its own zip, so a failed CI run is a folder of zips that had to be opened one at a time. The player, hosted and show-trace alike, now opens several zips or a folder at once and lists them with each test's outcome, failures first, playing the one picked without reloading. Opening a single zip behaves as before, with no list. A zip does not record its test's result, so the outcome is derived: failed when an action or step failed (a poll a passing wait retried past does not count), passed when it has actions and none failed, unknown otherwise. A jest expect or chai failure records no row and so reads as passed. Each zip is read once, one at a time; a zip that cannot be opened is its own row and does not stop the rest. show-trace takes several zips or folders; the backend lists them at TRACE_API.run and serves each by its position in the list, never by a path from the request. Closes #501 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A browser's file dialog picks files or folders, never both, so the landing screen and the header each offered two pickers. They now offer one: "Open traces" picks one or several zips, and a folder opens by dropping it anywhere on the page, which already walked folders. The header's tooltip says so, since its folder button is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
vishnuv688
force-pushed
the
refactor/adapter-duplicates-to-core
branch
from
October 30, 2026 10:13
2b01d71 to
f00bd8d
Compare
vishnuv688
force-pushed
the
feat/501-open-whole-run
branch
from
October 30, 2026 10:13
9aae1d4 to
0ca62df
Compare
4 of 18 tasks
vishnuv688
changed the base branch from
refactor/adapter-duplicates-to-core
to
main
November 2, 2026 10:20
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Closes #501. Part of #494. Stacked on #522.
With
traceGranularity: 'test'every test writes its own zip, so a failed CI run is a folder of zips that had to be opened one at a time. The player, hosted andshow-tracealike, now opens several zips or a whole folder at once, lists them with each test's outcome (failures first), and plays the one picked without reloading. Opening a single zip behaves exactly as before, with no list.Type of change
Packages touched
shared(types and contracts)core(framework-agnostic capture/reporting)elements(published element/snapshot API —@wdio/elements)service(WebdriverIO adapter)nightwatch-devtools(Nightwatch adapter)selenium-devtools(Selenium adapter)selenium-devtools-py(Selenium Python adapter)backend(server)app(UI)script(page-injected runtime)trace(Trace mode)Capability matrix
packages/conformance/src/features.tsupdated, and tables regenerated withpnpm docs:capabilities, if this adds or changes user-facing behaviourNot updated: the player opens traces from every adapter the same way, so this is not a per-adapter capability. Say if the trace-mode row should mention it.
Notes for reviewers
What it does
show-trace <zip | folder>...: exactly one zip behaves as today. Several are listed atTRACE_API.run, and each zip's bytes are served atTRACE_API.zipby its position in the list fixed at startup: the request carries only a number (^\d+$), never a path. That route has its own rate limit sized to the list, since the backend's global 100/min would block a large run (a test with 120 zips fails without it). The contract (TraceRunListing,traceZipUrl) is inshared/trace-player.ts.state-icon.ts), the test name and its path; a zip that could not be opened is its own row with the reason; a header line counts traces, failures and unopenable zips, and shows progress while loading. Rows are buttons: Tab, Up/Down, Enter or Space (Space is kept from toggling playback).Design notes
expector chai failure records no row, so that test reads as passed; the README says so.DataManager.tstocontroller/trace-serve.ts, thelocalStoragecache tocontroller/trace-cache.ts, and the backend's trace routes totrace-routes.ts.Testing
pnpm install --frozen-lockfile,pnpm build,pnpm test(3484 passed, twice) andpnpm lintare green after rebasing onto Move duplicated adapter code into core #522; one import conflict in the backend resolved.Needs checking by eye
DEVTOOLS_MODE=trace DEVTOOLS_TRACE_GRANULARITY=test pnpm demo:wdio(make one assertion fail for a failed row; drop a junk.zipin for a could-not-open row).pnpm show-trace <that folder>, two zip paths, and one zip (unchanged).pnpm player:hosted: pick several files, pick a folder, drop a folder, drop one zip (unchanged), and use the header's folder button while a list is shown. Check row layout in both themes, focus ring, Up/Down, and that switching rows clears the previous trace's selection.Not in this PR
show-tracethe zips are parsed on the page's main thread (the live build has no worker), so a large folder can stutter while loading; the hosted build uses the worker.Screenshots / recordings
To be added: the list with failed, passed and could-not-open rows, in both themes.
🤖 Generated with Claude Code