grafana/k6 · error
querying all selectors %q: %w
Error message
querying all selectors %q: %w
What it means
queryAll evaluated the injected js.QueryAll script in the element's context and the evaluation failed (element_handle.go:1272). The wrapped error is a CDP/evaluation error — context destroyed by navigation, target closed/crashed — identical in nature to the $() evaluation failure but on the multi-select path.
Source
Thrown at internal/js/modules/k6/browser/common/element_handle.go:1272
return nil, fmt.Errorf("querying all selector %q: %w", selector, err)
}
return handles, nil
}
func (h *ElementHandle) queryAll(selector string, eval evalFunc) (_ []*ElementHandle, rerr error) {
parsedSelector, err := NewSelector(selector)
if err != nil {
return nil, fmt.Errorf("parsing selector %q: %w", selector, err)
}
result, err := eval(
h.ctx,
evalOptions{forceCallable: true, returnByValue: false},
js.QueryAll,
parsedSelector,
)
if err != nil {
return nil, fmt.Errorf("querying all selectors %q: %w", selector, err)
}
if result == nil {
// it is ok to return a nil slice because it means we didn't find any elements.
return nil, nil
}
handles, ok := result.(JSHandleAPI)
if !ok {
return nil, fmt.Errorf("getting element handle for selector %q: %w", selector, ErrJSHandleInvalid)
}
defer func() {
if err := handles.Dispose(); err != nil {
err = fmt.Errorf("disposing element handles: %w", err)
rerr = errors.Join(err, rerr)
}
}()
props, err := handles.GetProperties()View on GitHub (pinned to 93accf6570)
Solutions
- Wait for load state after navigating actions before $$
- Re-query the base element handle after navigation — the old handle's context is gone
- try/catch with one retry for transient races
- If crashes correlate with VU load, reduce parallelism or check chromium memory
Example fix
// before
await page.click('button.load-more');
const items = await page.$$('.item'); // may race the re-render
// after
await page.click('button.load-more');
await page.waitForLoadState('networkidle');
const items = await page.$$('.item'); Defensive patterns
Strategy: try-catch
Validate before calling
await page.waitForLoadState('domcontentloaded');
if (!(await el.isVisible())) throw new Error('element context probably navigated away'); Try / catch
try { return await el.$$(sel); }
catch (e) {
if (/querying all selectors/.test(e.message)) { await page.waitForLoadState(); return await el.$$(sel); }
throw e;
} Prevention
- Await load state after route changes before scraping
- Re-acquire base handles after navigation
- Retry transient races once
When it happens
Trigger: Navigation, iframe removal, or page close between the $$ call and evaluation; browser crash under load; stale element handle from a previous document.
Common situations: Scraping all rows right as an SPA transitions routes; browser teardown racing pending $$ promises at k6 iteration end.
Related errors
- querying selector %q: %w
- getting node in frame: %w
- getting injected script: %w
- resolving DOM node: %w
- the page may have navigated away or the element is now mi
AI-assisted analysis of grafana/k6@93accf6570 (2026-08-15).
Data as JSON: /api/errors/3414b7b449db1a8e.
Report an issue: GitHub.