Skip to content

Fix: don't throw in checkVisibility for a detached text node - #3525

Merged
kblok merged 1 commit into
masterfrom
implement-upstream-change-15197
Jul 28, 2026
Merged

Fix: don't throw in checkVisibility for a detached text node#3525
kblok merged 1 commit into
masterfrom
implement-upstream-change-15197

Conversation

@kblok

@kblok kblok commented Jul 28, 2026

Copy link
Copy Markdown
Member

Calling isHidden()/isVisible() on an ElementHandle wrapping a text node that was never attached to the DOM (e.g. document.createTextNode('x') with no parent) threw a TypeError instead of returning true for hidden. checkVisibility resolves a text node to its parentElement before calling getComputedStyle, and a detached text node has parentElement === null, so getComputedStyle(null) blew up.

Ports the fix from puppeteer/puppeteer#15197: same guard as the existing if (!node) return visible === false; check, just one level down after the parent lookup. Added a regression test in IsVisibleIsHiddenTests using an orphan text node created via document.createTextNode.

Ports puppeteer/puppeteer#15197. isHidden()/isVisible() resolve a text
node to its parent element before calling getComputedStyle, but a text
node that was never attached to the DOM has parentElement === null,
so getComputedStyle(null) throws instead of resolving to "hidden".

Adds the same guard used upstream (mirroring the existing
`if (!node) return visible === false;` check one level down, after the
parent lookup) and a regression test using an orphan text node created
via document.createTextNode.
@kblok
kblok merged commit 0d283c6 into master Jul 28, 2026
46 of 50 checks passed
@kblok
kblok deleted the implement-upstream-change-15197 branch July 28, 2026 17:29
sondresjolyst pushed a commit to sondresjolyst/garge-api that referenced this pull request Aug 10, 2026
Updated [PuppeteerSharp](https://github.com/hardkoded/puppeteer-sharp)
from 25.3.4 to 25.4.0.

<details>
<summary>Release notes</summary>

_Sourced from [PuppeteerSharp's
releases](https://github.com/hardkoded/puppeteer-sharp/releases)._

## 25.4.0

## What's Changed
* Roll Chrome to 151.0.7922.47 (#​15237) by @​kblok in
hardkoded/puppeteer-sharp#3524
* New Feature: Add browser-level PWA install/launch/uninstall APIs
(#​15235) by @​kblok in
hardkoded/puppeteer-sharp#3523
* New Feature: Expose Handled getter on Dialog (#​15225) by @​kblok in
hardkoded/puppeteer-sharp#3521
* Fix: don't throw in checkVisibility for a detached text node by
@​kblok in hardkoded/puppeteer-sharp#3525
* Fix: Roll to Firefox 152.0.5 (#​15219) by @​kblok in
hardkoded/puppeteer-sharp#3527
* Fix: combine duplicate BiDi response headers instead of overwriting
(#​15203) by @​kblok in
hardkoded/puppeteer-sharp#3526
* Bump version to 25.4.0 by @​kblok in
hardkoded/puppeteer-sharp#3528


**Full Changelog**:
hardkoded/puppeteer-sharp@v25.3.4...v25.4.0

Commits viewable in [compare
view](hardkoded/puppeteer-sharp@v25.3.4...v25.4.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=PuppeteerSharp&package-manager=nuget&previous-version=25.3.4&new-version=25.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant