jackwener/OpenCLI · error · CommandExecutionError
More Actions button not found
Error message
More Actions button not found
What it means
The Qoder 'more-actions' UI command clicks a visible 'More Actions' element to open the context menu, then lists its items. If clickByTextScript returns {ok:false} (no matching visible element), it throws CommandExecutionError('More Actions button not found'). The trigger button for the actions menu was not found in the DOM.
Source
Thrown at clis/qoder/ui.js:313
});
return rows;
},
});
// -------- more-actions --------
cli({
site: 'qoder',
name: 'more-actions',
access: 'read',
description: 'Click the "More Actions" button and list its menu items.',
domain: 'localhost',
strategy: Strategy.UI,
browser: true,
args: [],
columns: ['Index', 'Item'],
func: async (page) => {
const res = await evaluateQoder(page, clickByTextScript(['More Actions']));
if (!res?.ok) throw new CommandExecutionError(res?.reason || 'More Actions button not found', '');
await page.wait(0.4);
const items = requireArrayResult(await evaluateQoder(page, `(() => {
${IS_VISIBLE_JS}
const popovers = Array.from(document.querySelectorAll('[role="menu"], [role="dialog"], [class*="popover"i], [class*="menu"i]')).filter(isVisible)
.filter((el) => { const r = el.getBoundingClientRect(); return r.width < 500 && r.height < 600; });
if (!popovers.length) return [];
const pop = popovers[popovers.length - 1];
return Array.from(pop.querySelectorAll('[role="menuitem"], button'))
.filter(isVisible)
.map((b) => (b.innerText || b.textContent || '').trim().replace(/\\s+/g, ' '))
.filter(Boolean);
})()`), 'qoder more-actions');
try { await page.evaluate(`document.body.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));`); } catch {}
if (!items.length) {
throw new EmptyResultError('qoder more-actions', 'Menu opened but no items detected.');
}
return items.map((it, i) => ({ Index: i + 1, Item: it }));
},View on GitHub (pinned to 49907e53dc)
Solutions
- Open the Qoder view where More Actions is available (e.g. select a Quest/element that exposes it) and retry.
- Add icon-button selector fallbacks via clickFirstScript(['[aria-label*="more" i]', '[title*="more" i]', 'button[aria-haspopup="menu"]']).
- Add a startup wait and re-run the command.
- Verify the current control's label/selector in CDP DevTools and update clis/qoder/ui.js.
- Dismiss any modal blocking the toolbar.
Example fix
// before const res = await evaluateQoder(page, clickByTextScript(['More Actions'])); // after: text + icon fallbacks let res = await evaluateQoder(page, clickByTextScript(['More Actions'])); if (!res?.ok) res = await evaluateQoder(page, clickFirstScript(['[aria-label*="more" i]', '[aria-label*="action" i]']));
Defensive patterns
Strategy: fallback
Validate before calling
async function moreActionsAvailable(page) {
const probe = await page.evaluate(`(() => {
const byText = Array.from(document.querySelectorAll('button, [role="button"]'))
.some(b => (b.innerText||'').toLowerCase().includes('more actions'));
const byIcon = !!document.querySelector('[aria-label*="more" i], [title*="more" i]');
return byText || byIcon;
})()`);
if (probe !== true) throw new Error('More Actions control not present in current view.');
} Type guard
function isClickResult(res) {
return res !== null && typeof res === 'object' && typeof res.ok === 'boolean';
} Try / catch
try {
await cli.run(['qoder', 'more-actions']);
} catch (e) {
if (String(e.message).includes('More Actions button not found')) {
console.error('Navigate to the view exposing More Actions (or select an item) and retry.');
} else throw e;
} Prevention
- Navigate to the Qoder view where More Actions exists before running the command
- Select a Quest/element first if the menu is context-dependent
- Check for icon-only replacements after Qoder updates (no innerText to match)
- Keep the window visible to avoid zero-size-rect visibility failures
When it happens
Trigger: Running 'more-actions' when the More Actions control is hidden (no selection/context in the Qoder UI), the UI is still loading, the label is icon-only ('...' without text), or the wording changed in a Qoder update.
Common situations: Qoder update replaced the text button with an ellipsis icon button (no innerText to match); menu only available in certain views; window minimized so isVisible fails; welcome screen covering the toolbar.
Related errors
- Knowledge button not found
- Marketplace button not found
- Credits Usage not visible
- View all button not visible
- Add Workspace button not found
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/766b5b568c12b41d.
Report an issue: GitHub.