UNPKG

browsertime

Version:

Get performance metrics from your web page using Browsertime.

588 lines (443 loc) 270 kB
# Browsertime changelog (we do [semantic versioning](https://semver.org)) ## 27.4.1 - 2026-05-25 ### Fixed * `--chrome.coverage` no longer reports "0 B unused" for functions that executed at least once. The JS used-bytes calculation took the union of every V8 range with count > 0, but V8 returns nested ranges — an outer range over the whole function body and inner ranges over sub-blocks. If a function ran at all, its outer range already covered the whole body and the inner count == 0 ranges (the actual dead branches) got absorbed into the union and contributed nothing. On modern bundles where module-evaluation top-level code runs for almost every function, the per-script unused-% collapsed to roughly zero across the board, leaving sitespeed.io rendering a "0 B unused" column on pages that obviously ship plenty of dead code. The calculation now walks the ranges as nested intervals, painting the innermost range's count at every byte (the same definition Chrome DevTools' Coverage panel uses), so dead branches inside executed functions show up correctly. CSS rule-usage tracking returns flat, non-overlapping ranges and is unchanged [#2484](https://github.com/sitespeedio/browsertime/pull/2484). ## 27.4.0 - 2026-05-24 ### Added * JS/CSS coverage collection for Chrome. `--chrome.coverage` turns it on for every iteration for users who want the data and accept that detailed V8 coverage deoptimizes scripts and will skew their timing metrics. `--enableProfileRun` also turns coverage on for Chrome alongside the existing trace, so users who want coverage without affecting their timings can lean on the same extra-iteration pattern they already use for tracing — the result is merged back into the main `browsertime.json` so consumers like sitespeed.io see the data in the same place they read every other metric. Each entry has a per-file breakdown (`url`, `totalBytes`, `usedBytes`, `unusedBytes`, `unusedPercent`) [#2480](https://github.com/sitespeedio/browsertime/pull/2480). ### Fixed * HAR post-processing no longer throws when a page has no matching entries. Occasionally a HAR contains a page whose `pageref` has no entries — typically a navigation that didn't produce any requests, or an extension-injected page. `getDocumentRequests` and `getFinalURL` dereferenced `shift()` / `pop()` without a guard, and `getMainDocumentTimings` wrapped its entire per-page loop in a single try/catch so one bad page wiped out the main-document timings for every other page in the same HAR. Downstream this surfaced as a noisy triplet of warnings followed by an empty coach-data payload in sitespeed.io. The three crash points are now guarded and unresolvable pages are skipped [#2483](https://github.com/sitespeedio/browsertime/pull/2483). * Bumped `geckodriver` to a version with native ARM-64 support [#2482](https://github.com/sitespeedio/browsertime/pull/2482). ## 27.3.0 - 2026-05-20 ### Added * `browsertime --help` is now navigable by topic. The default view shows a short curated list of common options plus the available topic names. `browsertime --help <topic>` shows just that topic, and `browsertime --help-all` reproduces the historical full dump for scripts and power users. The old single-screen dump of every option from all 13 topic groups was overwhelming for new users and slow to skim; the topic-filtered view follows the curl/ffmpeg pattern [#2467](https://github.com/sitespeedio/browsertime/pull/2467). ### Fixed * TypeScript types and IntelliSense for navigation scripts are tightened across the script-facing surface. A new `BrowsertimeScript` type alias lets scripts annotate their default export and get both `context` and `commands` typed in one line. The high-level command helpers (`navigate`, `find`, `getText`, `fill`, `hover`, `press`, `getTitle`, `waitForUrl`, …) now surface their JSDoc parameter and return types in IntelliSense instead of being typed as `Function`, and `commands.find` resolves to a real `WebElement` so chained calls get completion from selenium-webdriver [#2476](https://github.com/sitespeedio/browsertime/pull/2476). `context.options`, `context.result`, and `context.taskData` are typed as `Record<string, any>` so editors offer completion on `context.options.` etc. [#2478](https://github.com/sitespeedio/browsertime/pull/2478). `commands.mouse` is now a proper shape (selector typed as `string`, `singleClick`'s options surface `waitForNavigation`) instead of an anonymous object literal, and `measure.stop` / `measure.clickAndMeasure` / `measure.stopAsError` return types are explicit (`Promise<void>` / `Promise<unknown>`) instead of `Promise<any>` [#2479](https://github.com/sitespeedio/browsertime/pull/2479). * How Browsertime publishes its TypeScript types is now safer. `scripting.d.ts` moved to the repo root next to `package.json` so it can't be clobbered by a future `tsc` outDir change, the `types` condition comes first under `exports` to match TypeScript's documented resolution rules, and `publint` runs as part of `prepublishOnly` so common package.json mistakes fail before a release goes out [#2477](https://github.com/sitespeedio/browsertime/pull/2477). * Replaced the direct `lodash.merge` dependency with a small in-tree `merge()` helper in `lib/support/util.js`. The helper matches lodash's actual semantics for the cases Browsertime relies on — arrays merged by index, `undefined` source values skipped unless the key is missing on the target, `Date`/`RegExp`/class instances passed by reference, prototype-pollution keys rejected — which finishes the lodash unbundling the same way sitespeed.io did [#2468](https://github.com/sitespeedio/browsertime/pull/2468). * Bumped dependencies: `chrome-har` 1.3.1 [#2469](https://github.com/sitespeedio/browsertime/pull/2469), `chrome-remote-interface` and `selenium-webdriver` [#2475](https://github.com/sitespeedio/browsertime/pull/2475), `@sitespeed.io/log` 2.0 [#2471](https://github.com/sitespeedio/browsertime/pull/2471), `chromedriver` / `edgedriver` / `geckodriver` [#2472](https://github.com/sitespeedio/browsertime/pull/2472). ## 27.2.0 - 2026-05-12 ### Added * Surface the page-level `recalculateStyle` summary (beforeFCP / beforeLCP element counts + durations) on the first HAR page as `_renderBlocking.recalculateStyle`. The per-request `_renderBlocking` map already projected onto each entry stays where it is — the page-level summary is what powers the "Elements that needed recalculate style before FCP" view and was previously only reachable via `browsertime.json` [#2466](https://github.com/sitespeedio/browsertime/pull/2466). ## 27.1.0 - 2026-05-06 ### Added * Three new analyses on `result.cpu` derived from the same Chrome `trace.json` that's already collected when `--cpu` is on. `scriptCosts` produces the per-URL parse / compile / execute / total breakdown that Lighthouse's bootup-time audit shows, sorted by total descending. `forcedReflows` walks the main-thread task tree for `Layout` / `UpdateLayoutTree` events nested inside JS-driven tasks (`EventDispatch`, `FunctionCall`, `TimerFire`, `FireAnimationFrame`, …) — every match is a synchronous reflow caused by JavaScript reading a layout-triggering property mid-handler, reported with the script that triggered it. `nonCompositedAnimations` surfaces `Animation` events whose `compositeFailed` bitmask is non-zero, returning the unsupported properties (`top`, `box-shadow`, `filter`, …) so consumers can see what to swap for the GPU-friendly equivalent. Each new analysis is wrapped in its own try / catch so a bug in one can't poison the existing `categories` / `events` / `urls` payload [#PR1](https://github.com/sitespeedio/browsertime/pull/PR1). ### Fixed * Replace the unmaintained `@sitespeed.io/tracium` dependency (extracted from Lighthouse circa 2017, last release 0.3.3) with an in-tree ESM port at `lib/chrome/trace/`. The algorithm is a 1:1 port; output of `computeMainThreadTasks` is byte-equivalent for any trace, so existing `result.cpu.{categories,events,urls}` consumers see no change. Pulling the parser inline lets new analyses ship at Browsertime's release cadence without a second `npm publish` step in between [#PR1](https://github.com/sitespeedio/browsertime/pull/PR1). * Modernise the trace-event classifier. The original list only knew about ~30 event names, so on busy 2026-era pages roughly half the trace fell through to "other" — on a sample cnet run that meant 1.3 s of "other" hiding `RunTask`, `v8.run`, `IntersectionObserverController::computeIntersections`, `PrePaint`, `Commit`, `Layerize`, `v8.callFunction`, `V8.DeserializeContext` and friends. The expanded list draws from modern Lighthouse + the WebPageTest-derived map in waterfall-tools + direct sampling of real traces, and a new `groupForEvent()` lookup adds `V8.GC*` prefix matching so future V8 GC phases auto-classify [#PR1](https://github.com/sitespeedio/browsertime/pull/PR1). * Bump `chrome-har` to 1.3.0 to pick up the new `_renderBlocking` field on each entry, lifting Chrome's CDP `renderBlockingStatus` (Chrome 108+) so downstream HAR consumers can see which resources blocked first paint without inferring it from the trace. ## 27.0.4 - 2026-05-05 ### Fixed * Fix Safari iOS video time scale [#2457](https://github.com/sitespeedio/browsertime/pull/2457). This make the video and Safari metric match. ## 27.0.3 - 2026-05-04 ### Fixed * Fix so INP only is calculated on interactions with an id [#2456](https://github.com/sitespeedio/browsertime/pull/2456). ## 27.0.2 - 2026-05-02 ### Fixed * SPA scripts no longer drop a HAR page when Chrome's soft-navigation `PerformanceObserver` entry doesn't fire. [#2438](https://github.com/sitespeedio/browsertime/pull/2438) gated HAR-page creation on Chrome detecting all three soft-navigation criteria (interaction + URL change + visible paint within a short window), but real SPAs like Grafana sometimes paint too late and Chrome never emits the entry — chrome-har then sees only `Network.*` events for that measurement and emits zero pages, breaking downstream per-iteration page indexing in sitespeed.io. When the measurement was started without a URL (`commands.measure.start(alias)` form) and no soft-nav entry was detected, fall back to a synthetic page anchored at the current `location.href` so each `measure.start` produces exactly one HAR page. ## 27.0.1 - 2026-05-02 ### Fixed * `commands.click` now falls back to a JavaScript click when the Actions API can't reach the element. Hidden elements have a zero-size bounding box, so the Actions API click that became the default in [#2381](https://github.com/sitespeedio/browsertime/pull/2381) silently moved the pointer to (0,0) and clicked nothing instead of triggering the handler. The click command now pre-checks `isDisplayed()` and uses a JS click when the element isn't displayed, and otherwise catches any Actions API failure and retries with a JS click. Each fallback is logged at info level so it's visible without `--verbose`. Restores the documented "hide everything before clicking" pattern used by visual-metric scripts [#2452](https://github.com/sitespeedio/browsertime/pull/2452). * `engineDelegate.afterBrowserStopped()` is no longer called twice per iteration on the happy path. [#2432](https://github.com/sitespeedio/browsertime/pull/2432) added a safety-net cleanup call in the iteration `finally` block so failure paths still release long-lived helpers, but in the happy path `_stopBrowser` had already invoked the cleanup, so it ran twice. The visible symptom on Chrome was a spurious `ENOENT` error from the second `cleanUserDataDir` (the first call had already removed the directory). It could also double-terminate the iOS simulator's Safari and the `ios-capture` server. The safety-net now runs only when `_stopBrowser` didn't already reach the cleanup [#2453](https://github.com/sitespeedio/browsertime/pull/2453). * `cleanUserDataDir` cleanup now uses `rm(..., { recursive: true, force: true })` so a missing directory is treated as already-cleaned. Defense in depth alongside [#2453](https://github.com/sitespeedio/browsertime/pull/2453): if anything in the future double-calls the Chrome cleanup, or if Chrome failed to create the directory in the first place, the cleanup stays quiet instead of logging a spurious `ENOENT` [#2454](https://github.com/sitespeedio/browsertime/pull/2454). ## 27.0.0 - 2026-05-01 ### Highlights This release is a big push on the scripting API and on iOS real-device testing. All old scripting commands will work but we have new and improveed syntax that you can use if you follow our documentation. This release also tries to support the upcoming Chrome soft navigations. * **Unified selector syntax across commands.** All interaction commands now accept selectors directly (`commands.click('#btn')`, `commands.addText('#input', 'text')`, etc.) with optional `id:`/`xpath:`/`text:`/`link:`/`name:`/`class:` prefixes. The old `AndWait` family is deprecated in favour of `{ waitForNavigation: true }`. * **A much bigger convenience-command surface.** New `type`, `find`, `getText`, `getValue`, `isVisible`, `exists`, `clear`, `fill`, `getAttribute`, `isEnabled`, `isChecked`, `hover`, `press`, `getTitle`, `getUrl`, `check`, `uncheck`, `scrollIntoView`, `select.byText`, `waitForUrl`, `clickAndMeasure`, `click.byText`, plus a full `cookie` command. * **Chrome soft navigations.** SPA route changes (React, Next.js, Vue, Turbo) now produce a HAR page and the standard FCP/LCP/CLS/INP metrics, using Chrome's PerformanceObserver soft-navigation entry type. * **Safari on iOS over USB.** HAR via `ios_webkit_debug_proxy`, plus video recording and visual metrics via a CoreMediaIO screen-capture helper. * **TypeScript navigation scripts** are now supported on Node.js 22.18.0+ via native type stripping. ### Breaking * Changed default `--timeouts.elementWait` from 0 to 6000ms. All element commands (click, addText) now auto-wait up to 6 seconds for elements to appear. Set `--timeouts.elementWait 0` to restore the old behavior [#2389](https://github.com/sitespeedio/browsertime/pull/2389). * Click commands now use the Selenium Actions API for real OS-level mouse events instead of JavaScript `.click()`. Elements must be visible and interactable. If you need to click a hidden element, use `commands.js.run()` instead [#2381](https://github.com/sitespeedio/browsertime/pull/2381). ### Added * Unified selector syntax for all interaction commands. You can now call `commands.click('#btn')`, `commands.addText('#input', 'text')`, `commands.wait('#el', { timeout: 5000 })`, `commands.select('#dropdown', 'value')`, and `commands.set('#field', 'value')` directly. Supports prefixes: `id:`, `xpath:`, `text:`, `link:`, `name:`, `class:` — CSS selector is the default [#2390](https://github.com/sitespeedio/browsertime/pull/2390) [#2408](https://github.com/sitespeedio/browsertime/pull/2408). * The `AndWait` methods are deprecated in favour of `{ waitForNavigation: true }` [#2390](https://github.com/sitespeedio/browsertime/pull/2390) [#2396](https://github.com/sitespeedio/browsertime/pull/2396). * Navigation methods (back, forward, refresh) now support `{ waitForNavigation: true }` for consistency [#2408](https://github.com/sitespeedio/browsertime/pull/2408). * Added `commands.type(selector, text)` as a shorthand for `addText` with a more conventional parameter order [#2387](https://github.com/sitespeedio/browsertime/pull/2387). * Added `commands.find(selector, options)` helper that combines element lookup with optional waiting and visibility checks [#2386](https://github.com/sitespeedio/browsertime/pull/2386). * Added `commands.measure.clickAndMeasure(alias, selector)` shortcut for the common measure.start/click/measure.stop pattern [#2382](https://github.com/sitespeedio/browsertime/pull/2382). * Added `commands.click.byText(text)` to click any element by visible text, not just links [#2384](https://github.com/sitespeedio/browsertime/pull/2384). * Added `--timeouts.elementWait` option for auto-waiting on elements before interaction [#2383](https://github.com/sitespeedio/browsertime/pull/2383). * Added support for TypeScript scripts (.ts, .mts, .cts) using Node.js native type stripping (requires Node.js 22.18.0+) [#2363](https://github.com/sitespeedio/browsertime/pull/2363). * Added `commands.getText(selector)`, `commands.getValue(selector)`, and `commands.isVisible(selector)` convenience methods [#2411](https://github.com/sitespeedio/browsertime/pull/2411). * Added `commands.exists(selector, { timeout })` for checking element presence without throwing [#2412](https://github.com/sitespeedio/browsertime/pull/2412). * Added `commands.clear(selector)` to clear form element content [#2413](https://github.com/sitespeedio/browsertime/pull/2413). * Added `commands.fill({ selector: text, ... })` for filling multiple form fields at once [#2414](https://github.com/sitespeedio/browsertime/pull/2414). * Added unified selector syntax to mouse commands: `commands.mouse.singleClick(selector)`, `commands.mouse.doubleClick(selector)`, `commands.mouse.contextClick(selector)`, `commands.mouse.moveTo(selector)` [#2415](https://github.com/sitespeedio/browsertime/pull/2415). * Added `commands.cookie` for managing browser cookies: `get`, `getAll`, `set`, `delete`, `deleteAll` [#2420](https://github.com/sitespeedio/browsertime/pull/2420). * Added `commands.getAttribute(selector, name)`, `commands.isEnabled(selector)`, and `commands.isChecked(selector)` for element state queries [#2421](https://github.com/sitespeedio/browsertime/pull/2421). * Added `commands.hover(selector)` as alias for mouse.moveTo, `commands.press(key)` for keyboard input, `commands.getTitle()` and `commands.getUrl()` for page info [#2422](https://github.com/sitespeedio/browsertime/pull/2422). * Added `commands.check(selector)` and `commands.uncheck(selector)` for checkbox/radio interactions [#2423](https://github.com/sitespeedio/browsertime/pull/2423). * Added `commands.scrollIntoView(selector)` to scroll elements into the viewport [#2425](https://github.com/sitespeedio/browsertime/pull/2425). * Added `commands.select.byText(selector, text)` to select dropdown options by visible text [#2426](https://github.com/sitespeedio/browsertime/pull/2426). * Added `commands.waitForUrl(pattern, { timeout })` to wait for URL changes after navigation [#2427](https://github.com/sitespeedio/browsertime/pull/2427). * Added video recording and visual metrics for Safari on iOS over USB. A native helper captures the device's screen via CoreMediaIO and pipes frames to ffmpeg. The device is woken into screen-capture mode automatically — no manual QuickTime step required [#2432](https://github.com/sitespeedio/browsertime/pull/2432) [#2436](https://github.com/sitespeedio/browsertime/pull/2436). * Added HAR capture for Safari on iOS via `ios_webkit_debug_proxy`. Browsertime starts and stops `iwdp` automatically and exits with a clear error if it isn't installed (`brew install ios-webkit-debug-proxy`). New `--safari.includeResponseBodies` CLI option. macOS Safari is unaffected [#2431](https://github.com/sitespeedio/browsertime/pull/2431). * Added soft navigation support for Chrome. Single-page app route changes (React, Next.js, Vue, Turbo) now produce a HAR page and the standard FCP/LCP/CLS/INP metrics, using Chrome's PerformanceObserver soft-navigation entry type to confirm user interaction + URL change + visible paint [#2438](https://github.com/sitespeedio/browsertime/pull/2438). * Updated dependencies to latest compatible versions: chrome-har 1.2.1, selenium-webdriver 4.43.0, execa 9.6.1, jimp 1.6.1 [#2437](https://github.com/sitespeedio/browsertime/pull/2437). * Firefox 149 in the Docker container [#2375](https://github.com/sitespeedio/browsertime/pull/2375). * Record the full Chrome/Edge configuration browsertime applied to the browser (args, preferences, mobile emulation, binary path, extensions count) under `info.browser` in the result JSON, not just what the user passed via `--chrome.args` [#2447](https://github.com/sitespeedio/browsertime/pull/2447). * Record Firefox preferences and the resolved binary path under `info.browser` in the result JSON [#2448](https://github.com/sitespeedio/browsertime/pull/2448). * Write long-task ranges and user-timing marks/measures into the HAR under `pages[].pageTimings` as `_longTasks` (array of `[startMs, endMs]` tuples) and `_userTimings` (object keyed by entry name → startTime), so downstream waterfall viewers can show what the browser was doing between requests [#2449](https://github.com/sitespeedio/browsertime/pull/2449). * Added modern device profiles to the mobile emulation device list [#2446](https://github.com/sitespeedio/browsertime/pull/2446). ### Fixed * Pin the iOS Safari tab being measured so unrelated open tabs cannot clobber the active inspector target. The WebDriver tab is navigated to a sentinel URL and identified by it before iWDP messages are processed, otherwise an unrelated `Target.targetCreated` event could leave the HAR empty [#2440](https://github.com/sitespeedio/browsertime/pull/2440). * Fixed `drawtext` failing on ffmpeg 8 by quoting font paths and forwarding ffmpeg stderr so font/filter errors are visible [#2435](https://github.com/sitespeedio/browsertime/pull/2435). * Fixed Firefox network idle timeout on repeated iterations. The WebSocket message listener was never removed between iterations, causing the inflight counter to go negative [#2391](https://github.com/sitespeedio/browsertime/pull/2391). * Fixed Firefox network idle timeout when no network events arrive. Timestamps were initialized as undefined causing the idle check to never trigger [#2394](https://github.com/sitespeedio/browsertime/pull/2394). * Fixed intermittent crash when setting orange background before document.body exists on Edge/Windows [#2393](https://github.com/sitespeedio/browsertime/pull/2393). * Element interaction error messages now include the current page URL for easier debugging [#2385](https://github.com/sitespeedio/browsertime/pull/2385). * Added `actions.clear()` after `perform()` in all mouse commands to prevent pointer/key state leaking between actions [#2406](https://github.com/sitespeedio/browsertime/pull/2406). * Standardized error handling in all command `run()` methods using `executeCommand` with URL context. Fixed typo in select.deselectById and removed dead code in wait [#2410](https://github.com/sitespeedio/browsertime/pull/2410). * Added clear error message when loading TypeScript scripts on Node.js older than 22.18.0 [#2404](https://github.com/sitespeedio/browsertime/pull/2404). * Disabled the "You can zoom in and out" popup on Android [#2378](https://github.com/sitespeedio/browsertime/pull/2378). * Warn when `--viewPort` is set with a width below 500px on desktop Chrome. Chrome enforces a hard ~500px minimum window width and silently clamps narrower requests, but browsertime kept recording the filmstrip and video at the requested size, leaving captures cropped. The warning points users at mobile emulation, which lays out at the requested size while the OS window stays desktop-sized [#2445](https://github.com/sitespeedio/browsertime/pull/2445). * Stop a perceptual SSIM failure from discarding every other visual metric for the iteration. `calculate_perceptual_speed_index` now returns `(None, None)` on internal errors instead of letting the exception propagate up through `calculate_visual_metrics`, so SpeedIndex, FCP, LCP and the rest still flow through when SSIM can't run [#2444](https://github.com/sitespeedio/browsertime/pull/2444). * Drain ffmpeg/ffprobe stderr after the process exits in `visualmetrics-portable.py`. The previous Popen+poll loop dropped output buffered between the last read and exit — silently losing `keep pts:` lines and therefore filmstrip frames — and could deadlock when ffmpeg's debug output filled the OS pipe buffer [#2443](https://github.com/sitespeedio/browsertime/pull/2443). * Converted `visualmetrics-portable.py` path handling to `pathlib` for consistent cross-platform behaviour [#2442](https://github.com/sitespeedio/browsertime/pull/2442). ## 26.3.2 - 2026-01-24 ### Fixed * Hello the new and fixed bidi-har 0.0.22 that fixes the response body [#2361](https://github.com/sitespeedio/browsertime/pull/2361). ## 26.3.1 - 2026-01-11 ### Fixed * Reverting back to bidi-har 0.0.18. There where error/failures either in bidi har or in combination with browsertime in the latest release [#2360](https://github.com/sitespeedio/browsertime/pull/2360). ## 26.3.0 - 2026-01-09 ### Added * Get response bodies in the HAR for Firefox. Thank you [Julian Descottes](https://github.com/juliandescottes) and the rest of the Mozilla team that made this possible in bidi-har-export. Added in [#2359](https://github.com/sitespeedio/browsertime/pull/2359). The Firefox HAR has missed this functionality since we did the switch to bidi-har. ### Fixed * Restructure server timings so the timing name does not get lost for InfluxDB/Graphite. Thank you [Tim Oldenburg](https://github.com/TimOldenburg) for PR [#2358](https://github.com/sitespeedio/browsertime/pull/2358). * Add Simpleperf app_profiler options and use `--android.simpleperf`. Thank you [Abhishek Nimalan](https://github.com/animalan) for PR [#2352](https://github.com/sitespeedio/browsertime/pull/2352) ## 26.2.0 - 2025-12-18 ### Added * Updated Chromedriver and Edgedriver to 143 [#2354](https://github.com/sitespeedio/browsertime/pull/2354) and[#2355](https://github.com/sitespeedio/browsertime/pull/2355). * Updated webdriver to 4.39.0 [#2356](https://github.com/sitespeedio/browsertime/pull/2356). ### Fixed * Try to tune the XVFB handling to make it safer that xvfb is always stopped [#2353](https://github.com/sitespeedio/browsertime/pull/2353). ## 26.1.0- 2025-12-11 ### Added * Firefox 146 in the Docker container [#2351](https://github.com/sitespeedio/browsertime/pull/2351). * Chrome 143 in the Docker container [#2350](https://github.com/sitespeedio/browsertime/pull/2350). ### Fixed * Make sure the user in the Docker container has the correct user rights [#2349](https://github.com/sitespeedio/browsertime/pull/2349). ## 26.0.1- 2025-12-10 ### Fixed * Remove extra console.log entry :) ## 26.0.0 - 2025-12-10 ### Breaking * We removed support for setting the compression level for png screenshots, see the added section why. ### Added * Upgrade to support NodeJS 24 without warnings, include NodeJS 24 in the Docker container, and base the Docker container on Ubuntu 24.04. To make this work I needed to upgrade the Jimp library and then we lost the settings for png screenshots `--screenshotParams.png.compressionLevel` [#2342](https://github.com/sitespeedio/browsertime/pull/2342). ## 25.4.0 - 2025-11-02 ### Added * Chrome and Chromedriver 142 [#2335](https://github.com/sitespeedio/browsertime/pull/2335). ## 25.3.1 - 2025-10-24 ### Fixed * Better handling of closing XVFB [#2332](https://github.com/sitespeedio/browsertime/pull/2332). * Firefox: Disable quicksuggest [#2333](https://github.com/sitespeedio/browsertime/pull/2333). ## 25.3.0 - 2025-10-17 ### Added * Make it possible to strip cookie and auth headers in the HAR file for Firefox [#2329](https://github.com/sitespeedio/browsertime/pull/2329) and Chrome [#2330](https://github.com/sitespeedio/browsertime/pull/2330). Use `--cleanSensitiveHeaders` to remove a [couple of headers](https://github.com/sitespeedio/browsertime/blob/main/lib/support/har/index.js#L11-L24). * Firefox 144 [#2331](https://github.com/sitespeedio/browsertime/pull/2331). ### Fixed * Updated developer dependencies [#2326](https://github.com/sitespeedio/browsertime/pull/2326) and [#2327](https://github.com/sitespeedio/browsertime/pull/2327). * Updated log dependency [#2328](https://github.com/sitespeedio/b23272327rowsertime/pull/2328) ## 25.2.0 - 2025-10-12 ### Added * Updated to Chrome/Chromedriver/Edge/Edgedriver 141, Firefox 143 [#2325](https://github.com/sitespeedio/browsertime/pull/2325) and [#2323](https://github.com/sitespeedio/browsertime/pull/2323). * Updated webdriver and bidi-har [#2322](https://github.com/sitespeedio/browsertime/pull/2322). * Added simpleperf and perfetto support for Android, thank you [Abhishek Nimalan](https://github.com/animalan) for PR [#2315](https://github.com/sitespeedio/browsertime/pull/2315). ## 25.1.0 - 2025-09-05 ### Added * Updated to Chrome/Chromedriver 140, Firefox 142 [#2318](https://github.com/sitespeedio/browsertime/pull/2318). * Selenium webdriver 4.35.0 [#2317](https://github.com/sitespeedio/browsertime/pull/2317). ## 25.0.0 - 2025-07-16 ### Breaking * Support NodeJS 20 or later for Browsertime [#2307](https://github.com/sitespeedio/browsertime/pull/2307) * Removed the old and outdated VisualMetrics [#2306](https://github.com/sitespeedio/browsertime/pull/2306). `--visualMetricsPortable` is removed and the "new" version is always used. ### Added * Updated to Yargs 18.0.0 [#2305](https://github.com/sitespeedio/browsertime/pull/2305). ### Fixed * Updated dev dependencies [#2308](https://github.com/sitespeedio/browsertime/pull/2308) and [#2309](https://github.com/sitespeedio/browsertime/pull/2309). * Updated Edge dependency so it uses the new Microsoft domain for downloading [#2312](https://github.com/sitespeedio/browsertime/pull/2312). ## 24.9.0 - 2025-06-30 ### Added * Update Docker container to use Chrome/edge 138, Firefox 140. Add Edgedriver and Chromedrinver 138 [#2303](https://github.com/sitespeedio/browsertime/pull/2303). ### Fixed * Update Selenium webdriver to 4.34.0 [#2304](https://github.com/sitespeedio/browsertime/pull/2304). * Add extra try/catch if main document timings is missing when generating the HAR [#2302](https://github.com/sitespeedio/browsertime/pull/2302). ## 24.8.2 - 2025-06-22 ### Fixed * Fix for serverTiming - thank you [Gregory Mierzwinski](https://github.com/gmierz) for PR [#2301](https://github.com/sitespeedio/browsertime/pull/2301). * Cleanup how we get the navigation timing metrics [#2300](https://github.com/sitespeedio/browsertime/pull/2300). * Fix depercation warnings in visual metrics. Thank you [Emmanuel Ferdman](https://github.com/emmanuel-ferdman) for PR [#2297](https://github.com/sitespeedio/browsertime/pull/2297). ## 24.8.1 - 2025-06-01 ### Fixed * [Visual Elements] Fix split for selector to include full value with ':'` - thank you [Pavel Bairov](https://github.com/Amerousful) for PR [#2298](https://github.com/sitespeedio/browsertime/pull/2298). ## 24.8.0 - 2025-05-30 ### Added * Updated to Chrome/Chromedriver 137 and Firefox 139 in the Docker container [#2284](https://github.com/sitespeedio/browsertime/pull/2284). * Updated to Edge/Edgedriver 137 in the Docker container [#2289](https://github.com/sitespeedio/browsertime/pull/2289). * New command: `wait.byXpathAndVisible(...)` - thank you [Pavel Bairov](https://github.com/Amerousful) for PR [#2286](https://github.com/sitespeedio/browsertime/pull/2286). * New command: `wait.bySelectorAndVisible(...)` PR [#2288](https://github.com/sitespeedio/browsertime/pull/2288). ### Fixed * Updated dependencies: selenium, usb-power-profiling, execa and dev dependencies [#2290](https://github.com/sitespeedio/browsertime/pull/2290), [#2291](https://github.com/sitespeedio/browsertime/pull/2291), [#2294](https://github.com/sitespeedio/browsertime/pull/2294) and [#2295](https://github.com/sitespeedio/browsertime/pull/2295). ## 24.7.0 - 2025-05-13 ### Added * Added Edge and Edgedriver 136 [#2282](https://github.com/sitespeedio/browsertime/pull/2282). * Add commands to start/stop and collect PerfStats performance counters for Firefox, thank you [Denis Palmeiro](https://github.com/dpalmeiro) for PR [#2279](https://github.com/sitespeedio/browsertime/pull/2279). ### Fixed * Selenium 4.32.0 [#2281](https://github.com/sitespeedio/browsertime/pull/2281). * Chromedriver 136 [#2280](https://github.com/sitespeedio/browsertime/pull/2280). ## 24.6.0 - 2025-05-05 ### Added * Updated the Docker container to use Chrome 136.0, Firefox 138 and Edge 135.0 [#2277](https://github.com/sitespeedio/browsertime/pull/2277). ### Fixed * PreURL and pageCompleteCheckNetworkIdle didn't work together as reported in [sitespeed.io #4509](https://github.com/sitespeedio/sitespeed.io/issues/4509). Fixed in [#2278](https://github.com/sitespeedio/browsertime/pull/2278). ## 24.5.3 - 2025-04-30 ### Fixed * Fix for running privileged script in Firefox 138 [#2274](https://github.com/sitespeedio/browsertime/pull/2274). ## 24.5.2 - 2025-03-20 ### Fixed * Bugfix for the missing FCP delta with TTFB [#2273](https://github.com/sitespeedio/browsertime/pull/2273). ## 24.5.1 - 2025-03-18 ### Fixed * Bugfix for `--userTimingBlockList` [#2272](https://github.com/sitespeedio/browsertime/pull/2272). ## 24.5.0 - 2025-03-13 ### Added * Updated to Geckodriver 0.36.0 [#2270](https://github.com/sitespeedio/browsertime/pull/2270). ### Fixed * Fix running tests on Safari on iOS that has been broken by some refactoring [#2271](https://github.com/sitespeedio/browsertime/pull/2271). ## 24.4.0 - 2025-03-11 ### Added * Edgedriver 134 [#2269](https://github.com/sitespeedio/browsertime/pull/2269). * Chromedriver 134, updated chrome-remote-interfaces and webdriver [#2266](https://github.com/sitespeedio/browsertime/pull/2266) ### Fixed * Fix how to get server timings (from main request) as reported on Slack [#2268](https://github.com/sitespeedio/browsertime/pull/2268). ## 24.3.0 - 2025-03-03 ### Added * Add support for manually setting the log level using `--logLevel` [#2264](https://github.com/sitespeedio/browsertime/pull/2264).2264 ## 24.2.0 - 2025-02-05 ### Added * Updated Chromedriver and Chromne to 133 and Firefox to 135 [#2261](https://github.com/sitespeedio/browsertime/pull/2261) and [#2262](https://github.com/sitespeedio/browsertime/pull/2262). ## 24.1.1 - 2025-01-29 ### Fixed * Update to sitespeedio/log 0.2.6 [#2260](https://github.com/sitespeedio/browsertime/pull/2260). ## 24.1.0 - 2025-01-27 ### Added * Include Chrome/Firefox configuration in the browser section of the result JSON [#2259](https://github.com/sitespeedio/browsertime/pull/2259) ### Fixed * Upgraded to use Webdriver 4.28.1 [#2258](https://github.com/sitespeedio/browsertime/pull/2258). ## 24.0.1 - 2025-01-21 ### Fixed * If Jimp is missing when storing an image, log and write the file as PNG [#2257](https://github.com/sitespeedio/browsertime/pull/2257). ## 24.0.0 - 2025-01-20 The 24.0.0 release remove a lot of dependencies. Since we implemented Browsertime the first time, there are many things that are easy to do in modern NodeJS. Those things have now been implemented in Browsertime. This release would work exactly as before, the only thing that changed is that usb-power-profiling is a optional dependency. That means that if you install using `--omit=optional` that dependency is not installed. ### Changed * Moved usb-power-profiling to be an optional package [#2249](https://github.com/sitespeedio/browsertime/pull/2249). ### Added * Edgedriver 132 [#2236](https://github.com/sitespeedio/browsertime/pull/2254). * Chromedriver 132 [#2236](https://github.com/sitespeedio/browsertime/pull/2253). * Chrome and Edge 132, Firefox 134 in the Docker container + NodeJS 22 [#2255](https://github.com/sitespeedio/browsertime/pull/2255). ### Fixed * Replace dependencies with local implementation: * Replace btoa [#2233](https://github.com/sitespeedio/browsertime/pull/2233). * Replace hasbin [#2234](https://github.com/sitespeedio/browsertime/pull/2234). * Replace DayJS [#2235](https://github.com/sitespeedio/browsertime/pull/2235). * Replace lodash.pick [#2237](https://github.com/sitespeedio/browsertime/pull/2237). * Replace lodash.groupBy [#2238](https://github.com/sitespeedio/browsertime/pull/2238). * Replace find-up [#2240](https://github.com/sitespeedio/browsertime/pull/2240). * Replace lodash.isEmpty [#2241](https://github.com/sitespeedio/browsertime/pull/2241). * Replace get-port [#2242](https://github.com/sitespeedio/browsertime/pull/2242). * Replace jimp with jimp custom [#2243](https://github.com/sitespeedio/browsertime/pull/2243). * Replace @cypress/xvfb [#2245](https://github.com/sitespeedio/browsertime/pull/2245). * Replace intel (log) with sitespeed.io/log [#2246](https://github.com/sitespeedio/browsertime/pull/2246). * Replace lodash.set [#2250](https://github.com/sitespeedio/browsertime/pull/2250). * Replace lodash.get [#2251](https://github.com/sitespeedio/browsertime/pull/2251). * Fix Docker file ENV to follow the new standard [#2239](https://github.com/sitespeedio/browsertime/pull/2239). ## 23.5.0 - 2024-12-23 ### Added * Added `--userTimingBlockList` [#2227](https://github.com/sitespeedio/browsertime/pull/2227). ### Fixed * Updated to webdriver 4.28 [#2226](https://github.com/sitespeedio/browsertime/pull/2226). * Updated dev dependencies [#2228](https://github.com/sitespeedio/browsertime/pull/2228). * Fix so the check for gnirehtet always use --android.gnirehtet to fix problems setting it in sitespeed.io [#2229](https://github.com/sitespeedio/browsertime/pull/2229). * Update to execa 9.5.2 [#2231](https://github.com/sitespeedio/browsertime/pull/2231). * Update to adbkit 3.3.8 [#2232](https://github.com/sitespeedio/browsertime/pull/2232). * Fix so you cannot use gnirehtet with webpagereplay [#2230](https://github.com/sitespeedio/browsertime/pull/2230). ## 23.4.5 - 2024-12-20 ### Fixed * Change bottom margin from 10 to 14 pixel when recording a video on mobile, se bug [#2224](https://github.com/sitespeedio/browsertime/issues/2224) and PR [#2225](https://github.com/sitespeedio/browsertime/pull/2225). ## 23.4.4 - 2024-12-18 ### Fixed * A more robust gnirehtet check when you run your Android test [#2223](https://github.com/sitespeedio/browsertime/pull/2223). ## 23.4.3 - 2024-12-11 ### Fixed * Update to USB power profiling 1.5.0 [#2221](https://github.com/sitespeedio/browsertime/pull/2221). ## 23.4.2 - 2024-12-10 ### Fixed * Improve how we compute the power consumption numbers from the Firefox Profiler output PR by [Nazım Can Altınova](https://github.com/canova) [#2220](https://github.com/sitespeedio/browsertime/pull/2220) ## 23.4.1 - 2024-11-23 ### Fixed * Cleanup of the extra timings that is added to the timeline for Chrome [#2218](https://github.com/sitespeedio/browsertime/pull/2218) ## 23.4.0 - 2024-11-22 ### Added * Collect more information about the largest contentful paint [#2206](https://github.com/sitespeedio/browsertime/pull/2206) * Add extra timings and new custom timeline to the Chrome timeline [#2217](https://github.com/sitespeedio/browsertime/pull/2217). Inspired by [ Andy Davies](https://github.com/andydavies) cool [https://github.com/andydavies/perf-timeline-to-devtools-profile](https://github.com/andydavies/perf-timeline-to-devtools-profile). ### Fixed * More configuration tuning for Firefox [#2216](https://github.com/sitespeedio/browsertime/pull/2216). ## 23.3.3 - 2024-11-22 ### Fixed * Disable search suggestion requests for Firefox [#2215](https://github.com/sitespeedio/browsertime/pull/2215) * Fix for including HTTP requests in the Firefox profile [#2214](https://github.com/sitespeedio/browsertime/pull/2214). * Fix when running --enableProfileRun and get visual metrics. It used to generate an error log, this fixes that [#2213](https://github.com/sitespeedio/browsertime/pull/2213). ## 23.3.2 - 2024-11-21 ### Fixed * Disable some calls back to home from Firefox [#2212](https://github.com/sitespeedio/browsertime/pull/2212). ## 23.3.1 - 2024-11-13 ### Fixed * Disable security warning in Firefox 132 [#2208](https://github.com/sitespeedio/browsertime/pull/2208) that fixes [#2207](https://github.com/sitespeedio/browsertime/issues/2207). ## 23.3.0 - 2024-11-12 ### Added * Updated to Chrome and Chromedriver 131 [#2209](https://github.com/sitespeedio/browsertime/pull/2203) ### Fixed * Updated to ff-test-bidi-har-export to 0.0.17 [#2204](https://github.com/sitespeedio/browsertime/pull/2204) ## 23.2.0 - 2024-10-20 ### Added * Updated to Chrome and Chromedriver 130 [#2192](https://github.com/sitespeedio/browsertime/pull/2192) * The Chrome in the ARM container is bumped from 107 to 130 [#2194](https://github.com/sitespeedio/browsertime/pull/2194). ### Fixed * New Geckodriver install that fixes running on ARM in the Docker container [#2193](https://github.com/sitespeedio/browsertime/pull/2193). ## 23.1.2 - 2024-10-11 ### Fixed * Updated Chrome HAR to 1.0.1 [#2191](https://github.com/sitespeedio/browsertime/pull/2191). ## 23.1.1 - 2024-10-08 ### Fixed * Updated to har export 0.0.16 for Firefox that fixes the HAR timing problem in [#2189](https://github.com/sitespeedio/browsertime/issues/2189) [#2190](https://github.com/sitespeedio/browsertime/pull/2190). ## 23.1.0 - 2024-10-08 ### Added * Log if you use a profile template for Firefox [#2186](https://github.com/sitespeedio/browsertime/pull/2186). * Update to Firefox 131 and Edge 129 in the Docker container [#2188](https://github.com/sitespeedio/browsertime/pull/2188). ### Fixed * Updated to Chrome-HAR [#2187](https://github.com/sitespeedio/browsertime/pull/2187). ## 23.0.0 - 2024-09-23 ### Breaking * Disable camel case configuration that comes automatically with yargs [#2182](https://github.com/sitespeedio/browsertime/pull/2182). This is a breaking change ONLY if you didn't follow our doecumentation/help and used internal YARGS configuration names for our CLI configuration. ### Added * Updated Docker container with Chrome 129, Firefox 130. New Chromedriver [#2181](https://github.com/sitespeedio/browsertime/pull/2181). ### Fixed * Updated to Selenium 4.25.0 [#2185](https://github.com/sitespeedio/browsertime/pull/2185). * Use HAR export 0.0.15 for upcoming changes in Firefox [#2184](https://github.com/sitespeedio/browsertime/pull/2184). * Fixes the internal configuration object for android. The old solution created an array with objects instead of just keys on the object.[#2183](https://github.com/sitespeedio/browsertime/pull/2183). ## 22.10.2 - 2024-09-13 ### Fixed * Fix for wait.byIdAndVisible command [#2179](https://github.com/sitespeedio/browsertime/pull/2179). ## 22.10.1 - 2024-09-04 ### Fixed * Upgraded Bidi HAR to 0.0.14 that filters out data:text URLs thar is picked up in Firefox 130 [#2177](https://github.com/sitespeedio/browsertime/pull/2177). * Call stopSampling on browser stop during android power testing [#2176](https://github.com/sitespeedio/browsertime/pull/2176). ## 22.10.0 - 2024-09-03 ### Added * Chromedriver 128 [#2175](https://github.com/sitespeedio/browsertime/pull/2175) * Chrome 128, Firefox 129, Edge 127 [#2173](https://github.com/sitespeedio/browsertime/pull/2173) ### Fixed * Updated dependencies: usb-profiling, fast-stats, webdriver, execa, dayjs [#2174](https://github.com/sitespeedio/browsertime/pull/2174). ## 22.9.0 - 2024-08-26 ### Added * Geckodriver 0.35.0 [#2170](https://github.com/sitespeedio/browsertime/pull/2170) ### Fixed * Stopping gnirehtet throwed errors [#2172](https://github.com/sitespeedio/browsertime/pull/2171). * Updated to Throttle 5.0.1 that have nicer ifb0 handling [#2172](https://github.com/sitespeedio/browsertime/pull/2172) ## 22.8.0 - 2024-07-30 ### Added * Edgedriver 126 [#2166](https://github.com/sitespeedio/browsertime/pull/2166) ### Fixed * Disable search engine choice screen on startup for Chrome 127+ [#2168](https://github.com/sitespeedio/browsertime/pull/2168) * Update dev dependencies [#2167](https://github.com/sitespeedio/browsertime/pull/2167) ## 22.7.0 - 2024-07-25 ### Added * Updated to Chrome and Chromedriover 127 [#2164](https://github.com/sitespeedio/browsertime/pull/2164). ### Fixed * Updated to Selenium 4.23.0 [#2161](https://github.com/sitespeedio/browsertime/pull/2161). * Add extra check if the HAR file page misses an URL [#2160](https://github.com/sitespeedio/browsertime/pull/2160). ## 22.6.0 - 2024-07-15 ### Added * Updated to Firefox 128 and Edge 126 in the Docker container [#2158](https://github.com/sitespeedio/browsertime/pull/2158). * Add request header using Bidi for Firefox (needs Firefox 128 or later) [#2108](https://github.com/sitespeedio/browsertime/pull/2108). ### Fixed * Updated to Chrome HAR 0.13.5 [#2157](https://github.com/sitespeedio/browsertime/pull/2157) ## 22.5.5 - 2024-07-07 ### Fixed * Fix stopping --tcpdump [#2155](https://github.com/sitespeedio/browsertime/pull/2155). ## 22.5.4 - 2024-07-06 ### Fixed * Update to Chrome-HAR 0.13.3 [#2148](https://github.com/sitespeedio/browsertime/pull/2148). * Update Chrome remore interface [#2149](https://github.com/sitespeedio/browsertime/pull/2149). * Update execa, dayjs and get-port [#2153](https://github.com/sitespeedio/browsertime/pull/2153). * Update developer dependencies [#2154](https://github.com/sitespeedio/browsertime/pull/2154), [#2152](https://github.com/sitespeedio/browsertime/pull/2152), [#2151](https://github.com/sitespeedio/browsertime/pull/2151) and [#2150](https://github.com/sitespeedio/browsertime/pull/2150). ## 22.5.3 - 2024-06-25 ### Fixed * Another fix to make IntelliSense/Code completion work again [#2147](https://github.com/sitespeedio/browsertime/pull/2147). ## 22.5.2 - 2024-06-24 ### Fixed * Updated Selenium dependencies [#2146](https://github.com/sitespeedio/browsertime/pull/2146). ## 22.5.1 - 2024-06-24 ### Fixed * Fixed exporting to make IntelliSense/Code completion work again [#2145](https://github.com/sitespeedio/browsertime/pull/2145). ## 22.5.0 - 2024-06-14 ### Added * Updated the Docker container to include Chrome 126 and Firefox 127. Chromedriver has been updated to 126 [#2141](https://github.com/sitespeedio/browsertime/pull/2141). ## 22.4.1 - 2024-06-07 ### Fixed * Make sure the engine is stopped before the extra video/profile run [#2140](https://github.com/sitespeedio/browsertime/pull/2140). ## 22.4.0 - 2024-06-06 ### Added * Use `--enableVideoRun` to get one extra run with a video and visual metrics [#2139](https://github.com/sitespeedio/browsertime/pull/2139) ## 22.3.0 - 2024-06-04 ### Added * Add the ability to gather power usage measurements on Android from USB power meters, thank you [Gregory Mierzwinski](https://github.com/gmierz) for PR [#2134](https://github.com/sitespeedio/browsertime/pull/2134). * Add support to visualmetrics to identify key frames matching the given colors, thank you [aosmond](https://github.com/aosmond) for PR [#2119](https://github.com/sitespeedio/browsertime/pull/2119). ### Fixed * Removed DOMContentFlushed for Firefox thank you [florinbilt](https://github.com/florinbilt) for PR [#2138](https://github.com/sitespeedio/browsertime/pull/2138). ## 22.2.0 - 2024-05-24 ### Added * New command: Mouse single click on a element with a specific id `commands.mouse.singleClick.byId(id)` and `commands.mouse.singleClick.byIdAndWait(id)` [#2135](https://github.com/sitespeedio/browsertime/pull/2135). * New command: `commands.wait.byIdAndVisible(id, maxTime)` - wait for an element with id to become visible [#2137](https://github.com/sitespeedio/browsertime/pull/2137). ### Fixed * Make sure errors are correctly logged if you cannot add text to element [#2136](https://github.com/sitespeedio/browsertime/pull/2136). ## 22.1.0 - 2024-05-20 ### Added * Updated to Edge and Edgedriver 125 [#2132](https://github.com/sitespeedio/browsertime/pull/2132). ### Fixed * Updated to Selenium Webdriver 4.21.0 [#2131](https://github.com/sitespeedio/browsertime/pull/2131). * Trying to remove new Chrome popup [#2130](https://github.com/sitespeedio/browsertime/pull/2130). ## 22.0.0 - 2024-05-16 ### Breaking There's a breaking change for Firefox if you add your own request header or if you use scripting and want to clear the browser in your script: * Removed the [Browsertime extension](https://github.com/sitespeedio/browsertime-extension). In the old days the extension helped Chrome and Firefox to add cookies, requestheaders, clear caches and more. However all that functionality has been implemented in CDP for Chrome and most functionality using Bidi webdriver for Firefox. At the moment we drop two things for Firefox: Add request header and clear the cache inside of scripting. We hope both soon is supported in Bidi [#2124](https://github.com/sitespeedio/browsertime/pull/2124). * The ff-test-bidi-har-export is now the default (and only) way to get a HAR file from Firefox. It's faster than the old HAR exporter and works on both desktop and mobile. It's also is implemented using Bidi so when other browsers also support bidi they can also export a HAR [#2123](https://github.com/sitespeedio/browsertime/pull/2123). ### Added * Updated the Docker container to use Chrome 125 and Firefox 126 and Edge 124 [#2125](https://github.com/sitespeedio/browsertime/pull/2125) and [#2128](https://github.com/sitespeedio/browsertime/pull/2128). ## 21.7.1 - 2024-04-03 ### Fixed * Bug fix: If you test a URL that failed, we got an error that didn't produce the browsertime.json [#2120](https://github.com/sitespeedio/browsertime/pull/2120). * Updated to Selenium webdriver 4.20.0 [#2121](https://github.com/sitespeedio/browsertime/pull/2121). ## 21.7.0 - 2024-04-03 ### Added * Edge and Edgedriver 123 [#2116](https://github.com/sitespeedio/browsertime/pull/2116). ### Fixed * Updated to Selenium 4.19.0 [#2117](https://github.com/sitespeedio/browsertime/pull/2117). * Block domains using Bidi instead of the extension server for Firefox [#2118](https://github.com/sitespeedio/browsertime/pull/2118). ## 21.6.1 - 2024-03-22 ### Fixed * Fix running Safari TP. Thank you [KS](https://github.com/92kns) for PR [#2115](https://github.com/sitespeedio/browsertime/pull/2115). ## 21.6.0 - 2024-03-20 ### Added * Chrome 123, Firefox 124 and Edge 122 in the Docker container [#2110](https://github.com/sitespeedio/browsertime/pull/2110). * Chromedriver 123 and Edgedriver 122 [#2111](https://github.com/sitespeedio/browsertime/pull/2111). ### Fixed * Fix a bug in stopAsErro