jackwener/OpenCLI · error

browser ${checked ? 'check' : 'uncheck'} is not supported by

Error message

browser ${checked ? 'check' : 'uncheck'} is not supported by this browser backend

What it means

Shared handler for `browser check` and `browser uncheck`; it feature-detects `page.setChecked` and throws a command-specific capability error when the backend lacks checkbox toggling support. The message names the exact command (check or uncheck) based on the `checked` flag.

Source

Thrown at src/cli.ts:2166

      const resolvedTarget = await resolveWriteTargetOrPrint(page, target, opts ?? {});
      if (!resolvedTarget) return;
      const parsed = nthToResolveOpts(opts?.nth);
      if ('error' in parsed) {
        console.log(JSON.stringify({ error: { code: 'usage_error', message: parsed.error } }, null, 2));
        process.exitCode = EXIT_CODES.USAGE_ERROR;
        return;
      }
      const { matches_n, match_level } = await page.dblClick(resolvedTarget, parsed.opts);
      console.log(JSON.stringify({ dblclicked: true, target: resolvedTarget, matches_n, match_level }, null, 2));
    }));

  const runCheckCommand = async (
    page: Awaited<ReturnType<typeof getBrowserPage>>,
    target: unknown,
    opts: Record<string, unknown>,
    checked: boolean,
  ): Promise<void> => {
    if (typeof page.setChecked !== 'function') throw new Error(`browser ${checked ? 'check' : 'uncheck'} is not supported by this browser backend`);
    const resolvedTarget = await resolveWriteTargetOrPrint(page, target, opts);
    if (!resolvedTarget) return;
    const parsed = nthToResolveOpts(opts?.nth);
    if ('error' in parsed) {
      console.log(JSON.stringify({ error: { code: 'usage_error', message: parsed.error } }, null, 2));
      process.exitCode = EXIT_CODES.USAGE_ERROR;
      return;
    }
    const result = await page.setChecked(resolvedTarget, checked, parsed.opts);
    console.log(JSON.stringify({
      checked: result.checked,
      changed: result.changed,
      target: resolvedTarget,
      matches_n: result.matches_n,
      match_level: result.match_level,
      ...(result.kind ? { kind: result.kind } : {}),
    }, null, 2));
  };

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Switch to a backend implementing setChecked (Playwright/Puppeteer-based).
  2. Use `browser click` on the checkbox as a fallback, or `browser eval` setting `element.checked` and dispatching change.
  3. Confirm the backend config selects a driver that supports form control helpers.

Example fix

// before
browser --backend minimal check 'input[type=checkbox]'
// after
browser --backend playwright check 'input[type=checkbox]'
Defensive patterns

Strategy: type-guard

Validate before calling

const page = await getBrowserPage();
if (typeof page.setChecked !== 'function') {
  throw new Error('Current backend cannot check/uncheck controls');
}

Type guard

function supportsSetChecked(page) {
  return typeof page?.setChecked === 'function';
}

Try / catch

try {
  await run(['browser', 'check', sel]);
} catch (err) {
  if (String(err.message).includes('is not supported by this browser backend')) {
    await run(['browser', 'click', sel]);
  } else throw err;
}

Prevention

When it happens

Trigger: Running `browser check <target>` or `browser uncheck <target>` on a backend whose page object has no `setChecked` method.

Common situations: Minimal browser drivers without form-control helpers; automation adapters that expose click but not check/uncheck semantics.

Related errors


AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29). Data as JSON: /api/errors/50570c5612b3adef. Report an issue: GitHub.