{"id":"0bbbc9901201d5cd","repo":"vitest-dev/vitest","slug":"browser-is-not-initialized","errorCode":null,"errorMessage":"Browser is not initialized","messagePattern":"Browser is not initialized","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/browser-preview/src/preview.ts","lineNumber":50,"sourceCode":"      throw new Error(\n        'You\\'ve enabled headless mode for \"preview\" provider but it doesn\\'t support it. Use \"playwright\" or \"webdriverio\" instead: https://vitest.dev/guide/browser/#configuration',\n      )\n    }\n  }\n\n  isOpen(): boolean {\n    return this.open\n  }\n\n  getCommandsContext() {\n    return {}\n  }\n\n  async openPage(_sessionId: string, url: string): Promise<void> {\n    this.open = true\n    this.project.vitest.logger.log(`Browser runner started at ${url}\\n`)\n    if (!this.project.browser) {\n      throw new Error('Browser is not initialized')\n    }\n    const options = this.project.browser.vite.config.server\n    const _open = options.open\n    options.open = url\n    this.project.browser.vite.openBrowser()\n    options.open = _open\n  }\n\n  async close(): Promise<void> {}\n}\n\ndeclare module 'vitest/browser' {\n  export interface UserEventClickOptions extends SelectorOptions {}\n  export interface UserEventHoverOptions extends SelectorOptions {}\n  export interface UserEventFillOptions extends SelectorOptions {}\n  export interface UserEventSelectOptions extends SelectorOptions {}\n  export interface UserEventClearOptions extends SelectorOptions {}\n  export interface UserEventDoubleClickOptions extends SelectorOptions {}","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/vitest-dev/vitest/blob/d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09/packages/browser-preview/src/preview.ts#L32-L68","documentation":"Thrown by PreviewBrowserProvider.openPage when this.project.browser is undefined. openPage reads this.project.browser.vite.config.server to open the user's browser; if the project's browser orchestration layer was never initialized (e.g. browser mode not enabled or init order broken), the access fails.","triggerScenarios":"Calling provider.openPage before the project browser manager is initialized, running the preview provider without proper browser mode setup, or invoking openPage on a provider whose init was skipped/failed.","commonSituations":"Manually driving the preview provider outside Vitest's normal lifecycle, a partial init where openBrowser/init threw earlier, or version skew where the browser manager contract changed.","solutions":["Let Vitest's runner manage provider lifecycle; do not call openPage manually before init completes.","Ensure browser mode is correctly configured (projects with browser enabled) so project.browser is populated.","Check earlier logs for a failed init/openBrowser that left project.browser unset.","Upgrade Vitest packages together so the browser manager contract matches the provider."],"exampleFix":"// before (manual/early call)\nconst provider = new PreviewBrowserProvider(project)\nawait provider.openPage('s', url) // project.browser is undefined\n\n// after (let Vitest init first, then openPage is called by the runner)\n// ensure project.browser is set by the runner before any openPage call","handlingStrategy":"validation","validationCode":"if (!project.browser) {\n  throw new Error('project.browser is not initialized; cannot open preview page')\n}\nawait provider.openPage(sessionId, url)","typeGuard":"function browserInitialized(p: TestProject): boolean {\n  return p.browser !== undefined && p.browser !== null\n}","tryCatchPattern":null,"preventionTips":["Let Vitest's runner own provider init; do not construct/call openPage manually.","Inspect earlier logs for a failed init that left project.browser unset.","Keep Vitest packages version-aligned so the browser manager contract matches."],"tags":["browser","provider","preview","lifecycle","init","vitest"],"analyzedSha":"d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09","analyzedAt":"2026-08-03T20:23:56.861Z","schemaVersion":2}