vitest-dev/vitest · error · Error
Commands are only available for browser tests.
Error message
Commands are only available for browser tests.
What it means
`wdioSwitchContext` reads `project.browser!.provider`. If the project isn't a browser project (no provider initialized), the provider is undefined and the RPC refuses with this message — the call only makes sense for browser tests with a working provider.
Source
Thrown at packages/browser/src/node/rpc.ts:329
}
return result?.map
},
cancelCurrentRun(reason) {
vitest.cancelCurrentRun(reason)
},
async resolveId(id, importer) {
return mockResolver.resolveId(id, importer)
},
debug(...args) {
vitest.logger.console.debug(...args)
},
getCountOfFailedTests() {
return vitest.state.getCountOfFailedTests()
},
async wdioSwitchContext(direction) {
const provider = project.browser!.provider
if (!provider) {
throw new Error('Commands are only available for browser tests.')
}
if (provider.name !== 'webdriverio') {
throw new Error('Switch context is only available for WebDriverIO provider.')
}
if (direction === 'iframe') {
await (provider as any).switchToTestFrame()
}
else {
await (provider as any).switchToMainFrame()
}
},
async triggerCommand(sessionId, command, testPath, payload) {
debug?.('[%s] Triggering command "%s"', sessionId, command)
const provider = project.browser!.provider
if (!provider) {
throw new Error('Commands are only available for browser tests.')
}
const context = Object.assign(View on GitHub (pinned to d568f8ce37)
Solutions
- Ensure the test runs in a project with `test.browser.enabled: true` and a configured provider.
- Verify provider init succeeded (check for browser binary / provider package errors).
- Guard helper code so iframe-switching only runs for browser projects.
Example fix
// before — helper used by both node and browser projects
await switchToTestFrame()
// after
if (globalThis.__vitest_browser__) {
await switchToTestFrame()
} Defensive patterns
Strategy: type-guard
Validate before calling
function isBrowserProject(project: { browser?: { provider?: unknown } }): boolean {
return !!project.browser?.provider
} Type guard
const isBrowserProject = (p: { browser?: { provider?: unknown } }): p is { browser: { provider: object } } =>
!!p.browser?.provider Prevention
- Run WebDriverIO frame switching only in browser projects.
- Gate shared helpers with a project-type check.
- Verify provider init when this fires unexpectedly.
When it happens
Trigger: Calling the `wdioSwitchContext` RPC (mapped to WebDriverIO's `switchToTestFrame`/`switchToMainFrame`) from a project that has no browser provider — e.g. a node-only project, or before provider init.
Common situations: Sharing test helpers between browser and node projects; misconfigured `projects` where the helper runs against the wrong project; provider init failed silently.
Related errors
- Cannot compare screenshots without a test path
- `resolveOptions` has to be used in a test file
- Invalid command name "${name}". Only alphanumeric characters
- Provider ${this.provider.name} does not support command "${n
- Invalid command name "${command}". Only alphanumeric charact
AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03).
Data as JSON: /data/errors/63605f7e7c647d2d.json.
Report an issue: GitHub.