SeleniumHQ/selenium · error · Error

Contexts must be an array of non-empty strings

Error message

Contexts must be an array of non-empty strings

What it means

Thrown by Network.setCacheBehavior() when the optional contexts argument is non-null but is not a non-empty array of non-empty trimmed strings. The client verifies Array.isArray, length > 0, and that every element is a string whose trim() is not empty, before attaching the contexts to the network.setCacheBehavior command. This guards against empty context IDs that the remote end would reject.

Solutions

  1. Pass an array of one or more non-empty string context ids, e.g. setCacheBehavior('bypass', ['ctx1','ctx2']).
  2. Filter out empty/blank ids before calling: contexts.filter(c => typeof c === 'string' && c.trim() !== '').
  3. Pass null (the default) to apply the cache behavior globally, avoiding the contexts check.

Example fix

// before
await network.setCacheBehavior('bypass', currentContextId) // string

// after
await network.setCacheBehavior('bypass', [currentContextId]) // array of non-empty strings
Defensive patterns

Strategy: validation

Validate before calling

function assertContexts(contexts) {
  if (contexts === null) return null
  if (!Array.isArray(contexts) || contexts.length === 0 ||
      contexts.some((c) => typeof c !== 'string' || c.trim() === '')) {
    throw new Error('contexts must be a non-empty array of non-empty strings')
  }
  return contexts
}

Type guard

function isNonEmptyStringArray(v) {
  return Array.isArray(v) && v.length > 0 &&
    v.every((c) => typeof c === 'string' && c.trim() !== '')
}

Prevention

When it happens

Trigger: Calling setCacheBehavior('bypass', 'ctx1') (string not array), setCacheBehavior('bypass', []), setCacheBehavior('bypass', ['']), setCacheBehavior('bypass', [' ']), or setCacheBehavior('bypass', [123]).

Common situations: Passing a single context id string instead of an array; reusing a variable that was filtered to empty; including whitespace-only or null context ids copied from a stale context list.

Related errors


AI-assisted analysis of SeleniumHQ/selenium@aa36b38e69 (2026-08-14). Data as JSON: /api/errors/7ff3175c19f88a48. Report an issue: GitHub.

Appendix: source

Thrown at javascript/selenium-webdriver/bidi/network.js:389

  async setCacheBehavior(behavior, contexts = null) {
    if (!Object.values(CacheBehavior).includes(behavior)) {
      throw new Error(`Cache behavior must be either "${CacheBehavior.DEFAULT}" or "${CacheBehavior.BYPASS}"`)
    }

    const command = {
      method: 'network.setCacheBehavior',
      params: {
        cacheBehavior: behavior,
      },
    }

    if (contexts !== null) {
      if (
        !Array.isArray(contexts) ||
        contexts.length === 0 ||
        contexts.some((c) => typeof c !== 'string' || c.trim() === '')
      ) {
        throw new Error('Contexts must be an array of non-empty strings')
      }
      command.params.contexts = contexts
    }

    await this.bidi.send(command)
  }

  /**
   * Unsubscribes from network events for all browsing contexts.
   * @returns {Promise<void>} A promise that resolves when the network connection is closed.
   */
  async close() {
    if (
      this._browsingContextIds !== null &&
      this._browsingContextIds !== undefined &&
      this._browsingContextIds.length > 0
    ) {
      await this.bidi.unsubscribe(

View on GitHub (pinned to aa36b38e69)