WPT
wpt / css / selectors / invalidation / attribute-or-elemental-selectors-in-has.html
Spec: Selectors ↗
Runs: Chrome 155.0.8041.0 (wpt@2c385f65e, 2026-09-04) | Firefox 157.0a1 (wpt@2c385f65e, 2026-09-04) | Safari 251 preview (wpt@5ce815a83, 2026-08-27) | Ladybird 1.0-a7825 (wpt@2c385f65e, 2026-09-04) | Servo Servo 0.6 (wpt@7e3d005d7, 2026-09-03) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 31/31 | 31/31 | 31/31 | 31/31 | 18/31 | 0/31 |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| initial_color: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| initial_color: div#div_child.color | PASS | PASS | PASS | PASS | PASS | — |
| initial_color: div#div_grandchild.color | PASS | PASS | PASS | PASS | PASS | — |
| add .child to #div_child: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| remove .child from #div_child: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| add .child to #div_grandchild: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| remove .child from #div_grandchild: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| add .descendant to #div_child: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| remove .descendant from #div_child: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| add .descendant to #div_grandchild: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| remove .descendant from #div_grandchild: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| set descendant to #div_grandchild[attrname]: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| clear #div_grandchild[attrname]: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| change #div_grandchild to #div_descendant: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| change #div_descendant to #div_grandchild: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| add descendant to #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| remove descendant from #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| add "div > descendant" to #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| remove "div > descendant" from #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| add div.child to #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| remove div.child from #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| add "div > div.descendant" to #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| remove "div > div.descendant" from #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| add div#div_descendant to #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| remove div#div_descendant from #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| add "div#div_descendant" to #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| remove "div#div_descendant" from #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| add div[attrname] to #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| remove div[attrname] from #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| add "div > div[attrname]" to #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | FAIL | — |
| remove "div > div[attrname]" from #div_subject: div#div_subject.color | PASS | PASS | PASS | PASS | PASS | — |
| Uncaught JS error | — | — | — | — | — | FAIL |