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
* 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
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
* 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
* 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
.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
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
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
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
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
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
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
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
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]