Document supports querySelector | Pass | Pass | Pass | Pass | Pass |
Document supports querySelectorAll | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll returns NodeList instance | Pass | Pass | Pass | Pass | Pass |
Detached Element supports querySelector | Pass | Pass | Pass | Pass | Pass |
Detached Element supports querySelectorAll | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll returns NodeList instance | Pass | Pass | Pass | Pass | Pass |
Fragment supports querySelector | Pass | Pass | Pass | Pass | Pass |
Fragment supports querySelectorAll | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll returns NodeList instance | Pass | Pass | Pass | Pass | Pass |
In-document Element supports querySelector | Pass | Pass | Pass | Pass | Pass |
In-document Element supports querySelectorAll | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll returns NodeList instance | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll null | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll undefined | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll no parameter | Pass | Fail | Pass | Fail | Pass |
Document.querySelector null | Pass | Pass | Pass | Pass | Pass |
Document.querySelector undefined | Pass | Pass | Pass | Pass | Pass |
Document.querySelector no parameter | Pass | Fail | Pass | Fail | Pass |
Document.querySelectorAll tree order | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll null | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll undefined | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll no parameter | Pass | Fail | Pass | Fail | Pass |
Detached Element.querySelector null | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector undefined | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector no parameter | Pass | Fail | Pass | Fail | Pass |
Detached Element.querySelectorAll tree order | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll null | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll undefined | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll no parameter | Pass | Fail | Pass | Fail | Pass |
Fragment.querySelector null | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector undefined | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector no parameter | Pass | Fail | Pass | Fail | Pass |
Fragment.querySelectorAll tree order | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll null | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll undefined | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll no parameter | Pass | Fail | Pass | Fail | Pass |
In-document Element.querySelector null | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector undefined | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector no parameter | Pass | Fail | Pass | Fail | Pass |
In-document Element.querySelectorAll tree order | Pass | Pass | Pass | Pass | Pass |
Document: static NodeList | Pass | Pass | Pass | Pass | Pass |
Document: new NodeList | Pass | Pass | Pass | Pass | Pass |
Detached Element: static NodeList | Pass | Pass | Pass | Pass | Pass |
Detached Element: new NodeList | Pass | Pass | Pass | Pass | Pass |
Fragment: static NodeList | Pass | Pass | Pass | Pass | Pass |
Fragment: new NodeList | Pass | Pass | Pass | Pass | Pass |
In-document Element: static NodeList | Pass | Pass | Pass | Pass | Pass |
In-document Element: new NodeList | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Empty String: | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Empty String: | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid character: [ | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid character: [ | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid character: ] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid character: ] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid character: ( | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid character: ( | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid character: ) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid character: ) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid character: { | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid character: { | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid character: } | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid character: } | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid character: < | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid character: < | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid character: > | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid character: > | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid ID: # | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid ID: # | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid group of selectors: div, | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid group of selectors: div, | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid class: . | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid class: . | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid class: .5cm | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid class: .5cm | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid class: ..test | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid class: ..test | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid class: .foo..quux | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid class: .foo..quux | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid class: .bar. | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid class: .bar. | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid combinator: div & address, p | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid combinator: div & address, p | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid combinator: div >> address, p | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid combinator: div >> address, p | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid combinator: div ++ address, p | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid combinator: div ++ address, p | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid combinator: div ~~ address, p | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid combinator: div ~~ address, p | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid [att=value] selector: [*=test] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid [att=value] selector: [*=test] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid [att=value] selector: [*|*=test] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid [att=value] selector: [*|*=test] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid [att=value] selector: [class= space unquoted ] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Unknown pseudo-class: div:example | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Unknown pseudo-class: div:example | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Unknown pseudo-class: :example | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Unknown pseudo-class: :example | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Unknown pseudo-element: div::example | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Unknown pseudo-element: div::example | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Unknown pseudo-element: ::example | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Unknown pseudo-element: ::example | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid pseudo-element: :::before | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid pseudo-element: :::before | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Undeclared namespace: ns|div | Fail | Pass | Fail | Pass | Fail |
Document.querySelectorAll: Undeclared namespace: ns|div | Fail | Pass | Fail | Pass | Fail |
Document.querySelector: Undeclared namespace: :not(ns|div) | Fail | Pass | Fail | Pass | Fail |
Document.querySelectorAll: Undeclared namespace: :not(ns|div) | Fail | Pass | Fail | Pass | Fail |
Document.querySelector: Invalid namespace: ^|div | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid namespace: ^|div | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Invalid namespace: $|div | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Invalid namespace: $|div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Empty String: | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Empty String: | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid character: [ | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid character: [ | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid character: ] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid character: ] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid character: ( | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid character: ( | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid character: ) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid character: ) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid character: { | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid character: { | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid character: } | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid character: } | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid character: < | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid character: < | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid character: > | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid character: > | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid ID: # | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid ID: # | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid group of selectors: div, | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid group of selectors: div, | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid class: . | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid class: . | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid class: .5cm | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid class: .5cm | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid class: ..test | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid class: ..test | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid class: .foo..quux | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid class: .foo..quux | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid class: .bar. | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid class: .bar. | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid combinator: div & address, p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid combinator: div & address, p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid combinator: div >> address, p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid combinator: div >> address, p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid combinator: div ++ address, p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid combinator: div ++ address, p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid combinator: div ~~ address, p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid combinator: div ~~ address, p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid [att=value] selector: [*=test] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid [att=value] selector: [*=test] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid [att=value] selector: [*|*=test] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid [att=value] selector: [*|*=test] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid [att=value] selector: [class= space unquoted ] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Unknown pseudo-class: div:example | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Unknown pseudo-class: div:example | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Unknown pseudo-class: :example | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Unknown pseudo-class: :example | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Unknown pseudo-element: div::example | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Unknown pseudo-element: div::example | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Unknown pseudo-element: ::example | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Unknown pseudo-element: ::example | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid pseudo-element: :::before | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid pseudo-element: :::before | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Undeclared namespace: ns|div | Fail | Pass | Fail | Pass | Fail |
Detached Element.querySelectorAll: Undeclared namespace: ns|div | Fail | Pass | Fail | Pass | Fail |
Detached Element.querySelector: Undeclared namespace: :not(ns|div) | Fail | Pass | Fail | Pass | Fail |
Detached Element.querySelectorAll: Undeclared namespace: :not(ns|div) | Fail | Pass | Fail | Pass | Fail |
Detached Element.querySelector: Invalid namespace: ^|div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid namespace: ^|div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Invalid namespace: $|div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Invalid namespace: $|div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Empty String: | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Empty String: | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid character: [ | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid character: [ | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid character: ] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid character: ] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid character: ( | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid character: ( | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid character: ) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid character: ) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid character: { | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid character: { | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid character: } | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid character: } | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid character: < | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid character: < | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid character: > | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid character: > | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid ID: # | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid ID: # | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid group of selectors: div, | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid group of selectors: div, | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid class: . | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid class: . | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid class: .5cm | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid class: .5cm | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid class: ..test | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid class: ..test | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid class: .foo..quux | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid class: .foo..quux | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid class: .bar. | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid class: .bar. | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid combinator: div & address, p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid combinator: div & address, p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid combinator: div >> address, p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid combinator: div >> address, p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid combinator: div ++ address, p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid combinator: div ++ address, p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid combinator: div ~~ address, p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid combinator: div ~~ address, p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid [att=value] selector: [*=test] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid [att=value] selector: [*=test] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid [att=value] selector: [*|*=test] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid [att=value] selector: [*|*=test] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid [att=value] selector: [class= space unquoted ] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Unknown pseudo-class: div:example | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Unknown pseudo-class: div:example | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Unknown pseudo-class: :example | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Unknown pseudo-class: :example | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Unknown pseudo-element: div::example | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Unknown pseudo-element: div::example | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Unknown pseudo-element: ::example | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Unknown pseudo-element: ::example | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid pseudo-element: :::before | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid pseudo-element: :::before | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Undeclared namespace: ns|div | Fail | Pass | Fail | Pass | Fail |
Fragment.querySelectorAll: Undeclared namespace: ns|div | Fail | Pass | Fail | Pass | Fail |
Fragment.querySelector: Undeclared namespace: :not(ns|div) | Fail | Pass | Fail | Pass | Fail |
Fragment.querySelectorAll: Undeclared namespace: :not(ns|div) | Fail | Pass | Fail | Pass | Fail |
Fragment.querySelector: Invalid namespace: ^|div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid namespace: ^|div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Invalid namespace: $|div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Invalid namespace: $|div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Empty String: | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Empty String: | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid character: [ | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid character: [ | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid character: ] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid character: ] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid character: ( | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid character: ( | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid character: ) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid character: ) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid character: { | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid character: { | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid character: } | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid character: } | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid character: < | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid character: < | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid character: > | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid character: > | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid ID: # | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid ID: # | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid group of selectors: div, | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid group of selectors: div, | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid class: . | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid class: . | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid class: .5cm | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid class: .5cm | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid class: ..test | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid class: ..test | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid class: .foo..quux | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid class: .foo..quux | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid class: .bar. | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid class: .bar. | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid combinator: div & address, p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid combinator: div & address, p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid combinator: div >> address, p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid combinator: div >> address, p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid combinator: div ++ address, p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid combinator: div ++ address, p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid combinator: div ~~ address, p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid combinator: div ~~ address, p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid [att=value] selector: [*=test] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid [att=value] selector: [*=test] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid [att=value] selector: [*|*=test] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid [att=value] selector: [*|*=test] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid [att=value] selector: [class= space unquoted ] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Unknown pseudo-class: div:example | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Unknown pseudo-class: div:example | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Unknown pseudo-class: :example | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Unknown pseudo-class: :example | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Unknown pseudo-element: div::example | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Unknown pseudo-element: div::example | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Unknown pseudo-element: ::example | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Unknown pseudo-element: ::example | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid pseudo-element: :::before | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid pseudo-element: :::before | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Undeclared namespace: ns|div | Fail | Pass | Fail | Pass | Fail |
In-document Element.querySelectorAll: Undeclared namespace: ns|div | Fail | Pass | Fail | Pass | Fail |
In-document Element.querySelector: Undeclared namespace: :not(ns|div) | Fail | Pass | Fail | Pass | Fail |
In-document Element.querySelectorAll: Undeclared namespace: :not(ns|div) | Fail | Pass | Fail | Pass | Fail |
In-document Element.querySelector: Invalid namespace: ^|div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid namespace: ^|div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Invalid namespace: $|div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Invalid namespace: $|div | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Type selector, matching html element: html | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Type selector, matching html element: html | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Type selector, matching body element: body | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Type selector, matching body element: body | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>* | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Universal selector, matching all children of element with specified ID: #universal>* | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>* | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>* | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>* | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>* | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal * | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Universal selector, matching all descendants of element with specified ID: #universal * | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited | Pass | Pass | Fail | Pass | Pass |
Document.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :link and :visited pseudo-class selectors, matching link elements with href attributes: #head :link, #head :visited | Fail | Pass | Fail | Pass | Fail |
Document.querySelector: :link and :visited pseudo-class selectors, matching link elements with href attributes: #head :link, #head :visited | Fail | Pass | Fail | Pass | Fail |
Document.querySelectorAll: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Class selector, matching element with specified class: .class-p | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Class selector, matching element with specified class: .class-p | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Class selector, matching element with class with escaped character: .foo\:bar | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID selector, matching element with specified id: #id #id-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID selector, matching element with specified id: #id #id-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID selector, not matching non-existent descendant: #id #none | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID selector, not matching non-existent descendant: #id #none | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID selector, matching id value using non-ASCII characters: #台北 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div | Fail | Pass | Pass | Pass | Pass |
Document.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div | Fail | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* | Fail | Pass | Pass | Pass | Pass |
Document.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* | Fail | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Descendant combinator, whitespace characters: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Descendant combinator, whitespace characters: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, matching element that is a child of an element with id: #child>div | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1 > #child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, surrounded by whitespace: #child-div1 > #child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, whitespace after: #child-div1> #child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, whitespace after: #child-div1> #child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, whitespace before: #child-div1 >#child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, whitespace before: #child-div1 >#child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Child combinator, no whitespace: #child-div1>#child-div2 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2 + #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2 + #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+ #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+ #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2 +#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2 +#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em , #group strong | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em , #group strong | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em, #group strong | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Syntax, group of selectors separator, whitespace after: #group em, #group strong | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em ,#group strong | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Syntax, group of selectors separator, whitespace before: #group em ,#group strong | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Type selector, matching html element: html | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Type selector, matching html element: html | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Type selector, matching body element: body | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Type selector, matching body element: body | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>* | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Universal selector, matching all children of element with specified ID: #universal>* | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>* | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>* | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>* | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>* | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal * | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Universal selector, matching all descendants of element with specified ID: #universal * | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited | Pass | Fail | Fail | Pass | Pass |
Detached Element.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited | Pass | Fail | Pass | Pass | Pass |
Detached Element.querySelectorAll: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Class selector, matching element with specified class: .class-p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Class selector, matching element with specified class: .class-p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Class selector, matching element with class with escaped character: .foo\:bar | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID selector, matching element with specified id: #id #id-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID selector, matching element with specified id: #id #id-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID selector, not matching non-existent descendant: #id #none | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID selector, not matching non-existent descendant: #id #none | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div | Fail | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div | Fail | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* | Fail | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* | Fail | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Descendant combinator, whitespace characters: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Descendant combinator, whitespace characters: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, matching element that is a child of an element with id: #child>div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1 > #child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, surrounded by whitespace: #child-div1 > #child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, whitespace after: #child-div1> #child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, whitespace after: #child-div1> #child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, whitespace before: #child-div1 >#child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, whitespace before: #child-div1 >#child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Child combinator, no whitespace: #child-div1>#child-div2 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2 + #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2 + #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+ #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+ #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2 +#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2 +#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em , #group strong | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em , #group strong | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em, #group strong | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Syntax, group of selectors separator, whitespace after: #group em, #group strong | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em ,#group strong | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Syntax, group of selectors separator, whitespace before: #group em ,#group strong | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Type selector, matching html element: html | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Type selector, matching html element: html | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Type selector, matching body element: body | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Type selector, matching body element: body | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>* | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Universal selector, matching all children of element with specified ID: #universal>* | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>* | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>* | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>* | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>* | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal * | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Universal selector, matching all descendants of element with specified ID: #universal * | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited | Pass | Fail | Fail | Pass | Pass |
Fragment.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited | Pass | Fail | Pass | Pass | Pass |
Fragment.querySelectorAll: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Class selector, matching element with specified class: .class-p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Class selector, matching element with specified class: .class-p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Class selector, matching element with class with escaped character: .foo\:bar | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID selector, matching element with specified id: #id #id-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID selector, matching element with specified id: #id #id-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID selector, not matching non-existent descendant: #id #none | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID selector, not matching non-existent descendant: #id #none | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID selector, matching id value using non-ASCII characters: #台北 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div | Fail | Pass | Pass | Pass | Pass |
Fragment.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div | Fail | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* | Fail | Pass | Pass | Pass | Pass |
Fragment.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* | Fail | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Descendant combinator, whitespace characters: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Descendant combinator, whitespace characters: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, matching element that is a child of an element with id: #child>div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1 > #child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, surrounded by whitespace: #child-div1 > #child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, whitespace after: #child-div1> #child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, whitespace after: #child-div1> #child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, whitespace before: #child-div1 >#child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, whitespace before: #child-div1 >#child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Child combinator, no whitespace: #child-div1>#child-div2 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2 + #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2 + #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+ #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+ #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2 +#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2 +#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em , #group strong | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em , #group strong | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em, #group strong | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Syntax, group of selectors separator, whitespace after: #group em, #group strong | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em ,#group strong | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Syntax, group of selectors separator, whitespace before: #group em ,#group strong | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Type selector, matching html element: html | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Type selector, matching html element: html | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Type selector, matching body element: body | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Type selector, matching body element: body | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>* | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Universal selector, matching all children of element with specified ID: #universal>* | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>* | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>* | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>* | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>* | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal * | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Universal selector, matching all descendants of element with specified ID: #universal * | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited | Pass | Pass | Fail | Pass | Pass |
In-document Element.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Class selector, matching element with specified class: .class-p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Class selector, matching element with specified class: .class-p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Class selector, matching element with class with escaped character: .foo\:bar | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID selector, matching element with specified id: #id #id-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID selector, matching element with specified id: #id #id-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID selector, not matching non-existent descendant: #id #none | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID selector, not matching non-existent descendant: #id #none | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div | Fail | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div | Fail | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* | Fail | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* | Fail | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Descendant combinator, whitespace characters: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Descendant combinator, whitespace characters: #descendant #descendant-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, matching element that is a child of an element with id: #child>div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1 > #child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, surrounded by whitespace: #child-div1 > #child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, whitespace after: #child-div1> #child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, whitespace after: #child-div1> #child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, whitespace before: #child-div1 >#child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, whitespace before: #child-div1 >#child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Child combinator, no whitespace: #child-div1>#child-div2 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2 + #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2 + #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+ #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+ #adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2 +#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2 +#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em , #group strong | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em , #group strong | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em, #group strong | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Syntax, group of selectors separator, whitespace after: #group em, #group strong | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em ,#group strong | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Syntax, group of selectors separator, whitespace before: #group em ,#group strong | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong | Pass | Pass | Pass | Pass | Pass |