grafana/k6 · warning

disposing property while querying all selectors %q: %w

Error message

disposing property while querying all selectors %q: %w

What it means

In queryAll's property loop, non-element properties are disposed as cleanup; one of those Dispose calls failed (element_handle.go:1312). Like the other deferred-dispose errors, it means the target/context went away mid-operation; the operation was already failing or about to return.

Source

Thrown at internal/js/modules/k6/browser/common/element_handle.go:1312

	}

	type indexedElem struct {
		index int
		elem  *ElementHandle
	}

	indexedElems := make([]indexedElem, 0, len(props))
	for key, prop := range props {
		if el := prop.AsElement(); el != nil {
			// DOM elements are stored with numeric indices ("0", "1", "2", ...)
			// per JavaScript's array-like object specification.
			idx, err := strconv.Atoi(key)
			if err != nil {
				return nil, fmt.Errorf("parsing element index %q for selector %q: %w", key, selector, err)
			}
			indexedElems = append(indexedElems, indexedElem{index: idx, elem: el})
		} else if err := prop.Dispose(); err != nil {
			return nil, fmt.Errorf("disposing property while querying all selectors %q: %w", selector, err)
		}
	}

	slices.SortFunc(indexedElems, func(a, b indexedElem) int {
		return cmp.Compare(a.index, b.index)
	})

	els := make([]*ElementHandle, 0, len(indexedElems))
	for _, ie := range indexedElems {
		els = append(els, ie.elem)
	}

	return els, nil
}

// SetChecked checks or unchecks an element.
func (h *ElementHandle) SetChecked(checked bool, opts *ElementHandleSetCheckedOptions) error {
	setChecked := func(apiCtx context.Context, handle *ElementHandle, p *Position) (any, error) {

View on GitHub (pinned to 93accf6570)

Solutions

  1. Fix the underlying timing: wait for stable state before $$
  2. Don't close the browser while scrape promises are in flight
  3. Ignore when the target is already intentionally closed
  4. Keep result sets smaller (narrower selector) to shrink the dispose window
Defensive patterns

Strategy: try-catch

Try / catch

try { return await el.$$(sel); }
catch (e) { if (/disposing property while querying/.test(e.message) && targetWasClosing) return []; throw e; }

Prevention

When it happens

Trigger: Browser page/target closed or context destroyed by navigation while $$ was iterating result properties (each non-element property gets disposed immediately).

Common situations: Long result lists being disposed when k6 ends the iteration and closes the browser; navigation racing a bulk scrape.

Related errors


AI-assisted analysis of grafana/k6@93accf6570 (2026-08-15). Data as JSON: /api/errors/602d9bd63a713275. Report an issue: GitHub.