{"record":{"id":"650f6e6026ee71a8","repo":"jackwener/OpenCLI","slug":"browser-drag-is-not-supported-by-this-browser-back","errorCode":null,"errorMessage":"browser drag is not supported by this browser backend","messagePattern":"browser drag is not supported by this browser backend","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli.ts","lineNumber":2250,"sourceCode":"        return;\n      }\n      const result = await page.uploadFiles(resolvedTarget, resolvedFiles.files, parsed.opts);\n      console.log(JSON.stringify(result, null, 2));\n    }));\n\n  addBrowserTabOption(\n    addPrefixedSemanticLocatorOptions(\n      addPrefixedSemanticLocatorOptions(browser.command('drag'), 'from'),\n      'to',\n    )\n      .argument('[source]', 'Numeric ref/CSS selector to drag from, or omit with --from-role/--from-name/etc.')\n      .argument('[target]', 'Numeric ref/CSS selector to drop onto, or omit with --to-role/--to-name/etc.')\n      .option('--from-nth <n>', 'When <source> is a multi-match CSS selector, pick the nth match (0-based)')\n      .option('--to-nth <n>', 'When <target> is a multi-match CSS selector, pick the nth match (0-based)')\n      .description('Drag one element to another — JSON envelope {dragged, source, target, source_matches_n, target_matches_n}'),\n  )\n    .action(browserAction(async (page, source, target, opts) => {\n      if (typeof page.drag !== 'function') throw new Error('browser drag is not supported by this browser backend');\n      const resolvedSource = await resolvePrefixedWriteTargetOrPrint(page, source, opts ?? {}, 'from', 'source');\n      if (!resolvedSource) return;\n      const resolvedTarget = await resolvePrefixedWriteTargetOrPrint(page, target, opts ?? {}, 'to', 'target');\n      if (!resolvedTarget) return;\n      const from = parseResolveFlag(opts?.fromNth, '--from-nth');\n      if ('error' in from) {\n        console.log(JSON.stringify({ error: { code: 'usage_error', message: from.error } }, null, 2));\n        process.exitCode = EXIT_CODES.USAGE_ERROR;\n        return;\n      }\n      const to = parseResolveFlag(opts?.toNth, '--to-nth');\n      if ('error' in to) {\n        console.log(JSON.stringify({ error: { code: 'usage_error', message: to.error } }, null, 2));\n        process.exitCode = EXIT_CODES.USAGE_ERROR;\n        return;\n      }\n      const result = await page.drag(resolvedSource, resolvedTarget, { from: from.opts, to: to.opts });\n      console.log(JSON.stringify(result, null, 2));","sourceCodeStart":2232,"sourceCodeEnd":2268,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/src/cli.ts#L2232-L2268","documentation":"The `browser drag` command feature-detects `page.drag` and throws this capability error when the backend lacks drag-and-drop support. Dragging requires low-level mouse event synthesis that limited drivers do not implement.","triggerScenarios":"Running `browser drag <source> --to <target>` (or with --to-role/--to-name) on a backend without a `drag` method.","commonSituations":"Minimal/custom browser drivers; HTML5 drag-and-drop pages where even supported backends may need eval-based workarounds.","solutions":["Switch to a backend implementing drag (Playwright/Puppeteer).","Emulate drag via `browser eval` dispatching dragstart/dragover/drop events for HTML5 DnD.","Update the driver/adapter to a version with drag support."],"exampleFix":"// before\nbrowser --backend minimal drag '#item' --to '#list'\n// after\nbrowser --backend playwright drag '#item' --to '#list'","handlingStrategy":"type-guard","validationCode":"const page = await getBrowserPage();\nif (typeof page.drag !== 'function') {\n  throw new Error('Current backend cannot drag elements');\n}","typeGuard":"function supportsDrag(page) {\n  return typeof page?.drag === 'function';\n}","tryCatchPattern":"try {\n  await run(['browser', 'drag', src, '--to', dst]);\n} catch (err) {\n  if (String(err.message).includes('drag is not supported')) {\n    await run(['browser', 'eval', html5DragScript(src, dst)]);\n  } else throw err;\n}","preventionTips":["Feature-detect drag before drag commands.","For HTML5 DnD pages, prefer eval-based dragstart/drop dispatch even on capable backends.","Choose mouse-event-capable backends for drag tests.","Keep adapters current."],"tags":["browser","cli","capability","drag-and-drop"],"backgroundTag":"unsupported-browser-capability","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}