microsoft/playwright · error · Error

geolocation.accuracy: precondition 0 <= ACCURACY failed.

Error message

geolocation.accuracy: precondition 0 <= ACCURACY failed.

What it means

`verifyGeolocation` enforces a non-negative accuracy. Note that `accuracy` defaults to 0 when falsy, so this only fires when an explicit negative accuracy is supplied.

Source

Thrown at packages/playwright-core/src/server/browserContext.ts:792

  verifyGeolocation(options.geolocation);
}

export function findMatchingHttpCredentials(credentials: HttpCredentials[] | undefined, url: string): HttpCredentials | undefined {
  const origin = new URL(url).origin.toLowerCase();
  return credentials?.find(c => !c.origin || c.origin.toLowerCase() === origin);
}

export function verifyGeolocation(geolocation?: types.Geolocation): asserts geolocation is types.Geolocation {
  if (!geolocation)
    return;
  geolocation.accuracy = geolocation.accuracy || 0;
  const { longitude, latitude, accuracy } = geolocation;
  if (longitude < -180 || longitude > 180)
    throw new Error(`geolocation.longitude: precondition -180 <= LONGITUDE <= 180 failed.`);
  if (latitude < -90 || latitude > 90)
    throw new Error(`geolocation.latitude: precondition -90 <= LATITUDE <= 90 failed.`);
  if (accuracy < 0)
    throw new Error(`geolocation.accuracy: precondition 0 <= ACCURACY failed.`);
}

export function verifyClientCertificates(clientCertificates?: types.BrowserContextOptions['clientCertificates']) {
  if (!clientCertificates)
    return;
  for (const cert of clientCertificates) {
    if (!cert.origin)
      throw new Error(`clientCertificates.origin is required`);
    if (!cert.cert && !cert.key && !cert.passphrase && !cert.pfx)
      throw new Error('None of cert, key, passphrase or pfx is specified');
    if (cert.cert && !cert.key)
      throw new Error('cert is specified without key');
    if (!cert.cert && cert.key)
      throw new Error('key is specified without cert');
    if (cert.pfx && (cert.cert || cert.key))
      throw new Error('pfx is specified together with cert, key or passphrase');
  }
}

View on GitHub (pinned to c8fc3bf8d3)

Solutions

  1. Pass a non-negative accuracy, or omit it (defaults to 0)
  2. Validate input: `accuracy = Math.max(0, accuracy)`

Example fix

// before
await context.setGeolocation({ longitude: 0, latitude: 0, accuracy: -10 });

// after
await context.setGeolocation({ longitude: 0, latitude: 0, accuracy: 10 });
Defensive patterns

Strategy: validation

Validate before calling

function normalizeAccuracy(a?: number): number | undefined {
  if (a === undefined) return undefined;
  if (a < 0) throw new Error(`accuracy must be >= 0 (got ${a})`);
  return a;
}
await context.setGeolocation({ longitude: lon, latitude: lat, accuracy: normalizeAccuracy(acc) });

Prevention

When it happens

Trigger: `context.setGeolocation({ longitude: 0, latitude: 0, accuracy: -5 })` or `newContext({ geolocation: { accuracy: -1 } })`.

Common situations: Configs computing accuracy from deltas that go negative; copy-paste errors; treating accuracy as a confidence percentage with negative semantics.

Related errors


AI-assisted analysis of microsoft/playwright@c8fc3bf8d3 (2026-08-12). Data as JSON: /api/errors/08b2d2b58c2a8371. Report an issue: GitHub.