{"id":"e2dfac4faaf443c1","repo":"vitest-dev/vitest","slug":"browser-is-not-initialized-e2dfac","errorCode":null,"errorMessage":"browser is not initialized","messagePattern":"browser is not initialized","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/vitest/src/node/project.ts","lineNumber":469,"sourceCode":"   * Import a file using Vite module runner.\n   * @param moduleId The ID of the module in Vite module graph\n   */\n  public import<T>(moduleId: string): Promise<T> {\n    return this.runner.import(moduleId)\n  }\n\n  /** @internal */\n  public _getViteEnvironments(): DevEnvironment[] {\n    return Object.values(this.vite.environments || {})\n  }\n\n  /** @internal */\n  public async _openBrowserPage(sessionId: string, pool: {\n    reject: (error: Error) => void\n    parallel?: boolean\n  }): Promise<void> {\n    if (!this.browser) {\n      throw new Error(`browser is not initialized`)\n    }\n\n    const resolvedUrls = this.browser.vite.resolvedUrls\n    const origin = resolvedUrls?.local[0] ?? resolvedUrls?.network[0]\n    if (!origin) {\n      throw new Error(\n        `Can't find browser origin URL for project \"${this.name}\"`,\n      )\n    }\n\n    const url = new URL('/__vitest_test__/', origin)\n    url.searchParams.set('sessionId', sessionId)\n    const otelCarrier = this.vitest._traces.getContextCarrier()\n    this.vitest._browserSessions.sessionIds.add(sessionId)\n    const sessionPromise = this.vitest._browserSessions.createSession(\n      sessionId,\n      this,\n      pool,","sourceCodeStart":451,"sourceCodeEnd":487,"githubUrl":"https://github.com/vitest-dev/vitest/blob/d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09/packages/vitest/src/node/project.ts#L451-L487","documentation":"Internal path _openBrowserPage (project.ts:468) requires this.browser to be set before opening a browser test page. The browser field is populated during browser provider initialization (_initBrowserProvider / createClusterServer). If a browser-mode test is scheduled but the provider/server never initialized the ProjectBrowser, the page-open attempt throws.","triggerScenarios":"Calling _openBrowserPage before _initBrowserProvider resolved; browser.enabled is true but the provider failed to load (missing @vitest/browser package, provider not installed); a programmatic API call that schedules browser runs without first awaiting server init.","commonSituations":"Enabling browser mode in config without installing @vitest/browser; provider name typo (e.g. 'playwright' vs 'playwright.io'); a race where the worker requests a browser page before the server ready event; running browser tests through a custom runner that bypasses vitest's normal startup sequence.","solutions":["Ensure @vitest/browser is installed and browser.provider points to an installed provider (playwright or webdriverio).","Verify browser.enabled is true and run via the normal vitest CLI / createVitest path so initialization completes.","If using the programmatic API, await vitest.init() (or the equivalent server-ready step) before triggering browser test execution.","Check earlier logs/output for a suppressed provider-load error; this message is often a downstream symptom."],"exampleFix":"// before: custom runner schedules browser run too early\nawait vitest.scheduleTestBrowser(spec)\n\n// after: ensure init completed\nawait vitest.init()\nawait vitest.runFiles(specs)","handlingStrategy":"validation","validationCode":"if (project.isBrowserEnabled() && !project.browser) {\n  await project._initBrowserProvider()\n}\nif (!project.browser) throw new Error('Browser provider failed to initialize; check @vitest/browser install')","typeGuard":"function browserReady(p: TestProject): boolean {\n  return !!p.browser && !!p.browser.provider\n}","tryCatchPattern":null,"preventionTips":["Always install @vitest/browser and the chosen provider package.","Use the standard vitest CLI/createVitest entry so init ordering is correct.","Watch for provider-load errors earlier in the log; this error is downstream."],"tags":["browser","initialization","provider","internal"],"analyzedSha":"d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09","analyzedAt":"2026-08-03T20:23:56.861Z","schemaVersion":2}