vitest-dev/vitest · error · Error

browser is not initialized

Error message

browser is not initialized

What it means

_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.

Solutions

  1. Confirm the project has browser config (test.browser or browser project) and a valid provider.
  2. Install browser provider deps and the browser binaries (npx playwright install).
  3. Check earlier logs for the provider initialization error that left this.browser unset.
  4. Ensure you are not manually invoking internal browser methods out of order.

Example fix

// before
export default defineConfig({
  test: { /* no browser config */ }
})
// after
export default defineConfig({
  test: {
    browser: { enabled: true, provider: 'playwright', instances: [{ browser: 'chromium' }] }
  }
})
Defensive patterns

Strategy: type-guard

Validate before calling

// Confirm browser readiness before browser operations.
function assertBrowserReady(project: { browser?: unknown }) {
  if (!project.browser) throw new Error('Browser provider not initialized; check browser config and provider install.')
}

Type guard

const isBrowserInitialized = (project: { browser?: unknown }): project is { browser: object } => Boolean(project.browser)

Prevention

When it happens

Trigger: _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.

Common situations: 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.

Related errors


AI-assisted analysis of vitest-dev/vitest@1fa9837ec2 (2026-08-11). Data as JSON: /api/errors/e2dfac4faaf443c1. Report an issue: GitHub.

Appendix: source

Thrown at packages/vitest/src/node/project.ts:478

   * Import a file using Vite module runner.
   * @param moduleId The ID of the module in Vite module graph
   */
  public import<T>(moduleId: string): Promise<T> {
    return this.runner.import(moduleId)
  }

  /** @internal */
  public _getViteEnvironments(): DevEnvironment[] {
    return Object.values(this.vite.environments || {})
  }

  /** @internal */
  public async _openBrowserPage(sessionId: string, pool: {
    reject: (error: Error) => void
    parallel?: boolean
  }): Promise<void> {
    if (!this.browser) {
      throw new Error(`browser is not initialized`)
    }

    const resolvedUrls = this.browser.vite.resolvedUrls
    const origin = resolvedUrls?.local[0] ?? resolvedUrls?.network[0]
    if (!origin) {
      throw new Error(
        `Can't find browser origin URL for project "${this.name}"`,
      )
    }

    const url = new URL('/__vitest_test__/', origin)
    url.searchParams.set('sessionId', sessionId)
    const otelCarrier = this.vitest._traces.getContextCarrier()
    this.vitest._browserSessions.sessionIds.add(sessionId)
    const sessionPromise = this.vitest._browserSessions.createSession(
      sessionId,
      this,
      pool,

View on GitHub (pinned to 1fa9837ec2)