grafana/k6

browser: add locator.isInViewport() method

已关闭

#6,022 创建于 2026年5月29日

 (2 条评论) (0 个反应) (0 位负责人)Go (1,537 个派生)batch import
browserfeaturegood first issuehacktoberfesttriage

仓库指标

星标
 (30,564 个星标)
PR 合并指标
 (平均合并 11天 15小时) (30 天内合并 47 个 PR)

描述

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)

贡献者指南