{
  "slug": "k6-browser-adds-requestfinished-and-requestfailed-event-handlers-40d1758c06bc",
  "title": "k6/browser adds requestfinished and requestfailed event handlers",
  "tools": [
    "k6"
  ],
  "tags": [
    "agent"
  ],
  "introduced_at": "2026-02-10T09:12:21.000Z",
  "announced_at": "2026-02-10T09:12:21.000Z",
  "effective_at": null,
  "date_basis": "source-publication",
  "status": "unknown",
  "how": {
    "incantation": "When debugging a k6 browser test, register `requestfailed` and `requestfinished` listeners on the page before navigation to observe failed and completed network requests.",
    "examples": [
      "import { browser } from 'k6/browser';\n\nexport const options = {\n  scenarios: {\n    ui: {\n      executor: 'shared-iterations',\n      options: { browser: { type: 'chromium' } },\n    },\n  },\n};\n\nexport default async function () {\n  const page = await browser.newPage();\n  page.on('requestfailed', (request) => console.log(`Request failed: ${request.url()}`));\n  page.on('requestfinished', (request) => console.log(`Request finished: ${request.url()}`));\n  await page.goto('<URL>');\n  await page.close();\n}"
    ],
    "gotchas": [
      "Version: v1.6.0",
      "event (required): Event name: `requestfailed` for requests that fail to reach the server; `requestfinished` for requests that successfully complete.",
      "handler (required): Callback invoked when the event is emitted; receives the corresponding Request object.",
      "request.url(): Returns the request URL; usable in the event handler for logging.",
      "Prerequisite: Use a current k6 version to work with the browser module.",
      "`requestfailed` fires for request failures such as network errors or aborts; `requestfinished` fires when a request completes successfully."
    ]
  },
  "why_it_matters": "Monitor successful and failed network requests while debugging a k6 browser test.",
  "sources": [
    "https://github.com/grafana/k6/releases/tag/v1.6.0",
    "https://grafana.com/docs/k6/latest/javascript-api/k6-browser/page/on/",
    "https://grafana.com/docs/k6/latest/javascript-api/k6-browser/request/",
    "https://grafana.com/docs/k6/latest/javascript-api/k6-browser/"
  ],
  "rank": 0.93035,
  "judge": {
    "publish": true,
    "judge_model": "codex-cli/gpt-6-luna+typesafe/jev-1.13.0",
    "prompt_version": "extract-v7+enrich-v2+judge-v2x3+jev-publish-v1"
  },
  "review_state": "approved",
  "provenance": {
    "run_id": "wave2a-20261017",
    "verdict_id": "wave2a-20261017:wave2a-20261017-4d59ff63232066fe-5:gate",
    "evidence_hash": "214d637601ab12859a942e0dfb0964627863702fc979acbb4c496833c029e4b8"
  },
  "review": {
    "draft_hash": "a680cee982c1893a59b4a9a8346474081feced740755fbf6355776e80bff8744",
    "reviewer": "publication-gate",
    "reviewed_at": "2026-10-07T00:00:00.000Z",
    "decision": "wave2a-20261017:gate",
    "reason": "3 of 3 judge runs approved with p_yes >= 0.9 (mean 0.93 >= 0.9; 2 needed) and Jev gave 0.77 (>= 0.6 needed)."
  }
}
