{"record":{"id":"84288f341eab5bc1","repo":"grafana/k6","slug":"emulating-media-w","errorCode":null,"errorMessage":"emulating media: %w","messagePattern":"emulating media: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/common/page.go","lineNumber":1076,"sourceCode":"func (p *Page) DispatchEvent(selector string, typ string, eventInit any, opts *FrameDispatchEventOptions) error {\n\tp.logger.Debugf(\"Page:DispatchEvent\", \"sid:%v selector:%s\", p.sessionID(), selector)\n\n\treturn p.MainFrame().DispatchEvent(selector, typ, eventInit, opts)\n}\n\n// EmulateMedia emulates the given media type.\nfunc (p *Page) EmulateMedia(popts *PageEmulateMediaOptions) error {\n\tp.logger.Debugf(\"Page:EmulateMedia\", \"sid:%v\", p.sessionID())\n\n\tp.mediaType = popts.Media\n\tp.colorScheme = popts.ColorScheme\n\tp.reducedMotion = popts.ReducedMotion\n\n\tp.frameSessionsMu.RLock()\n\tfor _, fs := range p.frameSessions {\n\t\tif err := fs.updateEmulateMedia(); err != nil {\n\t\t\tp.frameSessionsMu.RUnlock()\n\t\t\treturn fmt.Errorf(\"emulating media: %w\", err)\n\t\t}\n\t}\n\tp.frameSessionsMu.RUnlock()\n\n\tapplySlowMo(p.ctx)\n\n\treturn nil\n}\n\n// EmulateVisionDeficiency activates/deactivates emulation of a vision deficiency.\nfunc (p *Page) EmulateVisionDeficiency(typ string) error {\n\tp.logger.Debugf(\"Page:EmulateVisionDeficiency\", \"sid:%v typ:%s\", p.sessionID(), typ)\n\n\tvalidTypes := map[string]emulation.SetEmulatedVisionDeficiencyType{\n\t\t\"achromatopsia\": emulation.SetEmulatedVisionDeficiencyTypeAchromatopsia,\n\t\t\"blurredVision\": emulation.SetEmulatedVisionDeficiencyTypeBlurredVision,\n\t\t\"deuteranopia\":  emulation.SetEmulatedVisionDeficiencyTypeDeuteranopia,\n\t\t\"none\":          emulation.SetEmulatedVisionDeficiencyTypeNone,","sourceCodeStart":1058,"sourceCodeEnd":1094,"githubUrl":"https://github.com/grafana/k6/blob/93accf6570dcd306ca5e99cc44c393ee3797761b/internal/js/modules/k6/browser/common/page.go#L1058-L1094","documentation":"Page.EmulateMedia stores media type / color scheme / reduced motion settings and applies them via Emulation.setEmulatedMedia in every frame session. This error means at least one frame session's CDP call failed while iterating under the frame-sessions read lock.","triggerScenarios":"page.emulateMedia({ media: 'print', colorScheme: 'dark', reducedMotion: 'reduce' }) while iframes are attaching/detaching, during navigation, or on a page whose session is closing.","commonSituations":"Emulating print media on pages with ad/analytics iframes that churn; calling emulateMedia concurrently with page.goto; page already closing at iteration end.","solutions":["Call page.emulateMedia before navigation or after a stable load state","Avoid calling it concurrently with page.goto() (await each call)","Ensure the page is not closing when the call is made","Apply emulation at browser-context level (newContext({colorScheme: ...})) for pages with unstable iframes"],"exampleFix":"// before\nawait page.goto('https://example.com/');\nawait page.emulateMedia({ media: 'print' }); // races with iframe attach\n\n// after\nawait page.emulateMedia({ media: 'print' });\nawait page.goto('https://example.com/');","handlingStrategy":"try-catch","validationCode":"const opts = { media: 'print', colorScheme: 'dark', reducedMotion: 'reduce' };\nif (!['print','screen','null',''].includes(opts.media)) throw new Error('bad media');","typeGuard":null,"tryCatchPattern":"try {\n  await page.emulateMedia(opts);\n} catch (e) {\n  if (/emulating media/.test(e.message)) { await page.waitForLoadState(); await page.emulateMedia(opts); }\n  else throw e;\n}","preventionTips":["Apply media emulation before goto, or after a stable load state","Never call emulateMedia concurrently with navigation calls"],"tags":["browser","emulation","media","iframe","cdp"],"backgroundTag":null,"analyzedSha":"93accf6570dcd306ca5e99cc44c393ee3797761b","analyzedAt":"2026-08-15T21:23:27.118Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}