grafana/k6

browser: add locator.isInViewport() method

Closed

#6,022 opened on May 29, 2026

 (2 comments) (0 reactions) (0 assignees)Go (1,537 forks)batch import
browserfeaturegood first issuehacktoberfesttriage

Repository metrics

Stars
 (30,564 stars)
PR merge metrics
 (Avg merge 11d 15h) (47 merged PRs in 30d)

Description

Feature Description

k6/browser has no way to detect whether an element intersects the visible viewport. A CTA button can be attached, isVisible() === true, and clickable from k6's perspective, yet rendered below the fold so real users never see it — a silent failure on mobile/responsive sites.

Playwright exposes locator.isInViewport(ratio?) for exactly this case. We don't have an equivalent.

Computing the answer in userland from Locator.BoundingBox() + Page.ViewportSize() is tempting but wrong — it misses scrollable containers, CSS transforms, clip-path, iframes, and DPR/zoom. These are the cases that pushed Playwright off geometry math and onto IntersectionObserver.

Suggested Solution

locator.isInViewport(options?: { ratio?: number, timeout?: number }): Promise<boolean>

Implementation would mirror Playwright's approach — inject IntersectionObserver via Runtime.callFunctionOn — using the existing evalWithScript pattern already used by checkElementState, dispatchEvent, selectOption, etc.

Already existing or connected issues / PRs (optional)

Contributor guide