grafana/k6 · error
parse isEditabled options of selector
Error message
parse isEditabled options of selector %q: %w
What it means
Thrown synchronously by page.isEditable(selector, opts) when FrameIsEditableOptions.Parse fails. The embedded FrameBaseOptions.Parse (internal/js/modules/k6/browser/common/frame_options.go:218-232) always returns nil on stock k6, so this wrapper is defensive/unreachable there. Note the wrapper text contains a known typo — 'isEditabled' instead of 'isEditable' (page_mapping.go:309) — useful when grepping logs or source.
Solutions
- Pass only strict and timeout (integer ms) in opts
- Omit opts for defaults
- When filtering logs, match the literal (misspelled) message text 'isEditabled'
Example fix
// before
await page.isEditable('#field', { timeout: '1s' });
// after
await page.isEditable('#field', { timeout: 1000 }); Defensive patterns
Strategy: validation
Validate before calling
const ALLOWED = new Set(['timeout', 'strict']);
const bad = Object.keys(opts ?? {}).filter(k => !ALLOWED.has(k));
if (bad.length) console.warn(`isEditable ignores unknown options: ${bad.join(', ')}`);
if (opts?.timeout !== undefined && !Number.isInteger(opts.timeout)) {
throw new Error('isEditable timeout must be integer milliseconds');
}
await page.isEditable(selector, opts); Type guard
/** @param {unknown} o */
function isBaseOpts(o) {
if (o === undefined || o === null) return true;
if (typeof o !== 'object') return false;
const t = /** @type {any} */ (o);
return (t.timeout === undefined || Number.isInteger(t.timeout))
&& (t.strict === undefined || typeof t.strict === 'boolean');
} Try / catch
try {
return await page.isEditable(selector, opts);
} catch (e) {
// note: the thrown message contains the typo 'isEditabled'
if (String(e).includes('isEditabled options')) {
return await page.isEditable(selector);
} throw e;
} Prevention
- isEditable reads only timeout and strict
- When grepping logs, search the literal misspelling 'isEditabled'
- Pass timeouts as integers
When it happens
Trigger: Not reachable with current stock code; a custom parser validating strict/timeout could raise it. Searching for 'isEditable options' in logs will miss it because of the typo — search 'isEditabled'.
Common situations: Custom builds with stricter validation; grep-based log analysis defeated by the typo'd message.
Related errors
- parse isChecked options of selector
- parse isDisabled options of selector
- parse isEditable options of selector
- parse isEnabled options of selector
- parse isHidden options of selector
AI-assisted analysis of grafana/k6@8d06114777 (2026-09-14).
Data as JSON: /api/errors/35fe52d4baaba089.
Report an issue: GitHub.
Appendix: source
Thrown at internal/js/modules/k6/browser/browser/page_mapping.go:310
}
return promise(vu, func() (any, error) {
return p.IsChecked(selector, popts) //nolint:wrapcheck
}), nil
},
"isClosed": p.IsClosed,
"isDisabled": func(selector string, opts sobek.Value) (*sobek.Promise, error) {
popts, err := parseFrameIsDisabledOptions(rt, opts, p.MainFrame().Timeout())
if err != nil {
return nil, fmt.Errorf("parse isDisabled options of selector %q: %w", selector, err)
}
return promise(vu, func() (any, error) {
return p.IsDisabled(selector, popts) //nolint:wrapcheck
}), nil
},
"isEditable": func(selector string, opts sobek.Value) (*sobek.Promise, error) {
popts, err := parseFrameIsEditableOptions(rt, opts, p.MainFrame().Timeout())
if err != nil {
return nil, fmt.Errorf("parse isEditabled options of selector %q: %w", selector, err)
}
return promise(vu, func() (any, error) {
return p.IsEditable(selector, popts) //nolint:wrapcheck
}), nil
},
"isEnabled": func(selector string, opts sobek.Value) (*sobek.Promise, error) {
popts, err := parseFrameIsEnabledOptions(rt, opts, p.MainFrame().Timeout())
if err != nil {
return nil, fmt.Errorf("parse isEnabled options of selector %q: %w", selector, err)
}
return promise(vu, func() (any, error) {
return p.IsEnabled(selector, popts) //nolint:wrapcheck
}), nil
},
"isHidden": func(selector string, opts sobek.Value) (*sobek.Promise, error) {
popts, err := parseFrameIsHiddenOptions(rt, opts)
if err != nil {
return nil, fmt.Errorf("parse isHidden options of selector %q: %w", selector, err)View on GitHub (pinned to 8d06114777)