{"record":{"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":478,"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":460,"sourceCodeEnd":496,"githubUrl":"https://github.com/vitest-dev/vitest/blob/1fa9837ec26533512fdcad8baebf249771bd340a/packages/vitest/src/node/project.ts#L460-L496","documentation":"_openBrowserPage is an internal entry point that opens a browser test page for a session. It requires this.browser (the browser provider/server) to already be initialized; if it is null/undefined the method throws immediately because there is no browser orchestrator to open a page with.","triggerScenarios":"_openBrowserPage is called before the browser provider finished initialization, or in a project that is not configured for browser testing so this.browser was never assigned.","commonSituations":"Calling browser APIs on a non-browser project, a browser provider that failed to start (e.g. playwright not installed, browser not downloaded), or a race where the page open is attempted before server listen completes.","solutions":["Confirm the project has browser config (test.browser or browser project) and a valid provider.","Install browser provider deps and the browser binaries (npx playwright install).","Check earlier logs for the provider initialization error that left this.browser unset.","Ensure you are not manually invoking internal browser methods out of order."],"exampleFix":"// before\nexport default defineConfig({\n  test: { /* no browser config */ }\n})\n// after\nexport default defineConfig({\n  test: {\n    browser: { enabled: true, provider: 'playwright', instances: [{ browser: 'chromium' }] }\n  }\n})","handlingStrategy":"type-guard","validationCode":"// Confirm browser readiness before browser operations.\nfunction assertBrowserReady(project: { browser?: unknown }) {\n  if (!project.browser) throw new Error('Browser provider not initialized; check browser config and provider install.')\n}","typeGuard":"const isBrowserInitialized = (project: { browser?: unknown }): project is { browser: object } => Boolean(project.browser)","tryCatchPattern":null,"preventionTips":["Enable browser config and install provider + browser binaries before runs.","Read provider startup logs for the failure that left browser unset.","Do not call internal browser methods out of order."],"tags":["browser","provider","initialization","config"],"backgroundTag":null,"analyzedSha":"1fa9837ec26533512fdcad8baebf249771bd340a","analyzedAt":"2026-08-11T16:11:39.638Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}