grafana/k6 · error
cannot set cookies: %w
Error message
cannot set cookies: %w
What it means
Thrown by BrowserContext.AddCookies when the CDP Storage.setCookies command fails after local validation passed. The context ID is attached and the underlying CDP error is wrapped, so the actual cause (protocol error) is in the tail of the message. This is a runtime browser-side failure, not an input-shape problem.
Source
Thrown at internal/js/modules/k6/browser/common/browser_context.go:499
}
cookiesToSet = append(cookiesToSet, &network.CookieParam{
Name: c.Name,
Value: c.Value,
Domain: c.Domain,
Path: c.Path,
URL: c.URL,
Expires: ts,
HTTPOnly: c.HTTPOnly,
Secure: c.Secure,
SameSite: network.CookieSameSite(c.SameSite),
})
}
setCookies := storage.
SetCookies(cookiesToSet).
WithBrowserContextID(b.id)
if err := setCookies.Do(cdp.WithExecutor(b.ctx, b.browser.conn)); err != nil {
return fmt.Errorf("cannot set cookies: %w", err)
}
return nil
}
// ClearCookies clears cookies.
func (b *BrowserContext) ClearCookies() error {
b.logger.Debugf("BrowserContext:ClearCookies", "bctxid:%v", b.id)
clearCookies := storage.
ClearCookies().
WithBrowserContextID(b.id)
if err := clearCookies.Do(cdp.WithExecutor(b.ctx, b.browser.conn)); err != nil {
return fmt.Errorf("clearing cookies: %w", err)
}
return nil
}
View on GitHub (pinned to 93accf6570)
Solutions
- Read the wrapped CDP error text: 'Target closed'/'browser disconnected' points to lifecycle issues; a cookie-policy message points to the cookie fields.
- Ensure the context is still open and the browser healthy before the call; re-create the context if it was closed.
- For SameSite cookies, set sameSite: 'None' together with secure: true, or use 'Lax'/'Strict'.
- Retry once after re-establishing the context if the failure is a transient CDP drop.
Example fix
// before
context.addCookies([{ name: 'tracking', value: '1', domain: 'example.com', path: '/', sameSite: 'None' }]);
// after
context.addCookies([{ name: 'tracking', value: '1', domain: 'example.com', path: '/', sameSite: 'None', secure: true }]); Defensive patterns
Strategy: try-catch
Try / catch
try {
context.addCookies(cookies);
} catch (e) {
if (/Target closed|disconnected/.test(e.message)) {
// context/browser gone: recreate and re-add once
} else if (/sameSite|SameSite|Secure/i.test(e.message)) {
// fix cookie flags (sameSite:'None' requires secure:true)
} else {
throw e;
}
} Prevention
- Keep the context open and the browser healthy when installing cookies.
- Pair sameSite:'None' with secure:true.
- Install cookies once at context setup rather than repeatedly during the run.
When it happens
Trigger: The DevTools connection rejecting the cookie set: browser context already closed (context.close() raced), browser process crashed or disconnected, or a cookie that is structurally valid to k6 but rejected by Chrome (e.g. invalid sameSite value for a cookie without the Secure flag, domain mismatch semantics, or an expires value Chrome refuses).
Common situations: Calling addCookies on a context that was closed earlier in the test; headless Chrome dying under memory pressure in CI; setting SameSite=None cookies without secure:true, which modern Chrome rejects; intermittent CDP websocket drops in long test runs.
Related errors
- clearing cookies: %w
- retrieving cookies: %w
- adding k6 object to new browser context: %w
- browser connect: %w
- disposing browser context ID %s: %w
AI-assisted analysis of grafana/k6@93accf6570 (2026-08-15).
Data as JSON: /api/errors/1f7539650d4605de.
Report an issue: GitHub.