grafana/k6

browser: add locator.isInViewport() method

Open

#6,022 opened on May 29, 2026

View on GitHub
 (2 comments) (0 reactions) (0 assignees)Go (30,564 stars) (1,537 forks)batch import
browserfeaturegood first issuehacktoberfesttriage

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