Test results:

Passed: 1245

Have no matches: 185

Coverter errors: 8

Info:

All tests are run in Puppeteer.

Tests Passed mean that the elements selected by CSS selector are reference equal (not just only by count) to the elements selected by the generated XPath.

CssSelector.json

Results:

Passed: 51

Have no matches: 13

Coverter errors: 3

Passed: 51

* 89 === 89 //*

body 1 === 1 //body

p > * 3 === 3 //p/*

#myDiv 1 === 1 //*[@id='myDiv']

*:empty 21 === 21 //*[not(*) and not(text())]

div p a 1 === 1 //div//p//a

div > p 9 === 9 //div/p

div[id] 2 === 2 //div[@id]

#myDiv * 5 === 5 //*[@id='myDiv']//*

#myDiv>* 2 === 2 //*[@id='myDiv']/*

.checkit 2 === 2 //*[contains(concat(' ', normalize-space(@class), ' '), ' checkit ')]

p.ohyeah 1 === 1 //p[contains(concat(' ', normalize-space(@class), ' '), ' ohyeah ')]

a + span 1 === 1 //a/following-sibling::*[1]/self::span

#-a-b-c- 1 === 1 //*[@id='-a-b-c-']

div#myDiv 1 === 1 //div[@id='myDiv']

div:has(p) 9 === 9 //div[count(.//p) > 0]

p:has(+ p) 2 === 2 //p[count(following-sibling::*[1]/self::p) > 0]

div ~ form 1 === 1 //div/following-sibling::form

p.hiclass,a 4 === 4 //p[contains(concat(' ', normalize-space(@class), ' '), ' hiclass ')] | //a

.omg.ohyeah 1 === 1 //*[contains(concat(' ', normalize-space(@class), ' '), ' omg ') and contains(concat(' ', normalize-space(@class), ' '), ' ohyeah ')]

div .ohyeah 1 === 1 //div//*[contains(concat(' ', normalize-space(@class), ' '), ' ohyeah ')]

div > * > * 9 === 9 //div/*/*

div:has(> p) 7 === 7 //div[count(child::p) > 0]

*:last-child 37 === 37 //*[not(following-sibling::*)]

p:last-child 7 === 7 //p[not(following-sibling::*)]

*:only-child 25 === 25 //*[not(preceding-sibling::*) and not(following-sibling::*)]

p:only-child 4 === 4 //p[not(preceding-sibling::*) and not(following-sibling::*)]

*[class$=it] 2 === 2 //*[substring(@class, string-length(@class) - (string-length('it') - 1)) = 'it']

*:first-child 37 === 37 //*[not(preceding-sibling::*)]

p:first-child 6 === 6 //p[not(preceding-sibling::*)]

:nth-child(2) 12 === 12 //*[position() = 2]/self::*

div:has(p + p) 3 === 3 //div[count(.//p/following-sibling::*[1]/self::p) > 0]

*:nth-child(2) 12 === 12 //*[position() = 2]/self::*

p:nth-child(2) 4 === 4 //*[position() = 2]/self::p

div > p.ohyeah 1 === 1 //div/p[contains(concat(' ', normalize-space(@class), ' '), ' ohyeah ')]

*[class*=heck] 2 === 2 //*[contains(@class, 'heck')]

*[class^=check] 2 === 2 //*[starts-with(@class, 'check')]

*:nth-child(-n+3) 54 === 54 //*[position() <= 3]/self::*

a + span, div > p 10 === 10 //a/following-sibling::*[1]/self::span | //div/p

:nth-last-child(2) 12 === 12 //*[count(following-sibling::*) = 1]

input[type='text'] 1 === 1 //input[translate(@type, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('text', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

input[type='TEXT'] 1 === 1 //input[translate(@type, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('TEXT', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

span:nth-child(even) 5 === 5 //*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::span

span:is(.this, .that) 3 === 3 //span[(contains(concat(' ', normalize-space(@class), ' '), ' this ') or contains(concat(' ', normalize-space(@class), ' '), ' that '))]

:is(div, section) > h1 4 === 4 //*[(self::div or self::section)]/h1

span:nth-child(10n-1) 1 === 1 //*[(count(preceding-sibling::*) + 2) mod 10 = 0]/self::span

span:nth-child(10n+1) 3 === 3 //*[(count(preceding-sibling::*)) mod 10 = 0]/self::span

span:nth-last-child(2) 1 === 1 //span[count(following-sibling::*) = 1]

#myDiv :nth-last-child(2) 2 === 2 //*[@id='myDiv']//*[count(following-sibling::*) = 1]

section:not(:has(h1, h2, h3, h4, h5, h6)) 1 === 1 //section[not(count(.//h1 | .//h2 | .//h3 | .//h4 | .//h5 | .//h6) > 0)]

section:has(:not(h1, h2, h3, h4, h5, h6)) 2 === 2 //section[count(.//*[not(self::h1 | self::h2 | self::h3 | self::h4 | self::h5 | self::h6)]) > 0]

Have no matches: 13

head p - 0 - //head//p

#theBody #myDiv - 0 - //*[@id='theBody']//*[@id='myDiv']

#theBody>#myDiv - 0 - //*[@id='theBody']/*[@id='myDiv']

#someOtherDiv>* - 0 - //*[@id='someOtherDiv']/*

input[id='text'] - 0 - //input[@id='text']

input[id='TEXT'] - 0 - //input[@id='TEXT']

span:nth-last-child(3) - 0 - //span[count(following-sibling::*) = 2]

#theBody #whatwhatwhat - 0 - //*[@id='theBody']//*[@id='whatwhatwhat']

#theBody>#someOtherDiv - 0 - //*[@id='theBody']/*[@id='someOtherDiv']

span.this:nth-child(-n+3) - 0 - //*[contains(concat(' ', normalize-space(@class), ' '), ' this ') and position() <= 3]/self::span

#whatwhatwhat #someOtherDiv - 0 - //*[@id='whatwhatwhat']//*[@id='someOtherDiv']

dd:nth-child(1)>div:nth-child(3)>div:nth-child(1)>a - 0 - //*[position() = 1]/self::dd/*[position() = 3]/self::div/*[position() = 1]/self::div/a

*[style*='display: none' i],*[style*='display:none' i] - 0 - //*[contains(translate(@style, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('display: none', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))] | //*[contains(translate(@style, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('display:none', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

Coverter errors: 3

:scope > p converter error: Pseudo-class ':scope' is not implemented

span:nth-child(10n+-1) converter error: function parseFnNotation() - RegExp '/^([+-])?([0-9]+)?n(?:([+-])([0-9]+))?$/' failed to match the string 'span:nth-child(10n+-1)'

*:nth-child(-n+3 of span.this) converter error: function parseFnNotation() - RegExp '/^([+-])?([0-9]+)?n(?:([+-])([0-9]+))?$/' failed to match the string '*:nth-child(-n+3 of span.this)'

CssSelector2_test.html

Results:

Passed: 19

Have no matches: 16

Passed: 19

div 51 === 51 //div

div p 140 === 140 //div//p

div > p 134 === 134 //div/p

div + p 22 === 22 //div/following-sibling::*[1]/self::p

div ~ p 183 === 183 //div/following-sibling::p

div p a 12 === 12 //div//p//a

div, p, a 671 === 671 //div | //p | //a

div[class] 51 === 51 //div[@class]

p:only-child 3 === 3 //p[not(preceding-sibling::*) and not(following-sibling::*)]

p:last-child 19 === 19 //p[not(following-sibling::*)]

div[class*=e] 44 === 44 //div[contains(@class, 'e')]

p:first-child 54 === 54 //p[not(preceding-sibling::*)]

p:nth-child(n) 324 === 324 //p

p:nth-child(2n) 158 === 158 //*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::p

p:nth-child(odd) 166 === 166 //*[(count(preceding-sibling::*) + 1) mod 2 = 1]/self::p

div:not(.example) 51 === 51 //div[not(contains(concat(' ', normalize-space(@class), ' '), ' example '))]

p:nth-child(even) 158 === 158 //*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::p

p:nth-child(2n+1) 166 === 166 //*[(count(preceding-sibling::*)) mod 2 = 0]/self::p

a[href][lang][class] 1 === 1 //a[@href and @lang and @class]

Have no matches: 16

.note - 0 - //*[contains(concat(' ', normalize-space(@class), ' '), ' note ')]

#title - 0 - //*[@id='title']

h1#title - 0 - //h1[@id='title']

div #title - 0 - //div//*[@id='title']

div.example - 0 - //div[contains(concat(' ', normalize-space(@class), ' '), ' example ')]

ul .tocline2 - 0 - //ul//*[contains(concat(' ', normalize-space(@class), ' '), ' tocline2 ')]

div[class^=exa] - 0 - //div[starts-with(@class, 'exa')]

div[class$=mple] - 0 - //div[substring(@class, string-length(@class) - (string-length('mple') - 1)) = 'mple']

ul.toc li.tocline2 - 0 - //ul[contains(concat(' ', normalize-space(@class), ' '), ' toc ')]//li[contains(concat(' ', normalize-space(@class), ' '), ' tocline2 ')]

h1#title + div > p - 0 - //h1[@id='title']/following-sibling::*[1]/self::div/p

div[class=example] - 0 - //div[@class='example']

div[class|=dialog] - 0 - //div[(@class = 'dialog' or starts-with(@class, 'dialog-'))]

div[class~=example] - 0 - //div[contains(concat(' ', normalize-space(@class), ' '), ' example ')]

ul.toc > li.tocline2 - 0 - //ul[contains(concat(' ', normalize-space(@class), ' '), ' toc ')]/li[contains(concat(' ', normalize-space(@class), ' '), ' tocline2 ')]

div.example, div.note - 0 - //div[contains(concat(' ', normalize-space(@class), ' '), ' example ')] | //div[contains(concat(' ', normalize-space(@class), ' '), ' note ')]

div[class^=exa][class$=mple] - 0 - //div[starts-with(@class, 'exa') and substring(@class, string-length(@class) - (string-length('mple') - 1)) = 'mple']

CssToXPath.json

Results:

Passed: 98

Have no matches: 9

Passed: 98

* 133 === 133 //*

ul 6 === 6 //ul

:root 1 === 1 //ancestor-or-self::*[last()]

div, p 43 === 43 //div | //p

p:has(b) 2 === 2 //p[count(.//b) > 0]

div:empty 1 === 1 //div[not(*) and not(text())]

div.content 1 === 1 //div[contains(concat(' ', normalize-space(@class), ' '), ' content ')]

p[class=p2] 3 === 3 //p[@class='p2']

p[class^=p2] 6 === 6 //p[starts-with(@class, 'p2')]

p[class$=p2] 4 === 4 //p[substring(@class, string-length(@class) - (string-length('p2') - 1)) = 'p2']

p[class~=p2] 4 === 4 //p[contains(concat(' ', normalize-space(@class), ' '), ' p2 ')]

p[class*=p2] 8 === 8 //p[contains(@class, 'p2')]

p[class|=p2] 4 === 4 //p[(@class = 'p2' or starts-with(@class, 'p2-'))]

body[lang|=EN] 1 === 1 //body[(@lang = 'EN' or starts-with(@lang, 'EN-'))]

p:not(.c1) 21 === 21 //p[not(contains(concat(' ', normalize-space(@class), ' '), ' c1 '))]

ul:first-child>li:not(.c1,.c2,.c6,.c7) 4 === 4 //ul[not(preceding-sibling::*)]/li[not(self::node()[contains(concat(' ', normalize-space(@class), ' '), ' c1 ')] | self::node()[contains(concat(' ', normalize-space(@class), ' '), ' c2 ')] | self::node()[contains(concat(' ', normalize-space(@class), ' '), ' c6 ')] | self::node()[contains(concat(' ', normalize-space(@class), ' '), ' c7 ')])]

div:last-child 6 === 6 //div[not(following-sibling::*)]

p:nth-child(3) 4 === 4 //*[position() = 3]/self::p

div:first-child 5 === 5 //div[not(preceding-sibling::*)]

body[lang|=En i] 1 === 1 //body[(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('En', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') or starts-with(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), concat(translate('En', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), '-')))]

div>*:only-child 3 === 3 //div/*[not(preceding-sibling::*) and not(following-sibling::*)]

p:nth-child(odd) 12 === 12 //*[(count(preceding-sibling::*) + 1) mod 2 = 1]/self::p

p:nth-of-type(3) 3 === 3 //p[count(preceding-sibling::p) = 2]

p:nth-child(even) 10 === 10 //*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::p

div[class|='has'] 1 === 1 //div[(@class = 'has' or starts-with(@class, 'has-'))]

div[class*='s-t'] 1 === 1 //div[contains(@class, 's-t')]

ul li:nth-child(3) 5 === 5 //ul//*[position() = 3]/self::li

p:nth-of-type(odd) 14 === 14 //p[(count(preceding-sibling::p) + 1) mod 2 = 1]

div[class^='has-'] 1 === 1 //div[starts-with(@class, 'has-')]

div[class='diV' i] 2 === 2 //div[translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('diV', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

div[class*='iv' i] 10 === 10 //div[contains(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('iv', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

ul>li[title$='One'] 5 === 5 //ul/li[substring(@title, string-length(@title) - (string-length('One') - 1)) = 'One']

div[id]:has(h1, h2) 2 === 2 //div[@id and count(.//h1 | .//h2) > 0]

p:nth-last-child(3) 5 === 5 //p[count(following-sibling::*) = 2]

p:nth-of-type(even) 8 === 8 //p[(count(preceding-sibling::p) + 1) mod 2 = 0]

ul>li[title^='Item'] 10 === 10 //ul/li[starts-with(@title, 'Item')]

ul>li[title*='Item'] 10 === 10 //ul/li[contains(@title, 'Item')]

main > div[id=lists] 1 === 1 //main/div[@id='lists']

a:is([name], [href]) 2 === 2 //a[(@name or @href)]

ul li:nth-child(odd) 22 === 22 //ul//*[(count(preceding-sibling::*) + 1) mod 2 = 1]/self::li

ul li:nth-child(n+3) 27 === 27 //ul//*[position() >= 3]/self::li

ul li:nth-child(n+4) 22 === 22 //ul//*[position() >= 4]/self::li

ul li:nth-of-type(3) 5 === 5 //ul//li[count(preceding-sibling::li) = 2]

div[class|='last' i] 2 === 2 //div[(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('last', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') or starts-with(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), concat(translate('last', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), '-')))]

ul>li[title$='one' i] 5 === 5 //ul/li[substring(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), string-length(@title) - (string-length('one') - 1)) = translate('one', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

ul>li[title~='two' i] 5 === 5 //ul/li[contains(concat(' ', normalize-space(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')), ' '), concat(' ', translate('two', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), ' '))]

ul li:nth-child(even) 19 === 19 //ul//*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::li

ul li:nth-child(3n+2) 13 === 13 //ul//*[position() >= 2 and (count(preceding-sibling::*) - 1) mod 3 = 0]/self::li

ul li:nth-child(-n+4) 24 === 24 //ul//*[position() <= 4]/self::li

ul li:nth-child(5n-2) 7 === 7 //ul//*[(count(preceding-sibling::*) + 3) mod 5 = 0]/self::li

p:nth-last-child(odd) 13 === 13 //p[(count(following-sibling::*) + 1) mod 2 = 1]

p:nth-last-of-type(3) 3 === 3 //p[count(following-sibling::p) = 2]

div [class^='emph' i] 2 === 2 //div//*[starts-with(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('emph', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

div [class$='size' i] 2 === 2 //div//*[substring(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), string-length(@class) - (string-length('size') - 1)) = translate('size', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

ul>li[title^='item' i] 10 === 10 //ul/li[starts-with(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('item', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

ul li:nth-child(-3n+4) 12 === 12 //ul//*[position() <= 4 and (count(preceding-sibling::*) - 3) mod 3 = 0]/self::li

p:nth-last-child(even) 9 === 9 //p[(count(following-sibling::*) + 1) mod 2 = 0]

ul li:nth-of-type(odd) 22 === 22 //ul//li[(count(preceding-sibling::li) + 1) mod 2 = 1]

ul li:nth-of-type(n+3) 27 === 27 //ul//li[count(preceding-sibling::li) >= 2]

ul li:nth-of-type(n+4) 22 === 22 //ul//li[count(preceding-sibling::li) >= 3]

div[class~='has-text'] 1 === 1 //div[contains(concat(' ', normalize-space(@class), ' '), ' has-text ')]

article p:only-of-type 4 === 4 //article//p[count(preceding-sibling::p) = 0 and count(following-sibling::p) = 0]

div[class~='parent' i] 1 === 1 //div[contains(concat(' ', normalize-space(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')), ' '), concat(' ', translate('parent', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), ' '))]

ul li:nth-last-child(3) 5 === 5 //ul//li[count(following-sibling::*) = 2]

ul li:nth-of-type(even) 19 === 19 //ul//li[(count(preceding-sibling::li) + 1) mod 2 = 0]

ul li:nth-of-type(3n+2) 13 === 13 //ul//li[count(preceding-sibling::li) >= 1 and (count(preceding-sibling::li) - 1) mod 3 = 0]

ul li:nth-of-type(3n-2) 17 === 17 //ul//li[(count(preceding-sibling::li) + 3) mod 3 = 0]

ul li:nth-of-type(-n+4) 24 === 24 //ul//li[count(preceding-sibling::li) <= 3]

p:nth-last-of-type(odd) 14 === 14 //p[(count(following-sibling::p) + 1) mod 2 = 1]

article p:first-of-type 5 === 5 //article//p[not(preceding-sibling::p)]

article em:last-of-type 3 === 3 //article//em[not(following-sibling::em)]

:is(ol,ul) :is(ol,ul) ol 1 === 1 //*[(self::ol or self::ul)]//*[(self::ol or self::ul)]//ol

ul li:nth-of-type(-3n+4) 12 === 12 //ul//li[count(preceding-sibling::li) <= 3 and (count(preceding-sibling::li) - 3) mod 3 = 0]

p:nth-last-of-type(even) 8 === 8 //p[(count(following-sibling::p) + 1) mod 2 = 0]

article div:only-of-type 2 === 2 //article//div[count(preceding-sibling::div) = 0 and count(following-sibling::div) = 0]

ul>li[title='item one' i] 4 === 4 //ul/li[translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('item one', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

ul li:nth-last-child(odd) 22 === 22 //ul//li[(count(following-sibling::*) + 1) mod 2 = 1]

ul li:nth-last-child(n+3) 27 === 27 //ul//li[count(following-sibling::*) >= 2]

ul li:nth-last-child(n+4) 22 === 22 //ul//li[count(following-sibling::*) >= 3]

ul li:nth-last-of-type(3) 5 === 5 //ul//li[count(following-sibling::li) = 2]

ul li:nth-last-child(even) 19 === 19 //ul//li[(count(following-sibling::*) + 1) mod 2 = 0]

ul li:nth-last-child(3n+2) 13 === 13 //ul//li[count(following-sibling::*) >= 1 and (count(following-sibling::*) - 1) mod 3 = 0]

ul li:nth-last-child(-n+4) 24 === 24 //ul//li[count(following-sibling::*) <= 3]

ul li:nth-last-child(5n-2) 7 === 7 //ul//li[(count(following-sibling::*) + 3) mod 5 = 0]

ul li:nth-last-child(-3n+4) 12 === 12 //ul//li[count(following-sibling::*) < 4 and (count(following-sibling::*) - 3) mod 3 = 0]

ul li:nth-last-of-type(n+3) 27 === 27 //ul//li[count(following-sibling::li) >= 2]

ul li:nth-last-of-type(n+4) 22 === 22 //ul//li[count(following-sibling::li) >= 3]

article>div>em:last-of-type 2 === 2 //article/div/em[not(following-sibling::em)]

ul>li[title*='em Twenty On'] 1 === 1 //ul/li[contains(@title, 'em Twenty On')]

ul li:nth-last-of-type(3n+2) 13 === 13 //ul//li[count(following-sibling::li) >= 1 and (count(following-sibling::li) - 1) mod 3 = 0]

ul li:nth-last-of-type(3n-2) 17 === 17 //ul//li[(count(following-sibling::li) + 3) mod 3 = 0]

ul li:nth-last-of-type(-n+4) 24 === 24 //ul//li[count(following-sibling::li) <= 3]

ul li:nth-last-of-type(-3n+4) 12 === 12 //ul//li[count(following-sibling::li) < 4 and (count(following-sibling::li) - 3) mod 3 = 0]

ul>li[title*='em twenty on' i] 1 === 1 //ul/li[contains(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('em twenty on', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

article div[class]:last-of-type 5 === 5 //article//div[@class and not(following-sibling::div)]

div:has(p, ul), div[id='header'] 8 === 8 //div[count(.//p | .//ul) > 0] | //div[@id='header']

div:not(:has(#lists)):not(:has(ul)) 19 === 19 //div[not(self::node()[count(.//*[@id='lists']) > 0]) and not(count(.//ul) > 0)]

ul > li[ title = 'item one' i ] 4 === 4 //ul/li[translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('item one', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

Have no matches: 9

p[class='xyzψω' i] - 0 - //p[translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('xyzψω', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

p[title^='ΑβγδΕ' i] - 0 - //p[starts-with(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('ΑβγδΕ', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

p[title^='áβγδε' i] - 0 - //p[starts-with(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('áβγδε', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

div[class$='-text'] - 0 - //div[substring(@class, string-length(@class) - (string-length('-text') - 1)) = '-text']

p[title$='στυφχψΩ' i] - 0 - //p[substring(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), string-length(@title) - (string-length('στυφχψΩ') - 1)) = translate('στυφχψΩ', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

div[class='content'] b - 0 - //div[@class='content']//b

div[class='content' i] b - 0 - //div[translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('content', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]//b

div[class='CONTENT' i] b - 0 - //div[translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('CONTENT', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]//b

p[title='ΑβγδεζηθικλμνξοπρστυφχψΩ' i] - 0 - //p[translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('ΑβγδεζηθικλμνξοπρστυφχψΩ', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

CssToXPath_test.html

Results:

Passed: 58

Have no matches: 49

Passed: 58

* 1781 === 1781 //*

ul 22 === 22 //ul

:root 1 === 1 //ancestor-or-self::*[last()]

div, p 375 === 375 //div | //p

p:has(b) 2 === 2 //p[count(.//b) > 0]

p:not(.c1) 324 === 324 //p[not(contains(concat(' ', normalize-space(@class), ' '), ' c1 '))]

div:last-child 1 === 1 //div[not(following-sibling::*)]

p:nth-child(3) 8 === 8 //*[position() = 3]/self::p

div:first-child 1 === 1 //div[not(preceding-sibling::*)]

div>*:only-child 3 === 3 //div/*[not(preceding-sibling::*) and not(following-sibling::*)]

p:nth-child(odd) 166 === 166 //*[(count(preceding-sibling::*) + 1) mod 2 = 1]/self::p

p:nth-of-type(3) 24 === 24 //p[count(preceding-sibling::p) = 2]

p:nth-child(even) 158 === 158 //*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::p

ul li:nth-child(3) 14 === 14 //ul//*[position() = 3]/self::li

p:nth-of-type(odd) 176 === 176 //p[(count(preceding-sibling::p) + 1) mod 2 = 1]

p:nth-last-child(3) 22 === 22 //p[count(following-sibling::*) = 2]

p:nth-of-type(even) 148 === 148 //p[(count(preceding-sibling::p) + 1) mod 2 = 0]

a:is([name], [href]) 296 === 296 //a[(@name or @href)]

ul li:nth-child(odd) 52 === 52 //ul//*[(count(preceding-sibling::*) + 1) mod 2 = 1]/self::li

ul li:nth-child(n+3) 53 === 53 //ul//*[position() >= 3]/self::li

ul li:nth-child(n+4) 39 === 39 //ul//*[position() >= 4]/self::li

ul li:nth-of-type(3) 14 === 14 //ul//li[count(preceding-sibling::li) = 2]

ul li:nth-child(even) 42 === 42 //ul//*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::li

ul li:nth-child(3n+2) 31 === 31 //ul//*[position() >= 2 and (count(preceding-sibling::*) - 1) mod 3 = 0]/self::li

ul li:nth-child(-n+4) 64 === 64 //ul//*[position() <= 4]/self::li

ul li:nth-child(5n-2) 18 === 18 //ul//*[(count(preceding-sibling::*) + 3) mod 5 = 0]/self::li

p:nth-last-child(odd) 151 === 151 //p[(count(following-sibling::*) + 1) mod 2 = 1]

p:nth-last-of-type(3) 24 === 24 //p[count(following-sibling::p) = 2]

ul li:nth-child(-3n+4) 31 === 31 //ul//*[position() <= 4 and (count(preceding-sibling::*) - 3) mod 3 = 0]/self::li

p:nth-last-child(even) 173 === 173 //p[(count(following-sibling::*) + 1) mod 2 = 0]

ul li:nth-of-type(odd) 52 === 52 //ul//li[(count(preceding-sibling::li) + 1) mod 2 = 1]

ul li:nth-of-type(n+3) 53 === 53 //ul//li[count(preceding-sibling::li) >= 2]

ul li:nth-of-type(n+4) 39 === 39 //ul//li[count(preceding-sibling::li) >= 3]

ul li:nth-last-child(3) 14 === 14 //ul//li[count(following-sibling::*) = 2]

ul li:nth-of-type(even) 42 === 42 //ul//li[(count(preceding-sibling::li) + 1) mod 2 = 0]

ul li:nth-of-type(3n+2) 31 === 31 //ul//li[count(preceding-sibling::li) >= 1 and (count(preceding-sibling::li) - 1) mod 3 = 0]

ul li:nth-of-type(3n-2) 38 === 38 //ul//li[(count(preceding-sibling::li) + 3) mod 3 = 0]

ul li:nth-of-type(-n+4) 64 === 64 //ul//li[count(preceding-sibling::li) <= 3]

p:nth-last-of-type(odd) 176 === 176 //p[(count(following-sibling::p) + 1) mod 2 = 1]

ul li:nth-of-type(-3n+4) 31 === 31 //ul//li[count(preceding-sibling::li) <= 3 and (count(preceding-sibling::li) - 3) mod 3 = 0]

p:nth-last-of-type(even) 148 === 148 //p[(count(following-sibling::p) + 1) mod 2 = 0]

ul li:nth-last-child(odd) 52 === 52 //ul//li[(count(following-sibling::*) + 1) mod 2 = 1]

ul li:nth-last-child(n+3) 53 === 53 //ul//li[count(following-sibling::*) >= 2]

ul li:nth-last-child(n+4) 39 === 39 //ul//li[count(following-sibling::*) >= 3]

ul li:nth-last-of-type(3) 14 === 14 //ul//li[count(following-sibling::li) = 2]

ul li:nth-last-child(even) 42 === 42 //ul//li[(count(following-sibling::*) + 1) mod 2 = 0]

ul li:nth-last-child(3n+2) 31 === 31 //ul//li[count(following-sibling::*) >= 1 and (count(following-sibling::*) - 1) mod 3 = 0]

ul li:nth-last-child(-n+4) 64 === 64 //ul//li[count(following-sibling::*) <= 3]

ul li:nth-last-child(5n-2) 18 === 18 //ul//li[(count(following-sibling::*) + 3) mod 5 = 0]

ul li:nth-last-child(-3n+4) 31 === 31 //ul//li[count(following-sibling::*) < 4 and (count(following-sibling::*) - 3) mod 3 = 0]

ul li:nth-last-of-type(n+3) 53 === 53 //ul//li[count(following-sibling::li) >= 2]

ul li:nth-last-of-type(n+4) 39 === 39 //ul//li[count(following-sibling::li) >= 3]

ul li:nth-last-of-type(3n+2) 31 === 31 //ul//li[count(following-sibling::li) >= 1 and (count(following-sibling::li) - 1) mod 3 = 0]

ul li:nth-last-of-type(3n-2) 38 === 38 //ul//li[(count(following-sibling::li) + 3) mod 3 = 0]

ul li:nth-last-of-type(-n+4) 64 === 64 //ul//li[count(following-sibling::li) <= 3]

ul li:nth-last-of-type(-3n+4) 31 === 31 //ul//li[count(following-sibling::li) < 4 and (count(following-sibling::li) - 3) mod 3 = 0]

div:has(p, ul), div[id='header'] 51 === 51 //div[count(.//p | .//ul) > 0] | //div[@id='header']

div:not(:has(#lists)):not(:has(ul)) 49 === 49 //div[not(self::node()[count(.//*[@id='lists']) > 0]) and not(count(.//ul) > 0)]

Have no matches: 49

div:empty - 0 - //div[not(*) and not(text())]

div.content - 0 - //div[contains(concat(' ', normalize-space(@class), ' '), ' content ')]

p[class=p2] - 0 - //p[@class='p2']

p[class^=p2] - 0 - //p[starts-with(@class, 'p2')]

p[class$=p2] - 0 - //p[substring(@class, string-length(@class) - (string-length('p2') - 1)) = 'p2']

p[class~=p2] - 0 - //p[contains(concat(' ', normalize-space(@class), ' '), ' p2 ')]

p[class*=p2] - 0 - //p[contains(@class, 'p2')]

p[class|=p2] - 0 - //p[(@class = 'p2' or starts-with(@class, 'p2-'))]

body[lang|=EN] - 0 - //body[(@lang = 'EN' or starts-with(@lang, 'EN-'))]

ul:first-child>li:not(.c1,.c2,.c6,.c7) - 0 - //ul[not(preceding-sibling::*)]/li[not(self::node()[contains(concat(' ', normalize-space(@class), ' '), ' c1 ')] | self::node()[contains(concat(' ', normalize-space(@class), ' '), ' c2 ')] | self::node()[contains(concat(' ', normalize-space(@class), ' '), ' c6 ')] | self::node()[contains(concat(' ', normalize-space(@class), ' '), ' c7 ')])]

body[lang|=En i] - 0 - //body[(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('En', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') or starts-with(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), concat(translate('En', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), '-')))]

div[class|='has'] - 0 - //div[(@class = 'has' or starts-with(@class, 'has-'))]

div[class*='s-t'] - 0 - //div[contains(@class, 's-t')]

p[class='xyzψω' i] - 0 - //p[translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('xyzψω', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

div[class^='has-'] - 0 - //div[starts-with(@class, 'has-')]

div[class='diV' i] - 0 - //div[translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('diV', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

div[class*='iv' i] - 0 - //div[contains(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('iv', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

ul>li[title$='One'] - 0 - //ul/li[substring(@title, string-length(@title) - (string-length('One') - 1)) = 'One']

p[title^='ΑβγδΕ' i] - 0 - //p[starts-with(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('ΑβγδΕ', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

p[title^='áβγδε' i] - 0 - //p[starts-with(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('áβγδε', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

div[id]:has(h1, h2) - 0 - //div[@id and count(.//h1 | .//h2) > 0]

div[class$='-text'] - 0 - //div[substring(@class, string-length(@class) - (string-length('-text') - 1)) = '-text']

ul>li[title^='Item'] - 0 - //ul/li[starts-with(@title, 'Item')]

ul>li[title*='Item'] - 0 - //ul/li[contains(@title, 'Item')]

main > div[id=lists] - 0 - //main/div[@id='lists']

div[class|='last' i] - 0 - //div[(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('last', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') or starts-with(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), concat(translate('last', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), '-')))]

ul>li[title$='one' i] - 0 - //ul/li[substring(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), string-length(@title) - (string-length('one') - 1)) = translate('one', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

ul>li[title~='two' i] - 0 - //ul/li[contains(concat(' ', normalize-space(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')), ' '), concat(' ', translate('two', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), ' '))]

p[title$='στυφχψΩ' i] - 0 - //p[substring(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), string-length(@title) - (string-length('στυφχψΩ') - 1)) = translate('στυφχψΩ', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

div [class^='emph' i] - 0 - //div//*[starts-with(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('emph', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

div [class$='size' i] - 0 - //div//*[substring(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), string-length(@class) - (string-length('size') - 1)) = translate('size', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

ul>li[title^='item' i] - 0 - //ul/li[starts-with(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('item', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

div[class='content'] b - 0 - //div[@class='content']//b

div[class~='has-text'] - 0 - //div[contains(concat(' ', normalize-space(@class), ' '), ' has-text ')]

article p:only-of-type - 0 - //article//p[count(preceding-sibling::p) = 0 and count(following-sibling::p) = 0]

div[class~='parent' i] - 0 - //div[contains(concat(' ', normalize-space(translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')), ' '), concat(' ', translate('parent', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), ' '))]

article p:first-of-type - 0 - //article//p[not(preceding-sibling::p)]

article em:last-of-type - 0 - //article//em[not(following-sibling::em)]

:is(ol,ul) :is(ol,ul) ol - 0 - //*[(self::ol or self::ul)]//*[(self::ol or self::ul)]//ol

div[class='content' i] b - 0 - //div[translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('content', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]//b

div[class='CONTENT' i] b - 0 - //div[translate(@class, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('CONTENT', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]//b

article div:only-of-type - 0 - //article//div[count(preceding-sibling::div) = 0 and count(following-sibling::div) = 0]

ul>li[title='item one' i] - 0 - //ul/li[translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('item one', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

article>div>em:last-of-type - 0 - //article/div/em[not(following-sibling::em)]

ul>li[title*='em Twenty On'] - 0 - //ul/li[contains(@title, 'em Twenty On')]

ul>li[title*='em twenty on' i] - 0 - //ul/li[contains(translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), translate('em twenty on', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'))]

article div[class]:last-of-type - 0 - //article//div[@class and not(following-sibling::div)]

p[title='ΑβγδεζηθικλμνξοπρστυφχψΩ' i] - 0 - //p[translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('ΑβγδεζηθικλμνξοπρστυφχψΩ', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

ul > li[ title = 'item one' i ] - 0 - //ul/li[translate(@title, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('item one', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]

CssW3CSelector.json

Results:

Passed: 91

Have no matches: 26

Coverter errors: 5

Passed: 91

.t1 24 === 24 //*[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]

li,p 222 === 222 //li | //p

*.t1 24 === 24 //*[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]

#foo 2 === 2 //*[@id='foo']

li.t2 2 === 2 //li[contains(concat(' ', normalize-space(@class), ' '), ' t2 ')]

li#t2 1 === 1 //li[@id='t2']

*:root 1 === 1 //ancestor-or-self::*[last()]

address 43 === 43 //address

p.t1.t2 4 === 4 //p[contains(concat(' ', normalize-space(@class), ' '), ' t1 ') and contains(concat(' ', normalize-space(@class), ' '), ' t2 ')]

p:empty 3 === 3 //p[not(*) and not(text())]

p[title] 24 === 24 //p[@title]

div.t1 p 8 === 8 //div[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]//p

[hidden] 10 === 10 //*[@hidden]

#pass#pass 1 === 1 //*[@id='pass' and @id='pass']

div p.test 4 === 4 //div//p[contains(concat(' ', normalize-space(@class), ' '), ' test ')]

div.test * 14 === 14 //div[contains(concat(' ', normalize-space(@class), ' '), ' test ')]//*

div.stub * 120 === 120 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//*

div.stub v 1 === 1 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//v

p[class~=b] 1 === 1 //p[contains(concat(' ', normalize-space(@class), ' '), ' b ')]

p[lang|=en] 3 === 3 //p[(@lang = 'en' or starts-with(@lang, 'en-'))]

table.t1 td 126 === 126 //table[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]//td

.t1:not(.t2) 20 === 20 //*[contains(concat(' ', normalize-space(@class), ' '), ' t1 ') and not(contains(concat(' ', normalize-space(@class), ' '), ' t2 '))]

:not(.t2).t1 20 === 20 //*[not(contains(concat(' ', normalize-space(@class), ' '), ' t2 ')) and contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]

.t2:not(.t1) 6 === 6 //*[contains(concat(' ', normalize-space(@class), ' '), ' t2 ') and not(contains(concat(' ', normalize-space(@class), ' '), ' t1 '))]

:not(.t1).t2 6 === 6 //*[not(contains(concat(' ', normalize-space(@class), ' '), ' t1 ')) and contains(concat(' ', normalize-space(@class), ' '), ' t2 ')]

div:not(.t1) 94 === 94 //div[not(contains(concat(' ', normalize-space(@class), ' '), ' t1 '))]

#test1:empty 1 === 1 //*[@id='test1' and not(*) and not(text())]

#test2:empty 1 === 1 //*[@id='test2' and not(*) and not(text())]

p:only-child 17 === 17 //p[not(preceding-sibling::*) and not(following-sibling::*)]

div.stub p+p 24 === 24 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//p/following-sibling::*[1]/self::p

div.stub p~p 29 === 29 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//p/following-sibling::p

div.stub > * 114 === 114 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]/*

p[title^=foo] 4 === 4 //p[starts-with(@title, 'foo')]

p[title$=bar] 2 === 2 //p[substring(@title, string-length(@title) - (string-length('bar') - 1)) = 'bar']

p[title*=bar] 3 === 3 //p[contains(@title, 'bar')]

address.t5.t5 1 === 1 //address[contains(concat(' ', normalize-space(@class), ' '), ' t5 ') and contains(concat(' ', normalize-space(@class), ' '), ' t5 ')]

address:empty 3 === 3 //address[not(*) and not(text())]

p *:last-child 14 === 14 //p//*[not(following-sibling::*)]

p:not(:target) 164 === 164 //p[not(starts-with(@href, '#'))]

p *:first-child 14 === 14 //p//*[not(preceding-sibling::*)]

address[lang=fi] 1 === 1 //address[@lang='fi']

#two:first-child 1 === 1 //*[@id='two' and not(preceding-sibling::*)]

blockquote+div~p 28 === 28 //blockquote/following-sibling::*[1]/self::div/following-sibling::p

blockquote~div+p 6 === 6 //blockquote/following-sibling::div/following-sibling::*[1]/self::p

#test:not(:empty) 1 === 1 //*[@id='test' and not(not(*) and not(text()))]

.t1 td:last-child 44 === 44 //*[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]//td[not(following-sibling::*)]

div.test *:not(a) 14 === 14 //div[contains(concat(' ', normalize-space(@class), ' '), ' test ')]//*[not(self::a)]

div.stub *:not(p) 73 === 73 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//*[not(self::p)]

address[title=foo] 1 === 1 //address[@title='foo']

.t1 td:first-child 44 === 44 //*[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]//td[not(preceding-sibling::*)]

p:not(:only-child) 147 === 147 //p[not(not(preceding-sibling::*) and not(following-sibling::*))]

blockquote > div p 1 === 1 //blockquote/div//p

blockquote + div p 1 === 1 //blockquote/following-sibling::*[1]/self::div//p

blockquote div > p 1 === 1 //blockquote//div/p

address[title~=foo] 2 === 2 //address[contains(concat(' ', normalize-space(@title), ' '), ' foo ')]

p:not(.t1):not(.t2) 159 === 159 //p[not(contains(concat(' ', normalize-space(@class), ' '), ' t1 ')) and not(contains(concat(' ', normalize-space(@class), ' '), ' t2 '))]

div.test *:not(div) 13 === 13 //div[contains(concat(' ', normalize-space(@class), ' '), ' test ')]//*[not(self::div)]

div.stub *:not(div) 120 === 120 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//*[not(self::div)]

div.stub *:not(foo) 120 === 120 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//*[not(self::foo)]

address:last-of-type 17 === 17 //address[not(following-sibling::address)]

div.stub *:not(.foo) 116 === 116 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//*[not(contains(concat(' ', normalize-space(@class), ' '), ' foo '))]

div.stub *:not(#foo) 119 === 119 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//*[not(@id='foo')]

line:nth-child(3n-1) 19 === 19 //*[(count(preceding-sibling::*) + 2) mod 3 = 0]/self::line

ul li:nth-child(2n+1) 19 === 19 //ul//*[(count(preceding-sibling::*)) mod 2 = 0]/self::li

ol li:nth-child(2n+0) 12 === 12 //ol//*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::li

address:first-of-type 17 === 17 //address[not(preceding-sibling::address)]

line:nth-of-type(odd) 30 === 30 //line[(count(preceding-sibling::line) + 1) mod 2 = 1]

p:not(:nth-of-type(3)) 151 === 151 //p[not(count(preceding-sibling::p) = 2)]

p > *:not(:last-child) 1 === 1 //p/*[not(not(following-sibling::*))]

table.t1 td,table.t2 td 222 === 222 //table[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]//td | //table[contains(concat(' ', normalize-space(@class), ' '), ' t2 ')]//td

p > *:not(:first-child) 1 === 1 //p/*[not(not(preceding-sibling::*))]

.t1 td:not(:last-child) 84 === 84 //*[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]//td[not(not(following-sibling::*))]

.t1 td:not(:first-child) 84 === 84 //*[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]//td[not(not(preceding-sibling::*))]

address:not(.t5):not(.t5) 42 === 42 //address[not(contains(concat(' ', normalize-space(@class), ' '), ' t5 ')) and not(contains(concat(' ', normalize-space(@class), ' '), ' t5 '))]

address:not(:last-of-type) 26 === 26 //address[not(not(following-sibling::address))]

div.test *:not(p):not(div) 5 === 5 //div[contains(concat(' ', normalize-space(@class), ' '), ' test ')]//*[not(self::p) and not(self::div)]

table.t2 td:nth-child(3n+1) 36 === 36 //table[contains(concat(' ', normalize-space(@class), ' '), ' t2 ')]//*[(count(preceding-sibling::*)) mod 3 = 0]/self::td

address:not(:first-of-type) 26 === 26 //address[not(not(preceding-sibling::address))]

p:not(:nth-last-of-type(3)) 151 === 151 //p[not(count(following-sibling::p) = 2)]

line:nth-last-of-type(3n-1) 19 === 19 //line[(count(following-sibling::line) + 2) mod 3 = 0]

table.t1 tr:nth-child(-1n+4) 34 === 34 //table[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]//*[position() <= 4]/self::tr

ul > li:not(:nth-child(odd)) 15 === 15 //ul/li[not((count(preceding-sibling::*) + 1) mod 2 = 1)]

ol > li:not(:nth-child(even)) 12 === 12 //ol/li[not((count(preceding-sibling::*) + 1) mod 2 = 0)]

div.stub *:not([title*=' on']) 105 === 105 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//*[not(contains(@title, ' on'))]

div.stub *:not([title$='tait']) 103 === 103 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//*[not(substring(@title, string-length(@title) - (string-length('tait') - 1)) = 'tait')]

.t1 *:not(address:only-of-type) 194 === 194 //*[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]//*[not(self::address[count(preceding-sibling::address) = 0 and count(following-sibling::address) = 0])]

div.stub *:not([title^='si on']) 106 === 106 //div[contains(concat(' ', normalize-space(@class), ' '), ' stub ')]//*[not(starts-with(@title, 'si on'))]

table.t2 td:not(:nth-child(3n+1)) 60 === 60 //table[contains(concat(' ', normalize-space(@class), ' '), ' t2 ')]//td[not((count(preceding-sibling::*)) mod 3 = 0)]

table.t1 tr:not(:nth-child(-1n+4)) 8 === 8 //table[contains(concat(' ', normalize-space(@class), ' '), ' t1 ')]//tr[not(count(preceding-sibling::*) <= 3)]

p:not(#other).class:not(.fail).test#id#id 1 === 1 //p[not(@id='other') and contains(concat(' ', normalize-space(@class), ' '), ' class ') and not(contains(concat(' ', normalize-space(@class), ' '), ' fail ')) and contains(concat(' ', normalize-space(@class), ' '), ' test ') and @id='id' and @id='id']

main p:only-of-type, main i[name]:only-of-type 1 === 1 //main//p[count(preceding-sibling::p) = 0 and count(following-sibling::p) = 0] | //main//i[@name and count(preceding-sibling::i) = 0 and count(following-sibling::i) = 0]

Have no matches: 26

.t1.fail - 0 - //*[contains(concat(' ', normalize-space(@class), ' '), ' t1 ') and contains(concat(' ', normalize-space(@class), ' '), ' fail ')]

p:target - 0 - //p[starts-with(@href, '#')]

div.te.st - 0 - //div[contains(concat(' ', normalize-space(@class), ' '), ' te ') and contains(concat(' ', normalize-space(@class), ' '), ' st ')]

.fail div - 0 - //*[contains(concat(' ', normalize-space(@class), ' '), ' fail ')]//div

#fail div - 0 - //*[@id='fail']//div

.fail+div - 0 - //*[contains(concat(' ', normalize-space(@class), ' '), ' fail ')]/following-sibling::*[1]/self::div

#test#fail - 0 - //*[@id='test' and @id='fail']

#fail#test - 0 - //*[@id='fail' and @id='test']

[type~=odd] - 0 - //*[contains(concat(' ', normalize-space(@type), ' '), ' odd ')]

span[title=a] - 0 - //span[@title='a']

[type~=match] - 0 - //*[contains(concat(' ', normalize-space(@type), ' '), ' match ')]

span[class~=b] - 0 - //span[contains(concat(' ', normalize-space(@class), ' '), ' b ')]

span[lang|=fr] - 0 - //span[(@lang = 'fr' or starts-with(@lang, 'fr-'))]

#three:last-child - 0 - //*[@id='three' and not(following-sibling::*)]

div.testText div p - 0 - //div[contains(concat(' ', normalize-space(@class), ' '), ' testText ')]//div//p

#stub~div div+div div - 0 - //*[@id='stub']/following-sibling::div//div/following-sibling::*[1]/self::div//div

div.testText > div > p - 0 - //div[contains(concat(' ', normalize-space(@class), ' '), ' testText ')]/div/p

#Aone#Atwo,#Aone#Athree,#Atwo#Athree - 0 - //*[@id='Aone' and @id='Atwo'] | //*[@id='Aone' and @id='Athree'] | //*[@id='Atwo' and @id='Athree']

#Bone#Btwo,#Bone#Bthree,#Btwo#Bthree - 0 - //*[@id='Bone' and @id='Btwo'] | //*[@id='Bone' and @id='Bthree'] | //*[@id='Btwo' and @id='Bthree']

#Cone#Ctwo,#Cone#Cthree,#Ctwo#Cthree - 0 - //*[@id='Cone' and @id='Ctwo'] | //*[@id='Cone' and @id='Cthree'] | //*[@id='Ctwo' and @id='Cthree']

#Done#Dtwo,#Done#Dthree,#Dtwo#Dthree - 0 - //*[@id='Done' and @id='Dtwo'] | //*[@id='Done' and @id='Dthree'] | //*[@id='Dtwo' and @id='Dthree']

div:not(#theid).class:not(.fail).test#theid#theid - 0 - //div[not(@id='theid') and contains(concat(' ', normalize-space(@class), ' '), ' class ') and not(contains(concat(' ', normalize-space(@class), ' '), ' fail ')) and contains(concat(' ', normalize-space(@class), ' '), ' test ') and @id='theid' and @id='theid']

div:not(#other).class:not(.test).test#theid#theid - 0 - //div[not(@id='other') and contains(concat(' ', normalize-space(@class), ' '), ' class ') and not(contains(concat(' ', normalize-space(@class), ' '), ' test ')) and contains(concat(' ', normalize-space(@class), ' '), ' test ') and @id='theid' and @id='theid']

div:not(#other).notclass:not(.fail).test#theid#theid - 0 - //div[not(@id='other') and contains(concat(' ', normalize-space(@class), ' '), ' notclass ') and not(contains(concat(' ', normalize-space(@class), ' '), ' fail ')) and contains(concat(' ', normalize-space(@class), ' '), ' test ') and @id='theid' and @id='theid']

div:not(#other).class:not(.fail).nottest#theid#theid - 0 - //div[not(@id='other') and contains(concat(' ', normalize-space(@class), ' '), ' class ') and not(contains(concat(' ', normalize-space(@class), ' '), ' fail ')) and contains(concat(' ', normalize-space(@class), ' '), ' nottest ') and @id='theid' and @id='theid']

div:not(#other).class:not(.fail).nottest#theid#other - 0 - //div[not(@id='other') and contains(concat(' ', normalize-space(@class), ' '), ' class ') and not(contains(concat(' ', normalize-space(@class), ' '), ' fail ')) and contains(concat(' ', normalize-space(@class), ' '), ' nottest ') and @id='theid' and @id='other']

Coverter errors: 5

p, converter error: State.Text. Unexpected character ','

p[class^=''] converter error: function getAttributeValue() - RegExp '/(?:"([^"]+)"|'([^']+)'|([^ "'\]]+))(?: +([siSI]))?(?=\])/y' failed to match the string ''']'

foo & address, p converter error: State.Text, check=true. Unexpected character '&'

dl > *:not(:nth-of-type(3n+1)) converter error: Pseudo-class ':nth-of-type' is required an element name; '*' is not implemented.

dl > *:not(:nth-last-of-type(3n+1)) converter error: Pseudo-class ':nth-last-of-type' is required an element name; '*' is not implemented.

not-nth-child.json

Results:

Passed: 107

Have no matches: 18

Passed: 107

p:not(:nth-child(1)) 43 === 43 //p[not(count(preceding-sibling::*) = 0)]

p:not(:nth-child(2)) 45 === 45 //p[not(count(preceding-sibling::*) = 1)]

p:not(:nth-child(3)) 43 === 43 //p[not(count(preceding-sibling::*) = 2)]

p:not(:nth-child(4)) 43 === 43 //p[not(count(preceding-sibling::*) = 3)]

p:not(:nth-child(5)) 45 === 45 //p[not(count(preceding-sibling::*) = 4)]

p:not(:nth-child(2n)) 25 === 25 //p[not((count(preceding-sibling::*) + 1) mod 2 = 0)]

p:not(:nth-child(3n)) 34 === 34 //p[not((count(preceding-sibling::*) + 1) mod 3 = 0)]

p:not(:nth-child(4n)) 36 === 36 //p[not((count(preceding-sibling::*) + 1) mod 4 = 0)]

p:not(:nth-child(5n)) 42 === 42 //p[not((count(preceding-sibling::*) + 1) mod 5 = 0)]

p:not(:nth-child(odd)) 23 === 23 //p[not((count(preceding-sibling::*) + 1) mod 2 = 1)]

p:not(:nth-child(n+2)) 5 === 5 //p[not(count(preceding-sibling::*) >= 1)]

p:not(:nth-child(n+3)) 8 === 8 //p[not(count(preceding-sibling::*) >= 2)]

p:not(:nth-child(n+4)) 13 === 13 //p[not(count(preceding-sibling::*) >= 3)]

p:not(:nth-child(n+5)) 18 === 18 //p[not(count(preceding-sibling::*) >= 4)]

p:not(:nth-child(even)) 25 === 25 //p[not((count(preceding-sibling::*) + 1) mod 2 = 0)]

p:not(:nth-child(0n+1)) 43 === 43 //p[not(count(preceding-sibling::*) = 0)]

p:not(:nth-child(0n+2)) 45 === 45 //p[not(count(preceding-sibling::*) = 1)]

p:not(:nth-child(0n+3)) 43 === 43 //p[not(count(preceding-sibling::*) = 2)]

p:not(:nth-child(0n+4)) 43 === 43 //p[not(count(preceding-sibling::*) = 3)]

p:not(:nth-child(0n+5)) 45 === 45 //p[not(count(preceding-sibling::*) = 4)]

p:not(:nth-child(1n+2)) 5 === 5 //p[not(count(preceding-sibling::*) >= 1)]

p:not(:nth-child(1n+3)) 8 === 8 //p[not(count(preceding-sibling::*) >= 2)]

p:not(:nth-child(1n+4)) 13 === 13 //p[not(count(preceding-sibling::*) >= 3)]

p:not(:nth-child(1n+5)) 18 === 18 //p[not(count(preceding-sibling::*) >= 4)]

p:not(:nth-child(2n+0)) 25 === 25 //p[not((count(preceding-sibling::*) + 1) mod 2 = 0)]

p:not(:nth-child(2n-0)) 25 === 25 //p[not((count(preceding-sibling::*) + 1) mod 2 = 0)]

p:not(:nth-child(2n+1)) 23 === 23 //p[not((count(preceding-sibling::*)) mod 2 = 0)]

p:not(:nth-child(2n-1)) 23 === 23 //p[not((count(preceding-sibling::*) + 2) mod 2 = 0)]

p:not(:nth-child(2n+2)) 25 === 25 //p[not(count(preceding-sibling::*) >= 1 and (count(preceding-sibling::*) - 1) mod 2 = 0)]

p:not(:nth-child(2n-2)) 25 === 25 //p[not((count(preceding-sibling::*) + 3) mod 2 = 0)]

p:not(:nth-child(2n+3)) 28 === 28 //p[not(count(preceding-sibling::*) >= 2 and (count(preceding-sibling::*) - 2) mod 2 = 0)]

p:not(:nth-child(2n-3)) 23 === 23 //p[not((count(preceding-sibling::*) + 4) mod 2 = 0)]

p:not(:nth-child(2n+4)) 28 === 28 //p[not(count(preceding-sibling::*) >= 3 and (count(preceding-sibling::*) - 3) mod 2 = 0)]

p:not(:nth-child(2n-4)) 25 === 25 //p[not((count(preceding-sibling::*) + 5) mod 2 = 0)]

p:not(:nth-child(2n+5)) 33 === 33 //p[not(count(preceding-sibling::*) >= 4 and (count(preceding-sibling::*) - 4) mod 2 = 0)]

p:not(:nth-child(2n-5)) 23 === 23 //p[not((count(preceding-sibling::*) + 6) mod 2 = 0)]

p:not(:nth-child(3n+0)) 34 === 34 //p[not((count(preceding-sibling::*) + 1) mod 3 = 0)]

p:not(:nth-child(3n-0)) 34 === 34 //p[not((count(preceding-sibling::*) + 1) mod 3 = 0)]

p:not(:nth-child(3n+1)) 29 === 29 //p[not((count(preceding-sibling::*)) mod 3 = 0)]

p:not(:nth-child(3n-1)) 33 === 33 //p[not((count(preceding-sibling::*) + 2) mod 3 = 0)]

p:not(:nth-child(3n+2)) 33 === 33 //p[not(count(preceding-sibling::*) >= 1 and (count(preceding-sibling::*) - 1) mod 3 = 0)]

p:not(:nth-child(3n-2)) 29 === 29 //p[not((count(preceding-sibling::*) + 3) mod 3 = 0)]

p:not(:nth-child(3n+3)) 34 === 34 //p[not(count(preceding-sibling::*) >= 2 and (count(preceding-sibling::*) - 2) mod 3 = 0)]

p:not(:nth-child(3n-3)) 34 === 34 //p[not((count(preceding-sibling::*) + 4) mod 3 = 0)]

p:not(:nth-child(3n+4)) 34 === 34 //p[not(count(preceding-sibling::*) >= 3 and (count(preceding-sibling::*) - 3) mod 3 = 0)]

p:not(:nth-child(3n-4)) 33 === 33 //p[not((count(preceding-sibling::*) + 5) mod 3 = 0)]

p:not(:nth-child(3n+5)) 36 === 36 //p[not(count(preceding-sibling::*) >= 4 and (count(preceding-sibling::*) - 4) mod 3 = 0)]

p:not(:nth-child(3n-5)) 29 === 29 //p[not((count(preceding-sibling::*) + 6) mod 3 = 0)]

p:not(:nth-child(4n+0)) 36 === 36 //p[not((count(preceding-sibling::*) + 1) mod 4 = 0)]

p:not(:nth-child(4n-0)) 36 === 36 //p[not((count(preceding-sibling::*) + 1) mod 4 = 0)]

p:not(:nth-child(4n+1)) 35 === 35 //p[not((count(preceding-sibling::*)) mod 4 = 0)]

p:not(:nth-child(4n-1)) 36 === 36 //p[not((count(preceding-sibling::*) + 2) mod 4 = 0)]

p:not(:nth-child(4n+2)) 37 === 37 //p[not(count(preceding-sibling::*) >= 1 and (count(preceding-sibling::*) - 1) mod 4 = 0)]

p:not(:nth-child(4n-2)) 37 === 37 //p[not((count(preceding-sibling::*) + 3) mod 4 = 0)]

p:not(:nth-child(4n+3)) 36 === 36 //p[not(count(preceding-sibling::*) >= 2 and (count(preceding-sibling::*) - 2) mod 4 = 0)]

p:not(:nth-child(4n-3)) 35 === 35 //p[not((count(preceding-sibling::*) + 4) mod 4 = 0)]

p:not(:nth-child(4n+4)) 36 === 36 //p[not(count(preceding-sibling::*) >= 3 and (count(preceding-sibling::*) - 3) mod 4 = 0)]

p:not(:nth-child(4n-4)) 36 === 36 //p[not((count(preceding-sibling::*) + 5) mod 4 = 0)]

p:not(:nth-child(4n+5)) 40 === 40 //p[not(count(preceding-sibling::*) >= 4 and (count(preceding-sibling::*) - 4) mod 4 = 0)]

p:not(:nth-child(4n-5)) 36 === 36 //p[not((count(preceding-sibling::*) + 6) mod 4 = 0)]

p:not(:nth-child(5n+0)) 42 === 42 //p[not((count(preceding-sibling::*) + 1) mod 5 = 0)]

p:not(:nth-child(5n-0)) 42 === 42 //p[not((count(preceding-sibling::*) + 1) mod 5 = 0)]

p:not(:nth-child(5n+1)) 36 === 36 //p[not((count(preceding-sibling::*)) mod 5 = 0)]

p:not(:nth-child(5n-1)) 39 === 39 //p[not((count(preceding-sibling::*) + 2) mod 5 = 0)]

p:not(:nth-child(5n+2)) 38 === 38 //p[not(count(preceding-sibling::*) >= 1 and (count(preceding-sibling::*) - 1) mod 5 = 0)]

p:not(:nth-child(5n-2)) 37 === 37 //p[not((count(preceding-sibling::*) + 3) mod 5 = 0)]

p:not(:nth-child(5n+3)) 37 === 37 //p[not(count(preceding-sibling::*) >= 2 and (count(preceding-sibling::*) - 2) mod 5 = 0)]

p:not(:nth-child(5n-3)) 38 === 38 //p[not((count(preceding-sibling::*) + 4) mod 5 = 0)]

p:not(:nth-child(5n+4)) 39 === 39 //p[not(count(preceding-sibling::*) >= 3 and (count(preceding-sibling::*) - 3) mod 5 = 0)]

p:not(:nth-child(5n-4)) 36 === 36 //p[not((count(preceding-sibling::*) + 5) mod 5 = 0)]

p:not(:nth-child(5n+5)) 42 === 42 //p[not(count(preceding-sibling::*) >= 4 and (count(preceding-sibling::*) - 4) mod 5 = 0)]

p:not(:nth-child(5n-5)) 42 === 42 //p[not((count(preceding-sibling::*) + 6) mod 5 = 0)]

p:not(:nth-child(-n+1)) 43 === 43 //p[not(count(preceding-sibling::*) <= 0)]

p:not(:nth-child(-n+2)) 40 === 40 //p[not(count(preceding-sibling::*) <= 1)]

p:not(:nth-child(-n+3)) 35 === 35 //p[not(count(preceding-sibling::*) <= 2)]

p:not(:nth-child(-n+4)) 30 === 30 //p[not(count(preceding-sibling::*) <= 3)]

p:not(:nth-child(-n+5)) 27 === 27 //p[not(count(preceding-sibling::*) <= 4)]

p:not(:nth-child(-0n+1)) 43 === 43 //p[not(count(preceding-sibling::*) = 0)]

p:not(:nth-child(-0n+2)) 45 === 45 //p[not(count(preceding-sibling::*) = 1)]

p:not(:nth-child(-0n+3)) 43 === 43 //p[not(count(preceding-sibling::*) = 2)]

p:not(:nth-child(-0n+4)) 43 === 43 //p[not(count(preceding-sibling::*) = 3)]

p:not(:nth-child(-0n+5)) 45 === 45 //p[not(count(preceding-sibling::*) = 4)]

p:not(:nth-child(-1n+1)) 43 === 43 //p[not(count(preceding-sibling::*) <= 0)]

p:not(:nth-child(-1n+2)) 40 === 40 //p[not(count(preceding-sibling::*) <= 1)]

p:not(:nth-child(-1n+3)) 35 === 35 //p[not(count(preceding-sibling::*) <= 2)]

p:not(:nth-child(-1n+4)) 30 === 30 //p[not(count(preceding-sibling::*) <= 3)]

p:not(:nth-child(-1n+5)) 27 === 27 //p[not(count(preceding-sibling::*) <= 4)]

p:not(:nth-child(-2n+1)) 43 === 43 //p[not(count(preceding-sibling::*) <= 0 and (count(preceding-sibling::*)) mod 2 = 0)]

p:not(:nth-child(-2n+2)) 45 === 45 //p[not(count(preceding-sibling::*) <= 1 and (count(preceding-sibling::*) - 1) mod 2 = 0)]

p:not(:nth-child(-2n+3)) 38 === 38 //p[not(count(preceding-sibling::*) <= 2 and (count(preceding-sibling::*) - 2) mod 2 = 0)]

p:not(:nth-child(-2n+4)) 40 === 40 //p[not(count(preceding-sibling::*) <= 3 and (count(preceding-sibling::*) - 3) mod 2 = 0)]

p:not(:nth-child(-2n+5)) 35 === 35 //p[not(count(preceding-sibling::*) <= 4 and (count(preceding-sibling::*) - 4) mod 2 = 0)]

p:not(:nth-child(-3n+1)) 43 === 43 //p[not(count(preceding-sibling::*) <= 0 and (count(preceding-sibling::*)) mod 3 = 0)]

p:not(:nth-child(-3n+2)) 45 === 45 //p[not(count(preceding-sibling::*) <= 1 and (count(preceding-sibling::*) - 1) mod 3 = 0)]

p:not(:nth-child(-3n+3)) 43 === 43 //p[not(count(preceding-sibling::*) <= 2 and (count(preceding-sibling::*) - 2) mod 3 = 0)]

p:not(:nth-child(-3n+4)) 38 === 38 //p[not(count(preceding-sibling::*) <= 3 and (count(preceding-sibling::*) - 3) mod 3 = 0)]

p:not(:nth-child(-3n+5)) 42 === 42 //p[not(count(preceding-sibling::*) <= 4 and (count(preceding-sibling::*) - 4) mod 3 = 0)]

p:not(:nth-child(-4n+1)) 43 === 43 //p[not(count(preceding-sibling::*) <= 0 and (count(preceding-sibling::*)) mod 4 = 0)]

p:not(:nth-child(-4n+2)) 45 === 45 //p[not(count(preceding-sibling::*) <= 1 and (count(preceding-sibling::*) - 1) mod 4 = 0)]

p:not(:nth-child(-4n+3)) 43 === 43 //p[not(count(preceding-sibling::*) <= 2 and (count(preceding-sibling::*) - 2) mod 4 = 0)]

p:not(:nth-child(-4n+4)) 43 === 43 //p[not(count(preceding-sibling::*) <= 3 and (count(preceding-sibling::*) - 3) mod 4 = 0)]

p:not(:nth-child(-4n+5)) 40 === 40 //p[not(count(preceding-sibling::*) <= 4 and (count(preceding-sibling::*) - 4) mod 4 = 0)]

p:not(:nth-child(-5n+1)) 43 === 43 //p[not(count(preceding-sibling::*) <= 0 and (count(preceding-sibling::*)) mod 5 = 0)]

p:not(:nth-child(-5n+2)) 45 === 45 //p[not(count(preceding-sibling::*) <= 1 and (count(preceding-sibling::*) - 1) mod 5 = 0)]

p:not(:nth-child(-5n+3)) 43 === 43 //p[not(count(preceding-sibling::*) <= 2 and (count(preceding-sibling::*) - 2) mod 5 = 0)]

p:not(:nth-child(-5n+4)) 43 === 43 //p[not(count(preceding-sibling::*) <= 3 and (count(preceding-sibling::*) - 3) mod 5 = 0)]

p:not(:nth-child(-5n+5)) 45 === 45 //p[not(count(preceding-sibling::*) <= 4 and (count(preceding-sibling::*) - 4) mod 5 = 0)]

Have no matches: 18

p:not(:nth-child(n)) - 0 - //p[not(self::node())]

p:not(:nth-child(1n)) - 0 - //p[not(self::node())]

p:not(:nth-child(n+0)) - 0 - //p[not(self::node())]

p:not(:nth-child(n-0)) - 0 - //p[not(self::node())]

p:not(:nth-child(n+1)) - 0 - //p[not(self::node())]

p:not(:nth-child(n-1)) - 0 - //p[not(self::node())]

p:not(:nth-child(n-2)) - 0 - //p[not(self::node())]

p:not(:nth-child(n-3)) - 0 - //p[not(self::node())]

p:not(:nth-child(n-4)) - 0 - //p[not(self::node())]

p:not(:nth-child(n-5)) - 0 - //p[not(self::node())]

p:not(:nth-child(1n+0)) - 0 - //p[not(self::node())]

p:not(:nth-child(1n-0)) - 0 - //p[not(self::node())]

p:not(:nth-child(1n+1)) - 0 - //p[not(self::node())]

p:not(:nth-child(1n-1)) - 0 - //p[not(self::node())]

p:not(:nth-child(1n-2)) - 0 - //p[not(self::node())]

p:not(:nth-child(1n-3)) - 0 - //p[not(self::node())]

p:not(:nth-child(1n-4)) - 0 - //p[not(self::node())]

p:not(:nth-child(1n-5)) - 0 - //p[not(self::node())]

not-nth-last-child.json

Results:

Passed: 107

Have no matches: 18

Passed: 107

p:not(:nth-last-child(1)) 45 === 45 //p[not(count(following-sibling::*) = 0)]

p:not(:nth-last-child(2)) 45 === 45 //p[not(count(following-sibling::*) = 1)]

p:not(:nth-last-child(3)) 44 === 44 //p[not(count(following-sibling::*) = 2)]

p:not(:nth-last-child(4)) 44 === 44 //p[not(count(following-sibling::*) = 3)]

p:not(:nth-last-child(5)) 44 === 44 //p[not(count(following-sibling::*) = 4)]

p:not(:nth-last-child(2n)) 25 === 25 //p[not((count(following-sibling::*) + 1) mod 2 = 0)]

p:not(:nth-last-child(3n)) 32 === 32 //p[not((count(following-sibling::*) + 1) mod 3 = 0)]

p:not(:nth-last-child(4n)) 37 === 37 //p[not((count(following-sibling::*) + 1) mod 4 = 0)]

p:not(:nth-last-child(5n)) 40 === 40 //p[not((count(following-sibling::*) + 1) mod 5 = 0)]

p:not(:nth-last-child(odd)) 23 === 23 //p[not((count(following-sibling::*) + 1) mod 2 = 1)]

p:not(:nth-last-child(n+2)) 3 === 3 //p[not(count(following-sibling::*) >= 1)]

p:not(:nth-last-child(n+3)) 6 === 6 //p[not(count(following-sibling::*) >= 2)]

p:not(:nth-last-child(n+4)) 10 === 10 //p[not(count(following-sibling::*) >= 3)]

p:not(:nth-last-child(n+5)) 14 === 14 //p[not(count(following-sibling::*) >= 4)]

p:not(:nth-last-child(even)) 25 === 25 //p[not((count(following-sibling::*) + 1) mod 2 = 0)]

p:not(:nth-last-child(0n+1)) 45 === 45 //p[not(count(following-sibling::*) = 0)]

p:not(:nth-last-child(0n+2)) 45 === 45 //p[not(count(following-sibling::*) = 1)]

p:not(:nth-last-child(0n+3)) 44 === 44 //p[not(count(following-sibling::*) = 2)]

p:not(:nth-last-child(0n+4)) 44 === 44 //p[not(count(following-sibling::*) = 3)]

p:not(:nth-last-child(0n+5)) 44 === 44 //p[not(count(following-sibling::*) = 4)]

p:not(:nth-last-child(1n+2)) 3 === 3 //p[not(count(following-sibling::*) >= 1)]

p:not(:nth-last-child(1n+3)) 6 === 6 //p[not(count(following-sibling::*) >= 2)]

p:not(:nth-last-child(1n+4)) 10 === 10 //p[not(count(following-sibling::*) >= 3)]

p:not(:nth-last-child(1n+5)) 14 === 14 //p[not(count(following-sibling::*) >= 4)]

p:not(:nth-last-child(2n+0)) 25 === 25 //p[not((count(following-sibling::*) + 1) mod 2 = 0)]

p:not(:nth-last-child(2n-0)) 25 === 25 //p[not((count(following-sibling::*) + 1) mod 2 = 0)]

p:not(:nth-last-child(2n+1)) 23 === 23 //p[not((count(following-sibling::*)) mod 2 = 0)]

p:not(:nth-last-child(2n-1)) 23 === 23 //p[not((count(following-sibling::*) + 2) mod 2 = 0)]

p:not(:nth-last-child(2n+2)) 25 === 25 //p[not(count(following-sibling::*) >= 1 and (count(following-sibling::*) - 1) mod 2 = 0)]

p:not(:nth-last-child(2n-2)) 25 === 25 //p[not((count(following-sibling::*) + 3) mod 2 = 0)]

p:not(:nth-last-child(2n+3)) 26 === 26 //p[not(count(following-sibling::*) >= 2 and (count(following-sibling::*) - 2) mod 2 = 0)]

p:not(:nth-last-child(2n-3)) 23 === 23 //p[not((count(following-sibling::*) + 4) mod 2 = 0)]

p:not(:nth-last-child(2n+4)) 28 === 28 //p[not(count(following-sibling::*) >= 3 and (count(following-sibling::*) - 3) mod 2 = 0)]

p:not(:nth-last-child(2n-4)) 25 === 25 //p[not((count(following-sibling::*) + 5) mod 2 = 0)]

p:not(:nth-last-child(2n+5)) 30 === 30 //p[not(count(following-sibling::*) >= 4 and (count(following-sibling::*) - 4) mod 2 = 0)]

p:not(:nth-last-child(2n-5)) 23 === 23 //p[not((count(following-sibling::*) + 6) mod 2 = 0)]

p:not(:nth-last-child(3n+0)) 32 === 32 //p[not((count(following-sibling::*) + 1) mod 3 = 0)]

p:not(:nth-last-child(3n-0)) 32 === 32 //p[not((count(following-sibling::*) + 1) mod 3 = 0)]

p:not(:nth-last-child(3n+1)) 31 === 31 //p[not((count(following-sibling::*)) mod 3 = 0)]

p:not(:nth-last-child(3n-1)) 33 === 33 //p[not((count(following-sibling::*) + 2) mod 3 = 0)]

p:not(:nth-last-child(3n+2)) 33 === 33 //p[not(count(following-sibling::*) >= 1 and (count(following-sibling::*) - 1) mod 3 = 0)]

p:not(:nth-last-child(3n-2)) 31 === 31 //p[not((count(following-sibling::*) + 3) mod 3 = 0)]

p:not(:nth-last-child(3n+3)) 32 === 32 //p[not(count(following-sibling::*) >= 2 and (count(following-sibling::*) - 2) mod 3 = 0)]

p:not(:nth-last-child(3n-3)) 32 === 32 //p[not((count(following-sibling::*) + 4) mod 3 = 0)]

p:not(:nth-last-child(3n+4)) 34 === 34 //p[not(count(following-sibling::*) >= 3 and (count(following-sibling::*) - 3) mod 3 = 0)]

p:not(:nth-last-child(3n-4)) 33 === 33 //p[not((count(following-sibling::*) + 5) mod 3 = 0)]

p:not(:nth-last-child(3n+5)) 36 === 36 //p[not(count(following-sibling::*) >= 4 and (count(following-sibling::*) - 4) mod 3 = 0)]

p:not(:nth-last-child(3n-5)) 31 === 31 //p[not((count(following-sibling::*) + 6) mod 3 = 0)]

p:not(:nth-last-child(4n+0)) 37 === 37 //p[not((count(following-sibling::*) + 1) mod 4 = 0)]

p:not(:nth-last-child(4n-0)) 37 === 37 //p[not((count(following-sibling::*) + 1) mod 4 = 0)]

p:not(:nth-last-child(4n+1)) 35 === 35 //p[not((count(following-sibling::*)) mod 4 = 0)]

p:not(:nth-last-child(4n-1)) 36 === 36 //p[not((count(following-sibling::*) + 2) mod 4 = 0)]

p:not(:nth-last-child(4n+2)) 36 === 36 //p[not(count(following-sibling::*) >= 1 and (count(following-sibling::*) - 1) mod 4 = 0)]

p:not(:nth-last-child(4n-2)) 36 === 36 //p[not((count(following-sibling::*) + 3) mod 4 = 0)]

p:not(:nth-last-child(4n+3)) 36 === 36 //p[not(count(following-sibling::*) >= 2 and (count(following-sibling::*) - 2) mod 4 = 0)]

p:not(:nth-last-child(4n-3)) 35 === 35 //p[not((count(following-sibling::*) + 4) mod 4 = 0)]

p:not(:nth-last-child(4n+4)) 37 === 37 //p[not(count(following-sibling::*) >= 3 and (count(following-sibling::*) - 3) mod 4 = 0)]

p:not(:nth-last-child(4n-4)) 37 === 37 //p[not((count(following-sibling::*) + 5) mod 4 = 0)]

p:not(:nth-last-child(4n+5)) 38 === 38 //p[not(count(following-sibling::*) >= 4 and (count(following-sibling::*) - 4) mod 4 = 0)]

p:not(:nth-last-child(4n-5)) 36 === 36 //p[not((count(following-sibling::*) + 6) mod 4 = 0)]

p:not(:nth-last-child(5n+0)) 40 === 40 //p[not((count(following-sibling::*) + 1) mod 5 = 0)]

p:not(:nth-last-child(5n-0)) 40 === 40 //p[not((count(following-sibling::*) + 1) mod 5 = 0)]

p:not(:nth-last-child(5n+1)) 39 === 39 //p[not((count(following-sibling::*)) mod 5 = 0)]

p:not(:nth-last-child(5n-1)) 38 === 38 //p[not((count(following-sibling::*) + 2) mod 5 = 0)]

p:not(:nth-last-child(5n+2)) 38 === 38 //p[not(count(following-sibling::*) >= 1 and (count(following-sibling::*) - 1) mod 5 = 0)]

p:not(:nth-last-child(5n-2)) 37 === 37 //p[not((count(following-sibling::*) + 3) mod 5 = 0)]

p:not(:nth-last-child(5n+3)) 37 === 37 //p[not(count(following-sibling::*) >= 2 and (count(following-sibling::*) - 2) mod 5 = 0)]

p:not(:nth-last-child(5n-3)) 38 === 38 //p[not((count(following-sibling::*) + 4) mod 5 = 0)]

p:not(:nth-last-child(5n+4)) 38 === 38 //p[not(count(following-sibling::*) >= 3 and (count(following-sibling::*) - 3) mod 5 = 0)]

p:not(:nth-last-child(5n-4)) 39 === 39 //p[not((count(following-sibling::*) + 5) mod 5 = 0)]

p:not(:nth-last-child(5n+5)) 40 === 40 //p[not(count(following-sibling::*) >= 4 and (count(following-sibling::*) - 4) mod 5 = 0)]

p:not(:nth-last-child(5n-5)) 40 === 40 //p[not((count(following-sibling::*) + 6) mod 5 = 0)]

p:not(:nth-last-child(-n+1)) 45 === 45 //p[not(count(following-sibling::*) <= 0)]

p:not(:nth-last-child(-n+2)) 42 === 42 //p[not(count(following-sibling::*) <= 1)]

p:not(:nth-last-child(-n+3)) 38 === 38 //p[not(count(following-sibling::*) <= 2)]

p:not(:nth-last-child(-n+4)) 34 === 34 //p[not(count(following-sibling::*) <= 3)]

p:not(:nth-last-child(-n+5)) 30 === 30 //p[not(count(following-sibling::*) <= 4)]

p:not(:nth-last-child(-0n+1)) 45 === 45 //p[not(count(following-sibling::*) < 1)]

p:not(:nth-last-child(-0n+2)) 45 === 45 //p[not(count(following-sibling::*) = 1)]

p:not(:nth-last-child(-0n+3)) 44 === 44 //p[not(count(following-sibling::*) = 2)]

p:not(:nth-last-child(-0n+4)) 44 === 44 //p[not(count(following-sibling::*) = 3)]

p:not(:nth-last-child(-0n+5)) 44 === 44 //p[not(count(following-sibling::*) = 4)]

p:not(:nth-last-child(-1n+1)) 45 === 45 //p[not(count(following-sibling::*) <= 0)]

p:not(:nth-last-child(-1n+2)) 42 === 42 //p[not(count(following-sibling::*) < 2)]

p:not(:nth-last-child(-1n+3)) 38 === 38 //p[not(count(following-sibling::*) < 3)]

p:not(:nth-last-child(-1n+4)) 34 === 34 //p[not(count(following-sibling::*) < 4)]

p:not(:nth-last-child(-1n+5)) 30 === 30 //p[not(count(following-sibling::*) < 5)]

p:not(:nth-last-child(-2n+1)) 45 === 45 //p[not(count(following-sibling::*) <= 0 and (count(following-sibling::*)) mod 2 = 0)]

p:not(:nth-last-child(-2n+2)) 45 === 45 //p[not(count(following-sibling::*) <= 1 and (count(following-sibling::*) - 1) mod 2 = 0)]

p:not(:nth-last-child(-2n+3)) 41 === 41 //p[not(count(following-sibling::*) < 3 and (count(following-sibling::*) - 2) mod 2 = 0)]

p:not(:nth-last-child(-2n+4)) 41 === 41 //p[not(count(following-sibling::*) < 4 and (count(following-sibling::*) - 3) mod 2 = 0)]

p:not(:nth-last-child(-2n+5)) 37 === 37 //p[not(count(following-sibling::*) < 5 and (count(following-sibling::*) - 4) mod 2 = 0)]

p:not(:nth-last-child(-3n+1)) 45 === 45 //p[not(count(following-sibling::*) <= 0 and (count(following-sibling::*)) mod 3 = 0)]

p:not(:nth-last-child(-3n+2)) 45 === 45 //p[not(count(following-sibling::*) <= 1 and (count(following-sibling::*) - 1) mod 3 = 0)]

p:not(:nth-last-child(-3n+3)) 44 === 44 //p[not(count(following-sibling::*) <= 2 and (count(following-sibling::*) - 2) mod 3 = 0)]

p:not(:nth-last-child(-3n+4)) 41 === 41 //p[not(count(following-sibling::*) < 4 and (count(following-sibling::*) - 3) mod 3 = 0)]

p:not(:nth-last-child(-3n+5)) 41 === 41 //p[not(count(following-sibling::*) < 5 and (count(following-sibling::*) - 4) mod 3 = 0)]

p:not(:nth-last-child(-4n+1)) 45 === 45 //p[not(count(following-sibling::*) <= 0 and (count(following-sibling::*)) mod 4 = 0)]

p:not(:nth-last-child(-4n+2)) 45 === 45 //p[not(count(following-sibling::*) <= 1 and (count(following-sibling::*) - 1) mod 4 = 0)]

p:not(:nth-last-child(-4n+3)) 44 === 44 //p[not(count(following-sibling::*) <= 2 and (count(following-sibling::*) - 2) mod 4 = 0)]

p:not(:nth-last-child(-4n+4)) 44 === 44 //p[not(count(following-sibling::*) <= 3 and (count(following-sibling::*) - 3) mod 4 = 0)]

p:not(:nth-last-child(-4n+5)) 41 === 41 //p[not(count(following-sibling::*) < 5 and (count(following-sibling::*) - 4) mod 4 = 0)]

p:not(:nth-last-child(-5n+1)) 45 === 45 //p[not(count(following-sibling::*) <= 0 and (count(following-sibling::*)) mod 5 = 0)]

p:not(:nth-last-child(-5n+2)) 45 === 45 //p[not(count(following-sibling::*) <= 1 and (count(following-sibling::*) - 1) mod 5 = 0)]

p:not(:nth-last-child(-5n+3)) 44 === 44 //p[not(count(following-sibling::*) <= 2 and (count(following-sibling::*) - 2) mod 5 = 0)]

p:not(:nth-last-child(-5n+4)) 44 === 44 //p[not(count(following-sibling::*) <= 3 and (count(following-sibling::*) - 3) mod 5 = 0)]

p:not(:nth-last-child(-5n+5)) 44 === 44 //p[not(count(following-sibling::*) <= 4 and (count(following-sibling::*) - 4) mod 5 = 0)]

Have no matches: 18

p:not(:nth-last-child(n)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(1n)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(n+0)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(n-0)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(n+1)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(n-1)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(n-2)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(n-3)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(n-4)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(n-5)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(1n+0)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(1n-0)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(1n+1)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(1n-1)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(1n-2)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(1n-3)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(1n-4)) - 0 - //p[not(self::node())]

p:not(:nth-last-child(1n-5)) - 0 - //p[not(self::node())]

not-nth-last-of-type.json

Results:

Passed: 107

Have no matches: 18

Passed: 107

p:not(:nth-last-of-type(1)) 43 === 43 //p[not(count(following-sibling::p) = 0)]

p:not(:nth-last-of-type(2)) 43 === 43 //p[not(count(following-sibling::p) = 1)]

p:not(:nth-last-of-type(3)) 43 === 43 //p[not(count(following-sibling::p) = 2)]

p:not(:nth-last-of-type(4)) 44 === 44 //p[not(count(following-sibling::p) = 3)]

p:not(:nth-last-of-type(5)) 44 === 44 //p[not(count(following-sibling::p) = 4)]

p:not(:nth-last-of-type(2n)) 26 === 26 //p[not((count(following-sibling::p) + 1) mod 2 = 0)]

p:not(:nth-last-of-type(3n)) 32 === 32 //p[not((count(following-sibling::p) + 1) mod 3 = 0)]

p:not(:nth-last-of-type(4n)) 39 === 39 //p[not((count(following-sibling::p) + 1) mod 4 = 0)]

p:not(:nth-last-of-type(5n)) 40 === 40 //p[not((count(following-sibling::p) + 1) mod 5 = 0)]

p:not(:nth-last-of-type(odd)) 22 === 22 //p[not((count(following-sibling::p) + 1) mod 2 = 1)]

p:not(:nth-last-of-type(n+2)) 5 === 5 //p[not(count(following-sibling::p) >= 1)]

p:not(:nth-last-of-type(n+3)) 10 === 10 //p[not(count(following-sibling::p) >= 2)]

p:not(:nth-last-of-type(n+4)) 15 === 15 //p[not(count(following-sibling::p) >= 3)]

p:not(:nth-last-of-type(n+5)) 19 === 19 //p[not(count(following-sibling::p) >= 4)]

p:not(:nth-last-of-type(even)) 26 === 26 //p[not((count(following-sibling::p) + 1) mod 2 = 0)]

p:not(:nth-last-of-type(0n+1)) 43 === 43 //p[not(count(following-sibling::p) = 0)]

p:not(:nth-last-of-type(0n+2)) 43 === 43 //p[not(count(following-sibling::p) = 1)]

p:not(:nth-last-of-type(0n+3)) 43 === 43 //p[not(count(following-sibling::p) = 2)]

p:not(:nth-last-of-type(0n+4)) 44 === 44 //p[not(count(following-sibling::p) = 3)]

p:not(:nth-last-of-type(0n+5)) 44 === 44 //p[not(count(following-sibling::p) = 4)]

p:not(:nth-last-of-type(1n+2)) 5 === 5 //p[not(count(following-sibling::p) >= 1)]

p:not(:nth-last-of-type(1n+3)) 10 === 10 //p[not(count(following-sibling::p) >= 2)]

p:not(:nth-last-of-type(1n+4)) 15 === 15 //p[not(count(following-sibling::p) >= 3)]

p:not(:nth-last-of-type(1n+5)) 19 === 19 //p[not(count(following-sibling::p) >= 4)]

p:not(:nth-last-of-type(2n+0)) 26 === 26 //p[not((count(following-sibling::p) + 1) mod 2 = 0)]

p:not(:nth-last-of-type(2n-0)) 26 === 26 //p[not((count(following-sibling::p) + 1) mod 2 = 0)]

p:not(:nth-last-of-type(2n+1)) 22 === 22 //p[not((count(following-sibling::p)) mod 2 = 0)]

p:not(:nth-last-of-type(2n-1)) 22 === 22 //p[not((count(following-sibling::p) + 2) mod 2 = 0)]

p:not(:nth-last-of-type(2n+2)) 26 === 26 //p[not(count(following-sibling::p) >= 1 and (count(following-sibling::p) - 1) mod 2 = 0)]

p:not(:nth-last-of-type(2n-2)) 26 === 26 //p[not((count(following-sibling::p) + 3) mod 2 = 0)]

p:not(:nth-last-of-type(2n+3)) 27 === 27 //p[not(count(following-sibling::p) >= 2 and (count(following-sibling::p) - 2) mod 2 = 0)]

p:not(:nth-last-of-type(2n-3)) 22 === 22 //p[not((count(following-sibling::p) + 4) mod 2 = 0)]

p:not(:nth-last-of-type(2n+4)) 31 === 31 //p[not(count(following-sibling::p) >= 3 and (count(following-sibling::p) - 3) mod 2 = 0)]

p:not(:nth-last-of-type(2n-4)) 26 === 26 //p[not((count(following-sibling::p) + 5) mod 2 = 0)]

p:not(:nth-last-of-type(2n+5)) 32 === 32 //p[not(count(following-sibling::p) >= 4 and (count(following-sibling::p) - 4) mod 2 = 0)]

p:not(:nth-last-of-type(2n-5)) 22 === 22 //p[not((count(following-sibling::p) + 6) mod 2 = 0)]

p:not(:nth-last-of-type(3n+0)) 32 === 32 //p[not((count(following-sibling::p) + 1) mod 3 = 0)]

p:not(:nth-last-of-type(3n-0)) 32 === 32 //p[not((count(following-sibling::p) + 1) mod 3 = 0)]

p:not(:nth-last-of-type(3n+1)) 32 === 32 //p[not((count(following-sibling::p)) mod 3 = 0)]

p:not(:nth-last-of-type(3n-1)) 32 === 32 //p[not((count(following-sibling::p) + 2) mod 3 = 0)]

p:not(:nth-last-of-type(3n+2)) 32 === 32 //p[not(count(following-sibling::p) >= 1 and (count(following-sibling::p) - 1) mod 3 = 0)]

p:not(:nth-last-of-type(3n-2)) 32 === 32 //p[not((count(following-sibling::p) + 3) mod 3 = 0)]

p:not(:nth-last-of-type(3n+3)) 32 === 32 //p[not(count(following-sibling::p) >= 2 and (count(following-sibling::p) - 2) mod 3 = 0)]

p:not(:nth-last-of-type(3n-3)) 32 === 32 //p[not((count(following-sibling::p) + 4) mod 3 = 0)]

p:not(:nth-last-of-type(3n+4)) 37 === 37 //p[not(count(following-sibling::p) >= 3 and (count(following-sibling::p) - 3) mod 3 = 0)]

p:not(:nth-last-of-type(3n-4)) 32 === 32 //p[not((count(following-sibling::p) + 5) mod 3 = 0)]

p:not(:nth-last-of-type(3n+5)) 37 === 37 //p[not(count(following-sibling::p) >= 4 and (count(following-sibling::p) - 4) mod 3 = 0)]

p:not(:nth-last-of-type(3n-5)) 32 === 32 //p[not((count(following-sibling::p) + 6) mod 3 = 0)]

p:not(:nth-last-of-type(4n+0)) 39 === 39 //p[not((count(following-sibling::p) + 1) mod 4 = 0)]

p:not(:nth-last-of-type(4n-0)) 39 === 39 //p[not((count(following-sibling::p) + 1) mod 4 = 0)]

p:not(:nth-last-of-type(4n+1)) 34 === 34 //p[not((count(following-sibling::p)) mod 4 = 0)]

p:not(:nth-last-of-type(4n-1)) 36 === 36 //p[not((count(following-sibling::p) + 2) mod 4 = 0)]

p:not(:nth-last-of-type(4n+2)) 35 === 35 //p[not(count(following-sibling::p) >= 1 and (count(following-sibling::p) - 1) mod 4 = 0)]

p:not(:nth-last-of-type(4n-2)) 35 === 35 //p[not((count(following-sibling::p) + 3) mod 4 = 0)]

p:not(:nth-last-of-type(4n+3)) 36 === 36 //p[not(count(following-sibling::p) >= 2 and (count(following-sibling::p) - 2) mod 4 = 0)]

p:not(:nth-last-of-type(4n-3)) 34 === 34 //p[not((count(following-sibling::p) + 4) mod 4 = 0)]

p:not(:nth-last-of-type(4n+4)) 39 === 39 //p[not(count(following-sibling::p) >= 3 and (count(following-sibling::p) - 3) mod 4 = 0)]

p:not(:nth-last-of-type(4n-4)) 39 === 39 //p[not((count(following-sibling::p) + 5) mod 4 = 0)]

p:not(:nth-last-of-type(4n+5)) 39 === 39 //p[not(count(following-sibling::p) >= 4 and (count(following-sibling::p) - 4) mod 4 = 0)]

p:not(:nth-last-of-type(4n-5)) 36 === 36 //p[not((count(following-sibling::p) + 6) mod 4 = 0)]

p:not(:nth-last-of-type(5n+0)) 40 === 40 //p[not((count(following-sibling::p) + 1) mod 5 = 0)]

p:not(:nth-last-of-type(5n-0)) 40 === 40 //p[not((count(following-sibling::p) + 1) mod 5 = 0)]

p:not(:nth-last-of-type(5n+1)) 37 === 37 //p[not((count(following-sibling::p)) mod 5 = 0)]

p:not(:nth-last-of-type(5n-1)) 39 === 39 //p[not((count(following-sibling::p) + 2) mod 5 = 0)]

p:not(:nth-last-of-type(5n+2)) 38 === 38 //p[not(count(following-sibling::p) >= 1 and (count(following-sibling::p) - 1) mod 5 = 0)]

p:not(:nth-last-of-type(5n-2)) 38 === 38 //p[not((count(following-sibling::p) + 3) mod 5 = 0)]

p:not(:nth-last-of-type(5n+3)) 38 === 38 //p[not(count(following-sibling::p) >= 2 and (count(following-sibling::p) - 2) mod 5 = 0)]

p:not(:nth-last-of-type(5n-3)) 38 === 38 //p[not((count(following-sibling::p) + 4) mod 5 = 0)]

p:not(:nth-last-of-type(5n+4)) 39 === 39 //p[not(count(following-sibling::p) >= 3 and (count(following-sibling::p) - 3) mod 5 = 0)]

p:not(:nth-last-of-type(5n-4)) 37 === 37 //p[not((count(following-sibling::p) + 5) mod 5 = 0)]

p:not(:nth-last-of-type(5n+5)) 40 === 40 //p[not(count(following-sibling::p) >= 4 and (count(following-sibling::p) - 4) mod 5 = 0)]

p:not(:nth-last-of-type(5n-5)) 40 === 40 //p[not((count(following-sibling::p) + 6) mod 5 = 0)]

p:not(:nth-last-of-type(-n+1)) 43 === 43 //p[not(count(following-sibling::p) <= 0)]

p:not(:nth-last-of-type(-n+2)) 38 === 38 //p[not(count(following-sibling::p) <= 1)]

p:not(:nth-last-of-type(-n+3)) 33 === 33 //p[not(count(following-sibling::p) <= 2)]

p:not(:nth-last-of-type(-n+4)) 29 === 29 //p[not(count(following-sibling::p) <= 3)]

p:not(:nth-last-of-type(-n+5)) 25 === 25 //p[not(count(following-sibling::p) <= 4)]

p:not(:nth-last-of-type(-0n+1)) 43 === 43 //p[not(count(following-sibling::p) < 1)]

p:not(:nth-last-of-type(-0n+2)) 43 === 43 //p[not(count(following-sibling::p) = 1)]

p:not(:nth-last-of-type(-0n+3)) 43 === 43 //p[not(count(following-sibling::p) = 2)]

p:not(:nth-last-of-type(-0n+4)) 44 === 44 //p[not(count(following-sibling::p) = 3)]

p:not(:nth-last-of-type(-0n+5)) 44 === 44 //p[not(count(following-sibling::p) = 4)]

p:not(:nth-last-of-type(-1n+1)) 43 === 43 //p[not(count(following-sibling::p) <= 0)]

p:not(:nth-last-of-type(-1n+2)) 38 === 38 //p[not(count(following-sibling::p) < 2)]

p:not(:nth-last-of-type(-1n+3)) 33 === 33 //p[not(count(following-sibling::p) < 3)]

p:not(:nth-last-of-type(-1n+4)) 29 === 29 //p[not(count(following-sibling::p) < 4)]

p:not(:nth-last-of-type(-1n+5)) 25 === 25 //p[not(count(following-sibling::p) < 5)]

p:not(:nth-last-of-type(-2n+1)) 43 === 43 //p[not(count(following-sibling::p) <= 0 and (count(following-sibling::p)) mod 2 = 0)]

p:not(:nth-last-of-type(-2n+2)) 43 === 43 //p[not(count(following-sibling::p) <= 1 and (count(following-sibling::p) - 1) mod 2 = 0)]

p:not(:nth-last-of-type(-2n+3)) 38 === 38 //p[not(count(following-sibling::p) < 3 and (count(following-sibling::p) - 2) mod 2 = 0)]

p:not(:nth-last-of-type(-2n+4)) 39 === 39 //p[not(count(following-sibling::p) < 4 and (count(following-sibling::p) - 3) mod 2 = 0)]

p:not(:nth-last-of-type(-2n+5)) 34 === 34 //p[not(count(following-sibling::p) < 5 and (count(following-sibling::p) - 4) mod 2 = 0)]

p:not(:nth-last-of-type(-3n+1)) 43 === 43 //p[not(count(following-sibling::p) <= 0 and (count(following-sibling::p)) mod 3 = 0)]

p:not(:nth-last-of-type(-3n+2)) 43 === 43 //p[not(count(following-sibling::p) <= 1 and (count(following-sibling::p) - 1) mod 3 = 0)]

p:not(:nth-last-of-type(-3n+3)) 43 === 43 //p[not(count(following-sibling::p) <= 2 and (count(following-sibling::p) - 2) mod 3 = 0)]

p:not(:nth-last-of-type(-3n+4)) 39 === 39 //p[not(count(following-sibling::p) < 4 and (count(following-sibling::p) - 3) mod 3 = 0)]

p:not(:nth-last-of-type(-3n+5)) 39 === 39 //p[not(count(following-sibling::p) < 5 and (count(following-sibling::p) - 4) mod 3 = 0)]

p:not(:nth-last-of-type(-4n+1)) 43 === 43 //p[not(count(following-sibling::p) <= 0 and (count(following-sibling::p)) mod 4 = 0)]

p:not(:nth-last-of-type(-4n+2)) 43 === 43 //p[not(count(following-sibling::p) <= 1 and (count(following-sibling::p) - 1) mod 4 = 0)]

p:not(:nth-last-of-type(-4n+3)) 43 === 43 //p[not(count(following-sibling::p) <= 2 and (count(following-sibling::p) - 2) mod 4 = 0)]

p:not(:nth-last-of-type(-4n+4)) 44 === 44 //p[not(count(following-sibling::p) <= 3 and (count(following-sibling::p) - 3) mod 4 = 0)]

p:not(:nth-last-of-type(-4n+5)) 39 === 39 //p[not(count(following-sibling::p) < 5 and (count(following-sibling::p) - 4) mod 4 = 0)]

p:not(:nth-last-of-type(-5n+1)) 43 === 43 //p[not(count(following-sibling::p) <= 0 and (count(following-sibling::p)) mod 5 = 0)]

p:not(:nth-last-of-type(-5n+2)) 43 === 43 //p[not(count(following-sibling::p) <= 1 and (count(following-sibling::p) - 1) mod 5 = 0)]

p:not(:nth-last-of-type(-5n+3)) 43 === 43 //p[not(count(following-sibling::p) <= 2 and (count(following-sibling::p) - 2) mod 5 = 0)]

p:not(:nth-last-of-type(-5n+4)) 44 === 44 //p[not(count(following-sibling::p) <= 3 and (count(following-sibling::p) - 3) mod 5 = 0)]

p:not(:nth-last-of-type(-5n+5)) 44 === 44 //p[not(count(following-sibling::p) <= 4 and (count(following-sibling::p) - 4) mod 5 = 0)]

Have no matches: 18

p:not(:nth-last-of-type(n)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(1n)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(n+0)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(n-0)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(n+1)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(n-1)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(n-2)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(n-3)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(n-4)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(n-5)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(1n+0)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(1n-0)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(1n+1)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(1n-1)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(1n-2)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(1n-3)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(1n-4)) - 0 - //p[not(self::node())]

p:not(:nth-last-of-type(1n-5)) - 0 - //p[not(self::node())]

not-nth-of-type.json

Results:

Passed: 107

Have no matches: 18

Passed: 107

p:not(:nth-of-type(1)) 43 === 43 //p[not(count(preceding-sibling::p) = 0)]

p:not(:nth-of-type(2)) 43 === 43 //p[not(count(preceding-sibling::p) = 1)]

p:not(:nth-of-type(3)) 43 === 43 //p[not(count(preceding-sibling::p) = 2)]

p:not(:nth-of-type(4)) 44 === 44 //p[not(count(preceding-sibling::p) = 3)]

p:not(:nth-of-type(5)) 44 === 44 //p[not(count(preceding-sibling::p) = 4)]

p:not(:nth-of-type(2n)) 26 === 26 //p[not((count(preceding-sibling::p) + 1) mod 2 = 0)]

p:not(:nth-of-type(3n)) 32 === 32 //p[not((count(preceding-sibling::p) + 1) mod 3 = 0)]

p:not(:nth-of-type(4n)) 39 === 39 //p[not((count(preceding-sibling::p) + 1) mod 4 = 0)]

p:not(:nth-of-type(5n)) 40 === 40 //p[not((count(preceding-sibling::p) + 1) mod 5 = 0)]

p:not(:nth-of-type(odd)) 22 === 22 //p[not((count(preceding-sibling::p) + 1) mod 2 = 1)]

p:not(:nth-of-type(n+2)) 5 === 5 //p[not(count(preceding-sibling::p) >= 1)]

p:not(:nth-of-type(n+3)) 10 === 10 //p[not(count(preceding-sibling::p) >= 2)]

p:not(:nth-of-type(n+4)) 15 === 15 //p[not(count(preceding-sibling::p) >= 3)]

p:not(:nth-of-type(n+5)) 19 === 19 //p[not(count(preceding-sibling::p) >= 4)]

p:not(:nth-of-type(even)) 26 === 26 //p[not((count(preceding-sibling::p) + 1) mod 2 = 0)]

p:not(:nth-of-type(0n+1)) 43 === 43 //p[not(count(preceding-sibling::p) = 0)]

p:not(:nth-of-type(0n+2)) 43 === 43 //p[not(count(preceding-sibling::p) = 1)]

p:not(:nth-of-type(0n+3)) 43 === 43 //p[not(count(preceding-sibling::p) = 2)]

p:not(:nth-of-type(0n+4)) 44 === 44 //p[not(count(preceding-sibling::p) = 3)]

p:not(:nth-of-type(0n+5)) 44 === 44 //p[not(count(preceding-sibling::p) = 4)]

p:not(:nth-of-type(1n+2)) 5 === 5 //p[not(count(preceding-sibling::p) >= 1)]

p:not(:nth-of-type(1n+3)) 10 === 10 //p[not(count(preceding-sibling::p) >= 2)]

p:not(:nth-of-type(1n+4)) 15 === 15 //p[not(count(preceding-sibling::p) >= 3)]

p:not(:nth-of-type(1n+5)) 19 === 19 //p[not(count(preceding-sibling::p) >= 4)]

p:not(:nth-of-type(2n+0)) 26 === 26 //p[not((count(preceding-sibling::p) + 1) mod 2 = 0)]

p:not(:nth-of-type(2n-0)) 26 === 26 //p[not((count(preceding-sibling::p) + 1) mod 2 = 0)]

p:not(:nth-of-type(2n+1)) 22 === 22 //p[not((count(preceding-sibling::p)) mod 2 = 0)]

p:not(:nth-of-type(2n-1)) 22 === 22 //p[not((count(preceding-sibling::p) + 2) mod 2 = 0)]

p:not(:nth-of-type(2n+2)) 26 === 26 //p[not(count(preceding-sibling::p) >= 1 and (count(preceding-sibling::p) - 1) mod 2 = 0)]

p:not(:nth-of-type(2n-2)) 26 === 26 //p[not((count(preceding-sibling::p) + 3) mod 2 = 0)]

p:not(:nth-of-type(2n+3)) 27 === 27 //p[not(count(preceding-sibling::p) >= 2 and (count(preceding-sibling::p) - 2) mod 2 = 0)]

p:not(:nth-of-type(2n-3)) 22 === 22 //p[not((count(preceding-sibling::p) + 4) mod 2 = 0)]

p:not(:nth-of-type(2n+4)) 31 === 31 //p[not(count(preceding-sibling::p) >= 3 and (count(preceding-sibling::p) - 3) mod 2 = 0)]

p:not(:nth-of-type(2n-4)) 26 === 26 //p[not((count(preceding-sibling::p) + 5) mod 2 = 0)]

p:not(:nth-of-type(2n+5)) 32 === 32 //p[not(count(preceding-sibling::p) >= 4 and (count(preceding-sibling::p) - 4) mod 2 = 0)]

p:not(:nth-of-type(2n-5)) 22 === 22 //p[not((count(preceding-sibling::p) + 6) mod 2 = 0)]

p:not(:nth-of-type(3n+0)) 32 === 32 //p[not((count(preceding-sibling::p) + 1) mod 3 = 0)]

p:not(:nth-of-type(3n-0)) 32 === 32 //p[not((count(preceding-sibling::p) + 1) mod 3 = 0)]

p:not(:nth-of-type(3n+1)) 32 === 32 //p[not((count(preceding-sibling::p)) mod 3 = 0)]

p:not(:nth-of-type(3n-1)) 32 === 32 //p[not((count(preceding-sibling::p) + 2) mod 3 = 0)]

p:not(:nth-of-type(3n+2)) 32 === 32 //p[not(count(preceding-sibling::p) >= 1 and (count(preceding-sibling::p) - 1) mod 3 = 0)]

p:not(:nth-of-type(3n-2)) 32 === 32 //p[not((count(preceding-sibling::p) + 3) mod 3 = 0)]

p:not(:nth-of-type(3n+3)) 32 === 32 //p[not(count(preceding-sibling::p) >= 2 and (count(preceding-sibling::p) - 2) mod 3 = 0)]

p:not(:nth-of-type(3n-3)) 32 === 32 //p[not((count(preceding-sibling::p) + 4) mod 3 = 0)]

p:not(:nth-of-type(3n+4)) 37 === 37 //p[not(count(preceding-sibling::p) >= 3 and (count(preceding-sibling::p) - 3) mod 3 = 0)]

p:not(:nth-of-type(3n-4)) 32 === 32 //p[not((count(preceding-sibling::p) + 5) mod 3 = 0)]

p:not(:nth-of-type(3n+5)) 37 === 37 //p[not(count(preceding-sibling::p) >= 4 and (count(preceding-sibling::p) - 4) mod 3 = 0)]

p:not(:nth-of-type(3n-5)) 32 === 32 //p[not((count(preceding-sibling::p) + 6) mod 3 = 0)]

p:not(:nth-of-type(4n+0)) 39 === 39 //p[not((count(preceding-sibling::p) + 1) mod 4 = 0)]

p:not(:nth-of-type(4n-0)) 39 === 39 //p[not((count(preceding-sibling::p) + 1) mod 4 = 0)]

p:not(:nth-of-type(4n+1)) 34 === 34 //p[not((count(preceding-sibling::p)) mod 4 = 0)]

p:not(:nth-of-type(4n-1)) 36 === 36 //p[not((count(preceding-sibling::p) + 2) mod 4 = 0)]

p:not(:nth-of-type(4n+2)) 35 === 35 //p[not(count(preceding-sibling::p) >= 1 and (count(preceding-sibling::p) - 1) mod 4 = 0)]

p:not(:nth-of-type(4n-2)) 35 === 35 //p[not((count(preceding-sibling::p) + 3) mod 4 = 0)]

p:not(:nth-of-type(4n+3)) 36 === 36 //p[not(count(preceding-sibling::p) >= 2 and (count(preceding-sibling::p) - 2) mod 4 = 0)]

p:not(:nth-of-type(4n-3)) 34 === 34 //p[not((count(preceding-sibling::p) + 4) mod 4 = 0)]

p:not(:nth-of-type(4n+4)) 39 === 39 //p[not(count(preceding-sibling::p) >= 3 and (count(preceding-sibling::p) - 3) mod 4 = 0)]

p:not(:nth-of-type(4n-4)) 39 === 39 //p[not((count(preceding-sibling::p) + 5) mod 4 = 0)]

p:not(:nth-of-type(4n+5)) 39 === 39 //p[not(count(preceding-sibling::p) >= 4 and (count(preceding-sibling::p) - 4) mod 4 = 0)]

p:not(:nth-of-type(4n-5)) 36 === 36 //p[not((count(preceding-sibling::p) + 6) mod 4 = 0)]

p:not(:nth-of-type(5n+0)) 40 === 40 //p[not((count(preceding-sibling::p) + 1) mod 5 = 0)]

p:not(:nth-of-type(5n-0)) 40 === 40 //p[not((count(preceding-sibling::p) + 1) mod 5 = 0)]

p:not(:nth-of-type(5n+1)) 37 === 37 //p[not((count(preceding-sibling::p)) mod 5 = 0)]

p:not(:nth-of-type(5n-1)) 39 === 39 //p[not((count(preceding-sibling::p) + 2) mod 5 = 0)]

p:not(:nth-of-type(5n+2)) 38 === 38 //p[not(count(preceding-sibling::p) >= 1 and (count(preceding-sibling::p) - 1) mod 5 = 0)]

p:not(:nth-of-type(5n-2)) 38 === 38 //p[not((count(preceding-sibling::p) + 3) mod 5 = 0)]

p:not(:nth-of-type(5n+3)) 38 === 38 //p[not(count(preceding-sibling::p) >= 2 and (count(preceding-sibling::p) - 2) mod 5 = 0)]

p:not(:nth-of-type(5n-3)) 38 === 38 //p[not((count(preceding-sibling::p) + 4) mod 5 = 0)]

p:not(:nth-of-type(5n+4)) 39 === 39 //p[not(count(preceding-sibling::p) >= 3 and (count(preceding-sibling::p) - 3) mod 5 = 0)]

p:not(:nth-of-type(5n-4)) 37 === 37 //p[not((count(preceding-sibling::p) + 5) mod 5 = 0)]

p:not(:nth-of-type(5n+5)) 40 === 40 //p[not(count(preceding-sibling::p) >= 4 and (count(preceding-sibling::p) - 4) mod 5 = 0)]

p:not(:nth-of-type(5n-5)) 40 === 40 //p[not((count(preceding-sibling::p) + 6) mod 5 = 0)]

p:not(:nth-of-type(-n+1)) 43 === 43 //p[not(count(preceding-sibling::p) <= 0)]

p:not(:nth-of-type(-n+2)) 38 === 38 //p[not(count(preceding-sibling::p) <= 1)]

p:not(:nth-of-type(-n+3)) 33 === 33 //p[not(count(preceding-sibling::p) <= 2)]

p:not(:nth-of-type(-n+4)) 29 === 29 //p[not(count(preceding-sibling::p) <= 3)]

p:not(:nth-of-type(-n+5)) 25 === 25 //p[not(count(preceding-sibling::p) <= 4)]

p:not(:nth-of-type(-0n+1)) 43 === 43 //p[not(count(preceding-sibling::p) = 0)]

p:not(:nth-of-type(-0n+2)) 43 === 43 //p[not(count(preceding-sibling::p) = 1)]

p:not(:nth-of-type(-0n+3)) 43 === 43 //p[not(count(preceding-sibling::p) = 2)]

p:not(:nth-of-type(-0n+4)) 44 === 44 //p[not(count(preceding-sibling::p) = 3)]

p:not(:nth-of-type(-0n+5)) 44 === 44 //p[not(count(preceding-sibling::p) = 4)]

p:not(:nth-of-type(-1n+1)) 43 === 43 //p[not(count(preceding-sibling::p) <= 0)]

p:not(:nth-of-type(-1n+2)) 38 === 38 //p[not(count(preceding-sibling::p) <= 1)]

p:not(:nth-of-type(-1n+3)) 33 === 33 //p[not(count(preceding-sibling::p) <= 2)]

p:not(:nth-of-type(-1n+4)) 29 === 29 //p[not(count(preceding-sibling::p) <= 3)]

p:not(:nth-of-type(-1n+5)) 25 === 25 //p[not(count(preceding-sibling::p) <= 4)]

p:not(:nth-of-type(-2n+1)) 43 === 43 //p[not(count(preceding-sibling::p) <= 0 and (count(preceding-sibling::p)) mod 2 = 0)]

p:not(:nth-of-type(-2n+2)) 43 === 43 //p[not(count(preceding-sibling::p) <= 1 and (count(preceding-sibling::p) - 1) mod 2 = 0)]

p:not(:nth-of-type(-2n+3)) 38 === 38 //p[not(count(preceding-sibling::p) <= 2 and (count(preceding-sibling::p) - 2) mod 2 = 0)]

p:not(:nth-of-type(-2n+4)) 39 === 39 //p[not(count(preceding-sibling::p) <= 3 and (count(preceding-sibling::p) - 3) mod 2 = 0)]

p:not(:nth-of-type(-2n+5)) 34 === 34 //p[not(count(preceding-sibling::p) <= 4 and (count(preceding-sibling::p) - 4) mod 2 = 0)]

p:not(:nth-of-type(-3n+1)) 43 === 43 //p[not(count(preceding-sibling::p) <= 0 and (count(preceding-sibling::p)) mod 3 = 0)]

p:not(:nth-of-type(-3n+2)) 43 === 43 //p[not(count(preceding-sibling::p) <= 1 and (count(preceding-sibling::p) - 1) mod 3 = 0)]

p:not(:nth-of-type(-3n+3)) 43 === 43 //p[not(count(preceding-sibling::p) <= 2 and (count(preceding-sibling::p) - 2) mod 3 = 0)]

p:not(:nth-of-type(-3n+4)) 39 === 39 //p[not(count(preceding-sibling::p) <= 3 and (count(preceding-sibling::p) - 3) mod 3 = 0)]

p:not(:nth-of-type(-3n+5)) 39 === 39 //p[not(count(preceding-sibling::p) <= 4 and (count(preceding-sibling::p) - 4) mod 3 = 0)]

p:not(:nth-of-type(-4n+1)) 43 === 43 //p[not(count(preceding-sibling::p) <= 0 and (count(preceding-sibling::p)) mod 4 = 0)]

p:not(:nth-of-type(-4n+2)) 43 === 43 //p[not(count(preceding-sibling::p) <= 1 and (count(preceding-sibling::p) - 1) mod 4 = 0)]

p:not(:nth-of-type(-4n+3)) 43 === 43 //p[not(count(preceding-sibling::p) <= 2 and (count(preceding-sibling::p) - 2) mod 4 = 0)]

p:not(:nth-of-type(-4n+4)) 44 === 44 //p[not(count(preceding-sibling::p) <= 3 and (count(preceding-sibling::p) - 3) mod 4 = 0)]

p:not(:nth-of-type(-4n+5)) 39 === 39 //p[not(count(preceding-sibling::p) <= 4 and (count(preceding-sibling::p) - 4) mod 4 = 0)]

p:not(:nth-of-type(-5n+1)) 43 === 43 //p[not(count(preceding-sibling::p) <= 0 and (count(preceding-sibling::p)) mod 5 = 0)]

p:not(:nth-of-type(-5n+2)) 43 === 43 //p[not(count(preceding-sibling::p) <= 1 and (count(preceding-sibling::p) - 1) mod 5 = 0)]

p:not(:nth-of-type(-5n+3)) 43 === 43 //p[not(count(preceding-sibling::p) <= 2 and (count(preceding-sibling::p) - 2) mod 5 = 0)]

p:not(:nth-of-type(-5n+4)) 44 === 44 //p[not(count(preceding-sibling::p) <= 3 and (count(preceding-sibling::p) - 3) mod 5 = 0)]

p:not(:nth-of-type(-5n+5)) 44 === 44 //p[not(count(preceding-sibling::p) <= 4 and (count(preceding-sibling::p) - 4) mod 5 = 0)]

Have no matches: 18

p:not(:nth-of-type(n)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(1n)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(n+0)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(n-0)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(n+1)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(n-1)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(n-2)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(n-3)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(n-4)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(n-5)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(1n+0)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(1n-0)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(1n+1)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(1n-1)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(1n-2)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(1n-3)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(1n-4)) - 0 - //p[not(self::node())]

p:not(:nth-of-type(1n-5)) - 0 - //p[not(self::node())]

nth-child.json

Results:

Passed: 125

Passed: 125

p:nth-child(1) 5 === 5 //*[position() = 1]/self::p

p:nth-child(2) 4 === 4 //*[position() = 2]/self::p

p:nth-child(3) 5 === 5 //*[position() = 3]/self::p

p:nth-child(4) 5 === 5 //*[position() = 4]/self::p

p:nth-child(5) 4 === 4 //*[position() = 5]/self::p

p:nth-child(n) 52 === 52 //p

p:nth-child(1n) 52 === 52 //p

p:nth-child(2n) 25 === 25 //*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::p

p:nth-child(3n) 14 === 14 //*[(count(preceding-sibling::*) + 1) mod 3 = 0]/self::p

p:nth-child(4n) 13 === 13 //*[(count(preceding-sibling::*) + 1) mod 4 = 0]/self::p

p:nth-child(5n) 8 === 8 //*[(count(preceding-sibling::*) + 1) mod 5 = 0]/self::p

p:nth-child(odd) 27 === 27 //*[(count(preceding-sibling::*) + 1) mod 2 = 1]/self::p

p:nth-child(n+0) 52 === 52 //p

p:nth-child(n-0) 52 === 52 //p

p:nth-child(n+1) 52 === 52 //p

p:nth-child(n-1) 52 === 52 //p

p:nth-child(n+2) 47 === 47 //*[position() >= 2]/self::p

p:nth-child(n-2) 52 === 52 //p

p:nth-child(n+3) 43 === 43 //*[position() >= 3]/self::p

p:nth-child(n-3) 52 === 52 //p

p:nth-child(n+4) 38 === 38 //*[position() >= 4]/self::p

p:nth-child(n-4) 52 === 52 //p

p:nth-child(n+5) 33 === 33 //*[position() >= 5]/self::p

p:nth-child(n-5) 52 === 52 //p

p:nth-child(even) 25 === 25 //*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::p

p:nth-child(0n+1) 5 === 5 //*[position() = 1]/self::p

p:nth-child(0n+2) 4 === 4 //*[position() = 2]/self::p

p:nth-child(0n+3) 5 === 5 //*[position() = 3]/self::p

p:nth-child(0n+4) 5 === 5 //*[position() = 4]/self::p

p:nth-child(0n+5) 4 === 4 //*[position() = 5]/self::p

p:nth-child(1n+0) 52 === 52 //p

p:nth-child(1n-0) 52 === 52 //p

p:nth-child(1n+1) 52 === 52 //p

p:nth-child(1n-1) 52 === 52 //p

p:nth-child(1n+2) 47 === 47 //*[position() >= 2]/self::p

p:nth-child(1n-2) 52 === 52 //p

p:nth-child(1n+3) 43 === 43 //*[position() >= 3]/self::p

p:nth-child(1n-3) 52 === 52 //p

p:nth-child(1n+4) 38 === 38 //*[position() >= 4]/self::p

p:nth-child(1n-4) 52 === 52 //p

p:nth-child(1n+5) 33 === 33 //*[position() >= 5]/self::p

p:nth-child(1n-5) 52 === 52 //p

p:nth-child(2n+0) 25 === 25 //*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::p

p:nth-child(2n-0) 25 === 25 //*[(count(preceding-sibling::*) + 1) mod 2 = 0]/self::p

p:nth-child(2n+1) 27 === 27 //*[(count(preceding-sibling::*)) mod 2 = 0]/self::p

p:nth-child(2n-1) 27 === 27 //*[(count(preceding-sibling::*) + 2) mod 2 = 0]/self::p

p:nth-child(2n+2) 25 === 25 //*[position() >= 2 and (count(preceding-sibling::*) - 1) mod 2 = 0]/self::p

p:nth-child(2n-2) 25 === 25 //*[(count(preceding-sibling::*) + 3) mod 2 = 0]/self::p

p:nth-child(2n+3) 22 === 22 //*[position() >= 3 and (count(preceding-sibling::*) - 2) mod 2 = 0]/self::p

p:nth-child(2n-3) 27 === 27 //*[(count(preceding-sibling::*) + 4) mod 2 = 0]/self::p

p:nth-child(2n+4) 21 === 21 //*[position() >= 4 and (count(preceding-sibling::*) - 3) mod 2 = 0]/self::p

p:nth-child(2n-4) 25 === 25 //*[(count(preceding-sibling::*) + 5) mod 2 = 0]/self::p

p:nth-child(2n+5) 17 === 17 //*[position() >= 5 and (count(preceding-sibling::*) - 4) mod 2 = 0]/self::p

p:nth-child(2n-5) 27 === 27 //*[(count(preceding-sibling::*) + 6) mod 2 = 0]/self::p

p:nth-child(3n+0) 14 === 14 //*[(count(preceding-sibling::*) + 1) mod 3 = 0]/self::p

p:nth-child(3n-0) 14 === 14 //*[(count(preceding-sibling::*) + 1) mod 3 = 0]/self::p

p:nth-child(3n+1) 20 === 20 //*[(count(preceding-sibling::*)) mod 3 = 0]/self::p

p:nth-child(3n-1) 18 === 18 //*[(count(preceding-sibling::*) + 2) mod 3 = 0]/self::p

p:nth-child(3n+2) 18 === 18 //*[position() >= 2 and (count(preceding-sibling::*) - 1) mod 3 = 0]/self::p

p:nth-child(3n-2) 20 === 20 //*[(count(preceding-sibling::*) + 3) mod 3 = 0]/self::p

p:nth-child(3n+3) 14 === 14 //*[position() >= 3 and (count(preceding-sibling::*) - 2) mod 3 = 0]/self::p

p:nth-child(3n-3) 14 === 14 //*[(count(preceding-sibling::*) + 4) mod 3 = 0]/self::p

p:nth-child(3n+4) 15 === 15 //*[position() >= 4 and (count(preceding-sibling::*) - 3) mod 3 = 0]/self::p

p:nth-child(3n-4) 18 === 18 //*[(count(preceding-sibling::*) + 5) mod 3 = 0]/self::p

p:nth-child(3n+5) 14 === 14 //*[position() >= 5 and (count(preceding-sibling::*) - 4) mod 3 = 0]/self::p

p:nth-child(3n-5) 20 === 20 //*[(count(preceding-sibling::*) + 6) mod 3 = 0]/self::p

p:nth-child(4n+0) 13 === 13 //*[(count(preceding-sibling::*) + 1) mod 4 = 0]/self::p

p:nth-child(4n-0) 13 === 13 //*[(count(preceding-sibling::*) + 1) mod 4 = 0]/self::p

p:nth-child(4n+1) 14 === 14 //*[(count(preceding-sibling::*)) mod 4 = 0]/self::p

p:nth-child(4n-1) 13 === 13 //*[(count(preceding-sibling::*) + 2) mod 4 = 0]/self::p

p:nth-child(4n+2) 12 === 12 //*[position() >= 2 and (count(preceding-sibling::*) - 1) mod 4 = 0]/self::p

p:nth-child(4n-2) 12 === 12 //*[(count(preceding-sibling::*) + 3) mod 4 = 0]/self::p

p:nth-child(4n+3) 13 === 13 //*[position() >= 3 and (count(preceding-sibling::*) - 2) mod 4 = 0]/self::p

p:nth-child(4n-3) 14 === 14 //*[(count(preceding-sibling::*) + 4) mod 4 = 0]/self::p

p:nth-child(4n+4) 13 === 13 //*[position() >= 4 and (count(preceding-sibling::*) - 3) mod 4 = 0]/self::p

p:nth-child(4n-4) 13 === 13 //*[(count(preceding-sibling::*) + 5) mod 4 = 0]/self::p

p:nth-child(4n+5) 9 === 9 //*[position() >= 5 and (count(preceding-sibling::*) - 4) mod 4 = 0]/self::p

p:nth-child(4n-5) 13 === 13 //*[(count(preceding-sibling::*) + 6) mod 4 = 0]/self::p

p:nth-child(5n+0) 8 === 8 //*[(count(preceding-sibling::*) + 1) mod 5 = 0]/self::p

p:nth-child(5n-0) 8 === 8 //*[(count(preceding-sibling::*) + 1) mod 5 = 0]/self::p

p:nth-child(5n+1) 12 === 12 //*[(count(preceding-sibling::*)) mod 5 = 0]/self::p

p:nth-child(5n-1) 9 === 9 //*[(count(preceding-sibling::*) + 2) mod 5 = 0]/self::p

p:nth-child(5n+2) 12 === 12 //*[position() >= 2 and (count(preceding-sibling::*) - 1) mod 5 = 0]/self::p

p:nth-child(5n-2) 11 === 11 //*[(count(preceding-sibling::*) + 3) mod 5 = 0]/self::p

p:nth-child(5n+3) 11 === 11 //*[position() >= 3 and (count(preceding-sibling::*) - 2) mod 5 = 0]/self::p

p:nth-child(5n-3) 12 === 12 //*[(count(preceding-sibling::*) + 4) mod 5 = 0]/self::p

p:nth-child(5n+4) 9 === 9 //*[position() >= 4 and (count(preceding-sibling::*) - 3) mod 5 = 0]/self::p

p:nth-child(5n-4) 12 === 12 //*[(count(preceding-sibling::*) + 5) mod 5 = 0]/self::p

p:nth-child(5n+5) 8 === 8 //*[position() >= 5 and (count(preceding-sibling::*) - 4) mod 5 = 0]/self::p

p:nth-child(5n-5) 8 === 8 //*[(count(preceding-sibling::*) + 6) mod 5 = 0]/self::p

p:nth-child(-n+1) 5 === 5 //*[position() <= 1]/self::p

p:nth-child(-n+2) 9 === 9 //*[position() <= 2]/self::p

p:nth-child(-n+3) 14 === 14 //*[position() <= 3]/self::p

p:nth-child(-n+4) 19 === 19 //*[position() <= 4]/self::p

p:nth-child(-n+5) 23 === 23 //*[position() <= 5]/self::p

p:nth-child(-0n+1) 5 === 5 //*[position() = 1]/self::p

p:nth-child(-0n+2) 4 === 4 //*[position() = 2]/self::p

p:nth-child(-0n+3) 5 === 5 //*[position() = 3]/self::p

p:nth-child(-0n+4) 5 === 5 //*[position() = 4]/self::p

p:nth-child(-0n+5) 4 === 4 //*[position() = 5]/self::p

p:nth-child(-1n+1) 5 === 5 //*[position() <= 1]/self::p

p:nth-child(-1n+2) 9 === 9 //*[position() <= 2]/self::p

p:nth-child(-1n+3) 14 === 14 //*[position() <= 3]/self::p

p:nth-child(-1n+4) 19 === 19 //*[position() <= 4]/self::p

p:nth-child(-1n+5) 23 === 23 //*[position() <= 5]/self::p

p:nth-child(-2n+1) 5 === 5 //*[position() <= 1 and (count(preceding-sibling::*)) mod 2 = 0]/self::p

p:nth-child(-2n+2) 4 === 4 //*[position() <= 2 and (count(preceding-sibling::*) - 1) mod 2 = 0]/self::p

p:nth-child(-2n+3) 10 === 10 //*[position() <= 3 and (count(preceding-sibling::*) - 2) mod 2 = 0]/self::p

p:nth-child(-2n+4) 9 === 9 //*[position() <= 4 and (count(preceding-sibling::*) - 3) mod 2 = 0]/self::p

p:nth-child(-2n+5) 14 === 14 //*[position() <= 5 and (count(preceding-sibling::*) - 4) mod 2 = 0]/self::p

p:nth-child(-3n+1) 5 === 5 //*[position() <= 1 and (count(preceding-sibling::*)) mod 3 = 0]/self::p

p:nth-child(-3n+2) 4 === 4 //*[position() <= 2 and (count(preceding-sibling::*) - 1) mod 3 = 0]/self::p

p:nth-child(-3n+3) 5 === 5 //*[position() <= 3 and (count(preceding-sibling::*) - 2) mod 3 = 0]/self::p

p:nth-child(-3n+4) 10 === 10 //*[position() <= 4 and (count(preceding-sibling::*) - 3) mod 3 = 0]/self::p

p:nth-child(-3n+5) 8 === 8 //*[position() <= 5 and (count(preceding-sibling::*) - 4) mod 3 = 0]/self::p

p:nth-child(-4n+1) 5 === 5 //*[position() <= 1 and (count(preceding-sibling::*)) mod 4 = 0]/self::p

p:nth-child(-4n+2) 4 === 4 //*[position() <= 2 and (count(preceding-sibling::*) - 1) mod 4 = 0]/self::p

p:nth-child(-4n+3) 5 === 5 //*[position() <= 3 and (count(preceding-sibling::*) - 2) mod 4 = 0]/self::p

p:nth-child(-4n+4) 5 === 5 //*[position() <= 4 and (count(preceding-sibling::*) - 3) mod 4 = 0]/self::p

p:nth-child(-4n+5) 9 === 9 //*[position() <= 5 and (count(preceding-sibling::*) - 4) mod 4 = 0]/self::p

p:nth-child(-5n+1) 5 === 5 //*[position() <= 1 and (count(preceding-sibling::*)) mod 5 = 0]/self::p

p:nth-child(-5n+2) 4 === 4 //*[position() <= 2 and (count(preceding-sibling::*) - 1) mod 5 = 0]/self::p

p:nth-child(-5n+3) 5 === 5 //*[position() <= 3 and (count(preceding-sibling::*) - 2) mod 5 = 0]/self::p

p:nth-child(-5n+4) 5 === 5 //*[position() <= 4 and (count(preceding-sibling::*) - 3) mod 5 = 0]/self::p

p:nth-child(-5n+5) 4 === 4 //*[position() <= 5 and (count(preceding-sibling::*) - 4) mod 5 = 0]/self::p

nth-last-child.json

Results:

Passed: 125

Passed: 125

p:nth-last-child(1) 3 === 3 //p[count(following-sibling::*) = 0]

p:nth-last-child(2) 3 === 3 //p[count(following-sibling::*) = 1]

p:nth-last-child(3) 4 === 4 //p[count(following-sibling::*) = 2]

p:nth-last-child(4) 4 === 4 //p[count(following-sibling::*) = 3]

p:nth-last-child(5) 4 === 4 //p[count(following-sibling::*) = 4]

p:nth-last-child(n) 52 === 52 //p

p:nth-last-child(1n) 52 === 52 //p

p:nth-last-child(2n) 25 === 25 //p[(count(following-sibling::*) + 1) mod 2 = 0]

p:nth-last-child(3n) 18 === 18 //p[(count(following-sibling::*) + 1) mod 3 = 0]

p:nth-last-child(4n) 12 === 12 //p[(count(following-sibling::*) + 1) mod 4 = 0]

p:nth-last-child(5n) 9 === 9 //p[(count(following-sibling::*) + 1) mod 5 = 0]

p:nth-last-child(odd) 27 === 27 //p[(count(following-sibling::*) + 1) mod 2 = 1]

p:nth-last-child(n+0) 52 === 52 //p

p:nth-last-child(n-0) 52 === 52 //p

p:nth-last-child(n+1) 52 === 52 //p

p:nth-last-child(n-1) 52 === 52 //p

p:nth-last-child(n+2) 49 === 49 //p[count(following-sibling::*) >= 1]

p:nth-last-child(n-2) 52 === 52 //p

p:nth-last-child(n+3) 46 === 46 //p[count(following-sibling::*) >= 2]

p:nth-last-child(n-3) 52 === 52 //p

p:nth-last-child(n+4) 42 === 42 //p[count(following-sibling::*) >= 3]

p:nth-last-child(n-4) 52 === 52 //p

p:nth-last-child(n+5) 38 === 38 //p[count(following-sibling::*) >= 4]

p:nth-last-child(n-5) 52 === 52 //p

p:nth-last-child(even) 25 === 25 //p[(count(following-sibling::*) + 1) mod 2 = 0]

p:nth-last-child(0n+1) 3 === 3 //p[count(following-sibling::*) = 0]

p:nth-last-child(0n+2) 3 === 3 //p[count(following-sibling::*) = 1]

p:nth-last-child(0n+3) 4 === 4 //p[count(following-sibling::*) = 2]

p:nth-last-child(0n+4) 4 === 4 //p[count(following-sibling::*) = 3]

p:nth-last-child(0n+5) 4 === 4 //p[count(following-sibling::*) = 4]

p:nth-last-child(1n+0) 52 === 52 //p

p:nth-last-child(1n-0) 52 === 52 //p

p:nth-last-child(1n+1) 52 === 52 //p

p:nth-last-child(1n-1) 52 === 52 //p

p:nth-last-child(1n+2) 49 === 49 //p[count(following-sibling::*) >= 1]

p:nth-last-child(1n-2) 52 === 52 //p

p:nth-last-child(1n+3) 46 === 46 //p[count(following-sibling::*) >= 2]

p:nth-last-child(1n-3) 52 === 52 //p

p:nth-last-child(1n+4) 42 === 42 //p[count(following-sibling::*) >= 3]

p:nth-last-child(1n-4) 52 === 52 //p

p:nth-last-child(1n+5) 38 === 38 //p[count(following-sibling::*) >= 4]

p:nth-last-child(1n-5) 52 === 52 //p

p:nth-last-child(2n+0) 25 === 25 //p[(count(following-sibling::*) + 1) mod 2 = 0]

p:nth-last-child(2n-0) 25 === 25 //p[(count(following-sibling::*) + 1) mod 2 = 0]

p:nth-last-child(2n+1) 27 === 27 //p[(count(following-sibling::*)) mod 2 = 0]

p:nth-last-child(2n-1) 27 === 27 //p[(count(following-sibling::*) + 2) mod 2 = 0]

p:nth-last-child(2n+2) 25 === 25 //p[count(following-sibling::*) >= 1 and (count(following-sibling::*) - 1) mod 2 = 0]

p:nth-last-child(2n-2) 25 === 25 //p[(count(following-sibling::*) + 3) mod 2 = 0]

p:nth-last-child(2n+3) 24 === 24 //p[count(following-sibling::*) >= 2 and (count(following-sibling::*) - 2) mod 2 = 0]

p:nth-last-child(2n-3) 27 === 27 //p[(count(following-sibling::*) + 4) mod 2 = 0]

p:nth-last-child(2n+4) 22 === 22 //p[count(following-sibling::*) >= 3 and (count(following-sibling::*) - 3) mod 2 = 0]

p:nth-last-child(2n-4) 25 === 25 //p[(count(following-sibling::*) + 5) mod 2 = 0]

p:nth-last-child(2n+5) 20 === 20 //p[count(following-sibling::*) >= 4 and (count(following-sibling::*) - 4) mod 2 = 0]

p:nth-last-child(2n-5) 27 === 27 //p[(count(following-sibling::*) + 6) mod 2 = 0]

p:nth-last-child(3n+0) 18 === 18 //p[(count(following-sibling::*) + 1) mod 3 = 0]

p:nth-last-child(3n-0) 18 === 18 //p[(count(following-sibling::*) + 1) mod 3 = 0]

p:nth-last-child(3n+1) 18 === 18 //p[(count(following-sibling::*)) mod 3 = 0]

p:nth-last-child(3n-1) 16 === 16 //p[(count(following-sibling::*) + 2) mod 3 = 0]

p:nth-last-child(3n+2) 16 === 16 //p[count(following-sibling::*) >= 1 and (count(following-sibling::*) - 1) mod 3 = 0]

p:nth-last-child(3n-2) 18 === 18 //p[(count(following-sibling::*) + 3) mod 3 = 0]

p:nth-last-child(3n+3) 18 === 18 //p[count(following-sibling::*) >= 2 and (count(following-sibling::*) - 2) mod 3 = 0]

p:nth-last-child(3n-3) 18 === 18 //p[(count(following-sibling::*) + 4) mod 3 = 0]

p:nth-last-child(3n+4) 15 === 15 //p[count(following-sibling::*) >= 3 and (count(following-sibling::*) - 3) mod 3 = 0]

p:nth-last-child(3n-4) 16 === 16 //p[(count(following-sibling::*) + 5) mod 3 = 0]

p:nth-last-child(3n+5) 13 === 13 //p[count(following-sibling::*) >= 4 and (count(following-sibling::*) - 4) mod 3 = 0]

p:nth-last-child(3n-5) 18 === 18 //p[(count(following-sibling::*) + 6) mod 3 = 0]

p:nth-last-child(4n+0) 12 === 12 //p[(count(following-sibling::*) + 1) mod 4 = 0]

p:nth-last-child(4n-0) 12 === 12 //p[(count(following-sibling::*) + 1) mod 4 = 0]

p:nth-last-child(4n+1) 14 === 14 //p[(count(following-sibling::*)) mod 4 = 0]

p:nth-last-child(4n-1) 13 === 13 //p[(count(following-sibling::*) + 2) mod 4 = 0]

p:nth-last-child(4n+2) 13 === 13 //p[count(following-sibling::*) >= 1 and (count(following-sibling::*) - 1) mod 4 = 0]

p:nth-last-child(4n-2) 13 === 13 //p[(count(following-sibling::*) + 3) mod 4 = 0]

p:nth-last-child(4n+3) 13 === 13 //p[count(following-sibling::*) >= 2 and (count(following-sibling::*) - 2) mod 4 = 0]

p:nth-last-child(4n-3) 14 === 14 //p[(count(following-sibling::*) + 4) mod 4 = 0]

p:nth-last-child(4n+4) 12 === 12 //p[count(following-sibling::*) >= 3 and (count(following-sibling::*) - 3) mod 4 = 0]

p:nth-last-child(4n-4) 12 === 12 //p[(count(following-sibling::*) + 5) mod 4 = 0]

p:nth-last-child(4n+5) 11 === 11 //p[count(following-sibling::*) >= 4 and (count(following-sibling::*) - 4) mod 4 = 0]

p:nth-last-child(4n-5) 13 === 13 //p[(count(following-sibling::*) + 6) mod 4 = 0]

p:nth-last-child(5n+0) 9 === 9 //p[(count(following-sibling::*) + 1) mod 5 = 0]

p:nth-last-child(5n-0) 9 === 9 //p[(count(following-sibling::*) + 1) mod 5 = 0]

p:nth-last-child(5n+1) 10 === 10 //p[(count(following-sibling::*)) mod 5 = 0]

p:nth-last-child(5n-1) 11 === 11 //p[(count(following-sibling::*) + 2) mod 5 = 0]

p:nth-last-child(5n+2) 11 === 11 //p[count(following-sibling::*) >= 1 and (count(following-sibling::*) - 1) mod 5 = 0]

p:nth-last-child(5n-2) 11 === 11 //p[(count(following-sibling::*) + 3) mod 5 = 0]

p:nth-last-child(5n+3) 11 === 11 //p[count(following-sibling::*) >= 2 and (count(following-sibling::*) - 2) mod 5 = 0]

p:nth-last-child(5n-3) 11 === 11 //p[(count(following-sibling::*) + 4) mod 5 = 0]

p:nth-last-child(5n+4) 11 === 11 //p[count(following-sibling::*) >= 3 and (count(following-sibling::*) - 3) mod 5 = 0]

p:nth-last-child(5n-4) 10 === 10 //p[(count(following-sibling::*) + 5) mod 5 = 0]

p:nth-last-child(5n+5) 9 === 9 //p[count(following-sibling::*) >= 4 and (count(following-sibling::*) - 4) mod 5 = 0]

p:nth-last-child(5n-5) 9 === 9 //p[(count(following-sibling::*) + 6) mod 5 = 0]

p:nth-last-child(-n+1) 3 === 3 //p[count(following-sibling::*) <= 0]

p:nth-last-child(-n+2) 6 === 6 //p[count(following-sibling::*) <= 1]

p:nth-last-child(-n+3) 10 === 10 //p[count(following-sibling::*) <= 2]

p:nth-last-child(-n+4) 14 === 14 //p[count(following-sibling::*) <= 3]

p:nth-last-child(-n+5) 18 === 18 //p[count(following-sibling::*) <= 4]

p:nth-last-child(-0n+1) 3 === 3 //p[count(following-sibling::*) < 1]

p:nth-last-child(-0n+2) 3 === 3 //p[count(following-sibling::*) = 1]

p:nth-last-child(-0n+3) 4 === 4 //p[count(following-sibling::*) = 2]

p:nth-last-child(-0n+4) 4 === 4 //p[count(following-sibling::*) = 3]

p:nth-last-child(-0n+5) 4 === 4 //p[count(following-sibling::*) = 4]

p:nth-last-child(-1n+1) 3 === 3 //p[count(following-sibling::*) <= 0]

p:nth-last-child(-1n+2) 6 === 6 //p[count(following-sibling::*) < 2]

p:nth-last-child(-1n+3) 10 === 10 //p[count(following-sibling::*) < 3]

p:nth-last-child(-1n+4) 14 === 14 //p[count(following-sibling::*) < 4]

p:nth-last-child(-1n+5) 18 === 18 //p[count(following-sibling::*) < 5]

p:nth-last-child(-2n+1) 3 === 3 //p[count(following-sibling::*) <= 0 and (count(following-sibling::*)) mod 2 = 0]

p:nth-last-child(-2n+2) 3 === 3 //p[count(following-sibling::*) <= 1 and (count(following-sibling::*) - 1) mod 2 = 0]

p:nth-last-child(-2n+3) 7 === 7 //p[count(following-sibling::*) < 3 and (count(following-sibling::*) - 2) mod 2 = 0]

p:nth-last-child(-2n+4) 7 === 7 //p[count(following-sibling::*) < 4 and (count(following-sibling::*) - 3) mod 2 = 0]

p:nth-last-child(-2n+5) 11 === 11 //p[count(following-sibling::*) < 5 and (count(following-sibling::*) - 4) mod 2 = 0]

p:nth-last-child(-3n+1) 3 === 3 //p[count(following-sibling::*) <= 0 and (count(following-sibling::*)) mod 3 = 0]

p:nth-last-child(-3n+2) 3 === 3 //p[count(following-sibling::*) <= 1 and (count(following-sibling::*) - 1) mod 3 = 0]

p:nth-last-child(-3n+3) 4 === 4 //p[count(following-sibling::*) <= 2 and (count(following-sibling::*) - 2) mod 3 = 0]

p:nth-last-child(-3n+4) 7 === 7 //p[count(following-sibling::*) < 4 and (count(following-sibling::*) - 3) mod 3 = 0]

p:nth-last-child(-3n+5) 7 === 7 //p[count(following-sibling::*) < 5 and (count(following-sibling::*) - 4) mod 3 = 0]

p:nth-last-child(-4n+1) 3 === 3 //p[count(following-sibling::*) <= 0 and (count(following-sibling::*)) mod 4 = 0]

p:nth-last-child(-4n+2) 3 === 3 //p[count(following-sibling::*) <= 1 and (count(following-sibling::*) - 1) mod 4 = 0]

p:nth-last-child(-4n+3) 4 === 4 //p[count(following-sibling::*) <= 2 and (count(following-sibling::*) - 2) mod 4 = 0]

p:nth-last-child(-4n+4) 4 === 4 //p[count(following-sibling::*) <= 3 and (count(following-sibling::*) - 3) mod 4 = 0]

p:nth-last-child(-4n+5) 7 === 7 //p[count(following-sibling::*) < 5 and (count(following-sibling::*) - 4) mod 4 = 0]

p:nth-last-child(-5n+1) 3 === 3 //p[count(following-sibling::*) <= 0 and (count(following-sibling::*)) mod 5 = 0]

p:nth-last-child(-5n+2) 3 === 3 //p[count(following-sibling::*) <= 1 and (count(following-sibling::*) - 1) mod 5 = 0]

p:nth-last-child(-5n+3) 4 === 4 //p[count(following-sibling::*) <= 2 and (count(following-sibling::*) - 2) mod 5 = 0]

p:nth-last-child(-5n+4) 4 === 4 //p[count(following-sibling::*) <= 3 and (count(following-sibling::*) - 3) mod 5 = 0]

p:nth-last-child(-5n+5) 4 === 4 //p[count(following-sibling::*) <= 4 and (count(following-sibling::*) - 4) mod 5 = 0]

nth-last-of-type.json

Results:

Passed: 125

Passed: 125

p:nth-last-of-type(1) 5 === 5 //p[count(following-sibling::p) = 0]

p:nth-last-of-type(2) 5 === 5 //p[count(following-sibling::p) = 1]

p:nth-last-of-type(3) 5 === 5 //p[count(following-sibling::p) = 2]

p:nth-last-of-type(4) 4 === 4 //p[count(following-sibling::p) = 3]

p:nth-last-of-type(5) 4 === 4 //p[count(following-sibling::p) = 4]

p:nth-last-of-type(n) 52 === 52 //p

p:nth-last-of-type(1n) 52 === 52 //p

p:nth-last-of-type(2n) 24 === 24 //p[(count(following-sibling::p) + 1) mod 2 = 0]

p:nth-last-of-type(3n) 17 === 17 //p[(count(following-sibling::p) + 1) mod 3 = 0]

p:nth-last-of-type(4n) 10 === 10 //p[(count(following-sibling::p) + 1) mod 4 = 0]

p:nth-last-of-type(5n) 9 === 9 //p[(count(following-sibling::p) + 1) mod 5 = 0]

p:nth-last-of-type(odd) 28 === 28 //p[(count(following-sibling::p) + 1) mod 2 = 1]

p:nth-last-of-type(n+0) 52 === 52 //p

p:nth-last-of-type(n-0) 52 === 52 //p

p:nth-last-of-type(n+1) 52 === 52 //p

p:nth-last-of-type(n-1) 52 === 52 //p

p:nth-last-of-type(n+2) 47 === 47 //p[count(following-sibling::p) >= 1]

p:nth-last-of-type(n-2) 52 === 52 //p

p:nth-last-of-type(n+3) 42 === 42 //p[count(following-sibling::p) >= 2]

p:nth-last-of-type(n-3) 52 === 52 //p

p:nth-last-of-type(n+4) 37 === 37 //p[count(following-sibling::p) >= 3]

p:nth-last-of-type(n-4) 52 === 52 //p

p:nth-last-of-type(n+5) 33 === 33 //p[count(following-sibling::p) >= 4]

p:nth-last-of-type(n-5) 52 === 52 //p

p:nth-last-of-type(even) 24 === 24 //p[(count(following-sibling::p) + 1) mod 2 = 0]

p:nth-last-of-type(0n+1) 5 === 5 //p[count(following-sibling::p) = 0]

p:nth-last-of-type(0n+2) 5 === 5 //p[count(following-sibling::p) = 1]

p:nth-last-of-type(0n+3) 5 === 5 //p[count(following-sibling::p) = 2]

p:nth-last-of-type(0n+4) 4 === 4 //p[count(following-sibling::p) = 3]

p:nth-last-of-type(0n+5) 4 === 4 //p[count(following-sibling::p) = 4]

p:nth-last-of-type(1n+0) 52 === 52 //p

p:nth-last-of-type(1n-0) 52 === 52 //p

p:nth-last-of-type(1n+1) 52 === 52 //p

p:nth-last-of-type(1n-1) 52 === 52 //p

p:nth-last-of-type(1n+2) 47 === 47 //p[count(following-sibling::p) >= 1]

p:nth-last-of-type(1n-2) 52 === 52 //p

p:nth-last-of-type(1n+3) 42 === 42 //p[count(following-sibling::p) >= 2]

p:nth-last-of-type(1n-3) 52 === 52 //p

p:nth-last-of-type(1n+4) 37 === 37 //p[count(following-sibling::p) >= 3]

p:nth-last-of-type(1n-4) 52 === 52 //p

p:nth-last-of-type(1n+5) 33 === 33 //p[count(following-sibling::p) >= 4]

p:nth-last-of-type(1n-5) 52 === 52 //p

p:nth-last-of-type(2n+0) 24 === 24 //p[(count(following-sibling::p) + 1) mod 2 = 0]

p:nth-last-of-type(2n-0) 24 === 24 //p[(count(following-sibling::p) + 1) mod 2 = 0]

p:nth-last-of-type(2n+1) 28 === 28 //p[(count(following-sibling::p)) mod 2 = 0]

p:nth-last-of-type(2n-1) 28 === 28 //p[(count(following-sibling::p) + 2) mod 2 = 0]

p:nth-last-of-type(2n+2) 24 === 24 //p[count(following-sibling::p) >= 1 and (count(following-sibling::p) - 1) mod 2 = 0]

p:nth-last-of-type(2n-2) 24 === 24 //p[(count(following-sibling::p) + 3) mod 2 = 0]

p:nth-last-of-type(2n+3) 23 === 23 //p[count(following-sibling::p) >= 2 and (count(following-sibling::p) - 2) mod 2 = 0]

p:nth-last-of-type(2n-3) 28 === 28 //p[(count(following-sibling::p) + 4) mod 2 = 0]

p:nth-last-of-type(2n+4) 19 === 19 //p[count(following-sibling::p) >= 3 and (count(following-sibling::p) - 3) mod 2 = 0]

p:nth-last-of-type(2n-4) 24 === 24 //p[(count(following-sibling::p) + 5) mod 2 = 0]

p:nth-last-of-type(2n+5) 18 === 18 //p[count(following-sibling::p) >= 4 and (count(following-sibling::p) - 4) mod 2 = 0]

p:nth-last-of-type(2n-5) 28 === 28 //p[(count(following-sibling::p) + 6) mod 2 = 0]

p:nth-last-of-type(3n+0) 17 === 17 //p[(count(following-sibling::p) + 1) mod 3 = 0]

p:nth-last-of-type(3n-0) 17 === 17 //p[(count(following-sibling::p) + 1) mod 3 = 0]

p:nth-last-of-type(3n+1) 18 === 18 //p[(count(following-sibling::p)) mod 3 = 0]

p:nth-last-of-type(3n-1) 17 === 17 //p[(count(following-sibling::p) + 2) mod 3 = 0]

p:nth-last-of-type(3n+2) 17 === 17 //p[count(following-sibling::p) >= 1 and (count(following-sibling::p) - 1) mod 3 = 0]

p:nth-last-of-type(3n-2) 18 === 18 //p[(count(following-sibling::p) + 3) mod 3 = 0]

p:nth-last-of-type(3n+3) 17 === 17 //p[count(following-sibling::p) >= 2 and (count(following-sibling::p) - 2) mod 3 = 0]

p:nth-last-of-type(3n-3) 17 === 17 //p[(count(following-sibling::p) + 4) mod 3 = 0]

p:nth-last-of-type(3n+4) 13 === 13 //p[count(following-sibling::p) >= 3 and (count(following-sibling::p) - 3) mod 3 = 0]

p:nth-last-of-type(3n-4) 17 === 17 //p[(count(following-sibling::p) + 5) mod 3 = 0]

p:nth-last-of-type(3n+5) 12 === 12 //p[count(following-sibling::p) >= 4 and (count(following-sibling::p) - 4) mod 3 = 0]

p:nth-last-of-type(3n-5) 18 === 18 //p[(count(following-sibling::p) + 6) mod 3 = 0]

p:nth-last-of-type(4n+0) 10 === 10 //p[(count(following-sibling::p) + 1) mod 4 = 0]

p:nth-last-of-type(4n-0) 10 === 10 //p[(count(following-sibling::p) + 1) mod 4 = 0]

p:nth-last-of-type(4n+1) 15 === 15 //p[(count(following-sibling::p)) mod 4 = 0]

p:nth-last-of-type(4n-1) 13 === 13 //p[(count(following-sibling::p) + 2) mod 4 = 0]

p:nth-last-of-type(4n+2) 14 === 14 //p[count(following-sibling::p) >= 1 and (count(following-sibling::p) - 1) mod 4 = 0]

p:nth-last-of-type(4n-2) 14 === 14 //p[(count(following-sibling::p) + 3) mod 4 = 0]

p:nth-last-of-type(4n+3) 13 === 13 //p[count(following-sibling::p) >= 2 and (count(following-sibling::p) - 2) mod 4 = 0]

p:nth-last-of-type(4n-3) 15 === 15 //p[(count(following-sibling::p) + 4) mod 4 = 0]

p:nth-last-of-type(4n+4) 10 === 10 //p[count(following-sibling::p) >= 3 and (count(following-sibling::p) - 3) mod 4 = 0]

p:nth-last-of-type(4n-4) 10 === 10 //p[(count(following-sibling::p) + 5) mod 4 = 0]

p:nth-last-of-type(4n+5) 10 === 10 //p[count(following-sibling::p) >= 4 and (count(following-sibling::p) - 4) mod 4 = 0]

p:nth-last-of-type(4n-5) 13 === 13 //p[(count(following-sibling::p) + 6) mod 4 = 0]

p:nth-last-of-type(5n+0) 9 === 9 //p[(count(following-sibling::p) + 1) mod 5 = 0]

p:nth-last-of-type(5n-0) 9 === 9 //p[(count(following-sibling::p) + 1) mod 5 = 0]

p:nth-last-of-type(5n+1) 11 === 11 //p[(count(following-sibling::p)) mod 5 = 0]

p:nth-last-of-type(5n-1) 10 === 10 //p[(count(following-sibling::p) + 2) mod 5 = 0]

p:nth-last-of-type(5n+2) 11 === 11 //p[count(following-sibling::p) >= 1 and (count(following-sibling::p) - 1) mod 5 = 0]

p:nth-last-of-type(5n-2) 11 === 11 //p[(count(following-sibling::p) + 3) mod 5 = 0]

p:nth-last-of-type(5n+3) 11 === 11 //p[count(following-sibling::p) >= 2 and (count(following-sibling::p) - 2) mod 5 = 0]

p:nth-last-of-type(5n-3) 11 === 11 //p[(count(following-sibling::p) + 4) mod 5 = 0]

p:nth-last-of-type(5n+4) 10 === 10 //p[count(following-sibling::p) >= 3 and (count(following-sibling::p) - 3) mod 5 = 0]

p:nth-last-of-type(5n-4) 11 === 11 //p[(count(following-sibling::p) + 5) mod 5 = 0]

p:nth-last-of-type(5n+5) 9 === 9 //p[count(following-sibling::p) >= 4 and (count(following-sibling::p) - 4) mod 5 = 0]

p:nth-last-of-type(5n-5) 9 === 9 //p[(count(following-sibling::p) + 6) mod 5 = 0]

p:nth-last-of-type(-n+1) 5 === 5 //p[count(following-sibling::p) <= 0]

p:nth-last-of-type(-n+2) 10 === 10 //p[count(following-sibling::p) <= 1]

p:nth-last-of-type(-n+3) 15 === 15 //p[count(following-sibling::p) <= 2]

p:nth-last-of-type(-n+4) 19 === 19 //p[count(following-sibling::p) <= 3]

p:nth-last-of-type(-n+5) 23 === 23 //p[count(following-sibling::p) <= 4]

p:nth-last-of-type(-0n+1) 5 === 5 //p[count(following-sibling::p) < 1]

p:nth-last-of-type(-0n+2) 5 === 5 //p[count(following-sibling::p) = 1]

p:nth-last-of-type(-0n+3) 5 === 5 //p[count(following-sibling::p) = 2]

p:nth-last-of-type(-0n+4) 4 === 4 //p[count(following-sibling::p) = 3]

p:nth-last-of-type(-0n+5) 4 === 4 //p[count(following-sibling::p) = 4]

p:nth-last-of-type(-1n+1) 5 === 5 //p[count(following-sibling::p) <= 0]

p:nth-last-of-type(-1n+2) 10 === 10 //p[count(following-sibling::p) < 2]

p:nth-last-of-type(-1n+3) 15 === 15 //p[count(following-sibling::p) < 3]

p:nth-last-of-type(-1n+4) 19 === 19 //p[count(following-sibling::p) < 4]

p:nth-last-of-type(-1n+5) 23 === 23 //p[count(following-sibling::p) < 5]

p:nth-last-of-type(-2n+1) 5 === 5 //p[count(following-sibling::p) <= 0 and (count(following-sibling::p)) mod 2 = 0]

p:nth-last-of-type(-2n+2) 5 === 5 //p[count(following-sibling::p) <= 1 and (count(following-sibling::p) - 1) mod 2 = 0]

p:nth-last-of-type(-2n+3) 10 === 10 //p[count(following-sibling::p) < 3 and (count(following-sibling::p) - 2) mod 2 = 0]

p:nth-last-of-type(-2n+4) 9 === 9 //p[count(following-sibling::p) < 4 and (count(following-sibling::p) - 3) mod 2 = 0]

p:nth-last-of-type(-2n+5) 14 === 14 //p[count(following-sibling::p) < 5 and (count(following-sibling::p) - 4) mod 2 = 0]

p:nth-last-of-type(-3n+1) 5 === 5 //p[count(following-sibling::p) <= 0 and (count(following-sibling::p)) mod 3 = 0]

p:nth-last-of-type(-3n+2) 5 === 5 //p[count(following-sibling::p) <= 1 and (count(following-sibling::p) - 1) mod 3 = 0]

p:nth-last-of-type(-3n+3) 5 === 5 //p[count(following-sibling::p) <= 2 and (count(following-sibling::p) - 2) mod 3 = 0]

p:nth-last-of-type(-3n+4) 9 === 9 //p[count(following-sibling::p) < 4 and (count(following-sibling::p) - 3) mod 3 = 0]

p:nth-last-of-type(-3n+5) 9 === 9 //p[count(following-sibling::p) < 5 and (count(following-sibling::p) - 4) mod 3 = 0]

p:nth-last-of-type(-4n+1) 5 === 5 //p[count(following-sibling::p) <= 0 and (count(following-sibling::p)) mod 4 = 0]

p:nth-last-of-type(-4n+2) 5 === 5 //p[count(following-sibling::p) <= 1 and (count(following-sibling::p) - 1) mod 4 = 0]

p:nth-last-of-type(-4n+3) 5 === 5 //p[count(following-sibling::p) <= 2 and (count(following-sibling::p) - 2) mod 4 = 0]

p:nth-last-of-type(-4n+4) 4 === 4 //p[count(following-sibling::p) <= 3 and (count(following-sibling::p) - 3) mod 4 = 0]

p:nth-last-of-type(-4n+5) 9 === 9 //p[count(following-sibling::p) < 5 and (count(following-sibling::p) - 4) mod 4 = 0]

p:nth-last-of-type(-5n+1) 5 === 5 //p[count(following-sibling::p) <= 0 and (count(following-sibling::p)) mod 5 = 0]

p:nth-last-of-type(-5n+2) 5 === 5 //p[count(following-sibling::p) <= 1 and (count(following-sibling::p) - 1) mod 5 = 0]

p:nth-last-of-type(-5n+3) 5 === 5 //p[count(following-sibling::p) <= 2 and (count(following-sibling::p) - 2) mod 5 = 0]

p:nth-last-of-type(-5n+4) 4 === 4 //p[count(following-sibling::p) <= 3 and (count(following-sibling::p) - 3) mod 5 = 0]

p:nth-last-of-type(-5n+5) 4 === 4 //p[count(following-sibling::p) <= 4 and (count(following-sibling::p) - 4) mod 5 = 0]

nth-of-type.json

Results:

Passed: 125

Passed: 125

p:nth-of-type(1) 5 === 5 //p[count(preceding-sibling::p) = 0]

p:nth-of-type(2) 5 === 5 //p[count(preceding-sibling::p) = 1]

p:nth-of-type(3) 5 === 5 //p[count(preceding-sibling::p) = 2]

p:nth-of-type(4) 4 === 4 //p[count(preceding-sibling::p) = 3]

p:nth-of-type(5) 4 === 4 //p[count(preceding-sibling::p) = 4]

p:nth-of-type(n) 52 === 52 //p

p:nth-of-type(1n) 52 === 52 //p

p:nth-of-type(2n) 24 === 24 //p[(count(preceding-sibling::p) + 1) mod 2 = 0]

p:nth-of-type(3n) 17 === 17 //p[(count(preceding-sibling::p) + 1) mod 3 = 0]

p:nth-of-type(4n) 10 === 10 //p[(count(preceding-sibling::p) + 1) mod 4 = 0]

p:nth-of-type(5n) 9 === 9 //p[(count(preceding-sibling::p) + 1) mod 5 = 0]

p:nth-of-type(odd) 28 === 28 //p[(count(preceding-sibling::p) + 1) mod 2 = 1]

p:nth-of-type(n+0) 52 === 52 //p

p:nth-of-type(n-0) 52 === 52 //p

p:nth-of-type(n+1) 52 === 52 //p

p:nth-of-type(n-1) 52 === 52 //p

p:nth-of-type(n+2) 47 === 47 //p[count(preceding-sibling::p) >= 1]

p:nth-of-type(n-2) 52 === 52 //p

p:nth-of-type(n+3) 42 === 42 //p[count(preceding-sibling::p) >= 2]

p:nth-of-type(n-3) 52 === 52 //p

p:nth-of-type(n+4) 37 === 37 //p[count(preceding-sibling::p) >= 3]

p:nth-of-type(n-4) 52 === 52 //p

p:nth-of-type(n+5) 33 === 33 //p[count(preceding-sibling::p) >= 4]

p:nth-of-type(n-5) 52 === 52 //p

p:nth-of-type(even) 24 === 24 //p[(count(preceding-sibling::p) + 1) mod 2 = 0]

p:nth-of-type(0n+1) 5 === 5 //p[count(preceding-sibling::p) = 0]

p:nth-of-type(0n+2) 5 === 5 //p[count(preceding-sibling::p) = 1]

p:nth-of-type(0n+3) 5 === 5 //p[count(preceding-sibling::p) = 2]

p:nth-of-type(0n+4) 4 === 4 //p[count(preceding-sibling::p) = 3]

p:nth-of-type(0n+5) 4 === 4 //p[count(preceding-sibling::p) = 4]

p:nth-of-type(1n+0) 52 === 52 //p

p:nth-of-type(1n-0) 52 === 52 //p

p:nth-of-type(1n+1) 52 === 52 //p

p:nth-of-type(1n-1) 52 === 52 //p

p:nth-of-type(1n+2) 47 === 47 //p[count(preceding-sibling::p) >= 1]

p:nth-of-type(1n-2) 52 === 52 //p

p:nth-of-type(1n+3) 42 === 42 //p[count(preceding-sibling::p) >= 2]

p:nth-of-type(1n-3) 52 === 52 //p

p:nth-of-type(1n+4) 37 === 37 //p[count(preceding-sibling::p) >= 3]

p:nth-of-type(1n-4) 52 === 52 //p

p:nth-of-type(1n+5) 33 === 33 //p[count(preceding-sibling::p) >= 4]

p:nth-of-type(1n-5) 52 === 52 //p

p:nth-of-type(2n+0) 24 === 24 //p[(count(preceding-sibling::p) + 1) mod 2 = 0]

p:nth-of-type(2n-0) 24 === 24 //p[(count(preceding-sibling::p) + 1) mod 2 = 0]

p:nth-of-type(2n+1) 28 === 28 //p[(count(preceding-sibling::p)) mod 2 = 0]

p:nth-of-type(2n-1) 28 === 28 //p[(count(preceding-sibling::p) + 2) mod 2 = 0]

p:nth-of-type(2n+2) 24 === 24 //p[count(preceding-sibling::p) >= 1 and (count(preceding-sibling::p) - 1) mod 2 = 0]

p:nth-of-type(2n-2) 24 === 24 //p[(count(preceding-sibling::p) + 3) mod 2 = 0]

p:nth-of-type(2n+3) 23 === 23 //p[count(preceding-sibling::p) >= 2 and (count(preceding-sibling::p) - 2) mod 2 = 0]

p:nth-of-type(2n-3) 28 === 28 //p[(count(preceding-sibling::p) + 4) mod 2 = 0]

p:nth-of-type(2n+4) 19 === 19 //p[count(preceding-sibling::p) >= 3 and (count(preceding-sibling::p) - 3) mod 2 = 0]

p:nth-of-type(2n-4) 24 === 24 //p[(count(preceding-sibling::p) + 5) mod 2 = 0]

p:nth-of-type(2n+5) 18 === 18 //p[count(preceding-sibling::p) >= 4 and (count(preceding-sibling::p) - 4) mod 2 = 0]

p:nth-of-type(2n-5) 28 === 28 //p[(count(preceding-sibling::p) + 6) mod 2 = 0]

p:nth-of-type(3n+0) 17 === 17 //p[(count(preceding-sibling::p) + 1) mod 3 = 0]

p:nth-of-type(3n-0) 17 === 17 //p[(count(preceding-sibling::p) + 1) mod 3 = 0]

p:nth-of-type(3n+1) 18 === 18 //p[(count(preceding-sibling::p)) mod 3 = 0]

p:nth-of-type(3n-1) 17 === 17 //p[(count(preceding-sibling::p) + 2) mod 3 = 0]

p:nth-of-type(3n+2) 17 === 17 //p[count(preceding-sibling::p) >= 1 and (count(preceding-sibling::p) - 1) mod 3 = 0]

p:nth-of-type(3n-2) 18 === 18 //p[(count(preceding-sibling::p) + 3) mod 3 = 0]

p:nth-of-type(3n+3) 17 === 17 //p[count(preceding-sibling::p) >= 2 and (count(preceding-sibling::p) - 2) mod 3 = 0]

p:nth-of-type(3n-3) 17 === 17 //p[(count(preceding-sibling::p) + 4) mod 3 = 0]

p:nth-of-type(3n+4) 13 === 13 //p[count(preceding-sibling::p) >= 3 and (count(preceding-sibling::p) - 3) mod 3 = 0]

p:nth-of-type(3n-4) 17 === 17 //p[(count(preceding-sibling::p) + 5) mod 3 = 0]

p:nth-of-type(3n+5) 12 === 12 //p[count(preceding-sibling::p) >= 4 and (count(preceding-sibling::p) - 4) mod 3 = 0]

p:nth-of-type(3n-5) 18 === 18 //p[(count(preceding-sibling::p) + 6) mod 3 = 0]

p:nth-of-type(4n+0) 10 === 10 //p[(count(preceding-sibling::p) + 1) mod 4 = 0]

p:nth-of-type(4n-0) 10 === 10 //p[(count(preceding-sibling::p) + 1) mod 4 = 0]

p:nth-of-type(4n+1) 15 === 15 //p[(count(preceding-sibling::p)) mod 4 = 0]

p:nth-of-type(4n-1) 13 === 13 //p[(count(preceding-sibling::p) + 2) mod 4 = 0]

p:nth-of-type(4n+2) 14 === 14 //p[count(preceding-sibling::p) >= 1 and (count(preceding-sibling::p) - 1) mod 4 = 0]

p:nth-of-type(4n-2) 14 === 14 //p[(count(preceding-sibling::p) + 3) mod 4 = 0]

p:nth-of-type(4n+3) 13 === 13 //p[count(preceding-sibling::p) >= 2 and (count(preceding-sibling::p) - 2) mod 4 = 0]

p:nth-of-type(4n-3) 15 === 15 //p[(count(preceding-sibling::p) + 4) mod 4 = 0]

p:nth-of-type(4n+4) 10 === 10 //p[count(preceding-sibling::p) >= 3 and (count(preceding-sibling::p) - 3) mod 4 = 0]

p:nth-of-type(4n-4) 10 === 10 //p[(count(preceding-sibling::p) + 5) mod 4 = 0]

p:nth-of-type(4n+5) 10 === 10 //p[count(preceding-sibling::p) >= 4 and (count(preceding-sibling::p) - 4) mod 4 = 0]

p:nth-of-type(4n-5) 13 === 13 //p[(count(preceding-sibling::p) + 6) mod 4 = 0]

p:nth-of-type(5n+0) 9 === 9 //p[(count(preceding-sibling::p) + 1) mod 5 = 0]

p:nth-of-type(5n-0) 9 === 9 //p[(count(preceding-sibling::p) + 1) mod 5 = 0]

p:nth-of-type(5n+1) 11 === 11 //p[(count(preceding-sibling::p)) mod 5 = 0]

p:nth-of-type(5n-1) 10 === 10 //p[(count(preceding-sibling::p) + 2) mod 5 = 0]

p:nth-of-type(5n+2) 11 === 11 //p[count(preceding-sibling::p) >= 1 and (count(preceding-sibling::p) - 1) mod 5 = 0]

p:nth-of-type(5n-2) 11 === 11 //p[(count(preceding-sibling::p) + 3) mod 5 = 0]

p:nth-of-type(5n+3) 11 === 11 //p[count(preceding-sibling::p) >= 2 and (count(preceding-sibling::p) - 2) mod 5 = 0]

p:nth-of-type(5n-3) 11 === 11 //p[(count(preceding-sibling::p) + 4) mod 5 = 0]

p:nth-of-type(5n+4) 10 === 10 //p[count(preceding-sibling::p) >= 3 and (count(preceding-sibling::p) - 3) mod 5 = 0]

p:nth-of-type(5n-4) 11 === 11 //p[(count(preceding-sibling::p) + 5) mod 5 = 0]

p:nth-of-type(5n+5) 9 === 9 //p[count(preceding-sibling::p) >= 4 and (count(preceding-sibling::p) - 4) mod 5 = 0]

p:nth-of-type(5n-5) 9 === 9 //p[(count(preceding-sibling::p) + 6) mod 5 = 0]

p:nth-of-type(-n+1) 5 === 5 //p[count(preceding-sibling::p) <= 0]

p:nth-of-type(-n+2) 10 === 10 //p[count(preceding-sibling::p) <= 1]

p:nth-of-type(-n+3) 15 === 15 //p[count(preceding-sibling::p) <= 2]

p:nth-of-type(-n+4) 19 === 19 //p[count(preceding-sibling::p) <= 3]

p:nth-of-type(-n+5) 23 === 23 //p[count(preceding-sibling::p) <= 4]

p:nth-of-type(-0n+1) 5 === 5 //p[count(preceding-sibling::p) = 0]

p:nth-of-type(-0n+2) 5 === 5 //p[count(preceding-sibling::p) = 1]

p:nth-of-type(-0n+3) 5 === 5 //p[count(preceding-sibling::p) = 2]

p:nth-of-type(-0n+4) 4 === 4 //p[count(preceding-sibling::p) = 3]

p:nth-of-type(-0n+5) 4 === 4 //p[count(preceding-sibling::p) = 4]

p:nth-of-type(-1n+1) 5 === 5 //p[count(preceding-sibling::p) <= 0]

p:nth-of-type(-1n+2) 10 === 10 //p[count(preceding-sibling::p) <= 1]

p:nth-of-type(-1n+3) 15 === 15 //p[count(preceding-sibling::p) <= 2]

p:nth-of-type(-1n+4) 19 === 19 //p[count(preceding-sibling::p) <= 3]

p:nth-of-type(-1n+5) 23 === 23 //p[count(preceding-sibling::p) <= 4]

p:nth-of-type(-2n+1) 5 === 5 //p[count(preceding-sibling::p) <= 0 and (count(preceding-sibling::p)) mod 2 = 0]

p:nth-of-type(-2n+2) 5 === 5 //p[count(preceding-sibling::p) <= 1 and (count(preceding-sibling::p) - 1) mod 2 = 0]

p:nth-of-type(-2n+3) 10 === 10 //p[count(preceding-sibling::p) <= 2 and (count(preceding-sibling::p) - 2) mod 2 = 0]

p:nth-of-type(-2n+4) 9 === 9 //p[count(preceding-sibling::p) <= 3 and (count(preceding-sibling::p) - 3) mod 2 = 0]

p:nth-of-type(-2n+5) 14 === 14 //p[count(preceding-sibling::p) <= 4 and (count(preceding-sibling::p) - 4) mod 2 = 0]

p:nth-of-type(-3n+1) 5 === 5 //p[count(preceding-sibling::p) <= 0 and (count(preceding-sibling::p)) mod 3 = 0]

p:nth-of-type(-3n+2) 5 === 5 //p[count(preceding-sibling::p) <= 1 and (count(preceding-sibling::p) - 1) mod 3 = 0]

p:nth-of-type(-3n+3) 5 === 5 //p[count(preceding-sibling::p) <= 2 and (count(preceding-sibling::p) - 2) mod 3 = 0]

p:nth-of-type(-3n+4) 9 === 9 //p[count(preceding-sibling::p) <= 3 and (count(preceding-sibling::p) - 3) mod 3 = 0]

p:nth-of-type(-3n+5) 9 === 9 //p[count(preceding-sibling::p) <= 4 and (count(preceding-sibling::p) - 4) mod 3 = 0]

p:nth-of-type(-4n+1) 5 === 5 //p[count(preceding-sibling::p) <= 0 and (count(preceding-sibling::p)) mod 4 = 0]

p:nth-of-type(-4n+2) 5 === 5 //p[count(preceding-sibling::p) <= 1 and (count(preceding-sibling::p) - 1) mod 4 = 0]

p:nth-of-type(-4n+3) 5 === 5 //p[count(preceding-sibling::p) <= 2 and (count(preceding-sibling::p) - 2) mod 4 = 0]

p:nth-of-type(-4n+4) 4 === 4 //p[count(preceding-sibling::p) <= 3 and (count(preceding-sibling::p) - 3) mod 4 = 0]

p:nth-of-type(-4n+5) 9 === 9 //p[count(preceding-sibling::p) <= 4 and (count(preceding-sibling::p) - 4) mod 4 = 0]

p:nth-of-type(-5n+1) 5 === 5 //p[count(preceding-sibling::p) <= 0 and (count(preceding-sibling::p)) mod 5 = 0]

p:nth-of-type(-5n+2) 5 === 5 //p[count(preceding-sibling::p) <= 1 and (count(preceding-sibling::p) - 1) mod 5 = 0]

p:nth-of-type(-5n+3) 5 === 5 //p[count(preceding-sibling::p) <= 2 and (count(preceding-sibling::p) - 2) mod 5 = 0]

p:nth-of-type(-5n+4) 4 === 4 //p[count(preceding-sibling::p) <= 3 and (count(preceding-sibling::p) - 3) mod 5 = 0]

p:nth-of-type(-5n+5) 4 === 4 //p[count(preceding-sibling::p) <= 4 and (count(preceding-sibling::p) - 4) mod 5 = 0]