Test results:
Passed: 1245
Not valid: 1
Have no matches: 113
Coverter errors: 7
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.
Note that XPath implementation for the class attribute is the standard one (like other attributes).
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]
Not valid: 1
*:nth-child(-n+3 of span.this) CSS
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: 2
: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)'
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[(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('EN', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') or starts-with(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), concat(translate('EN', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), '-')))]
div:last-child 6 === 6 .//div[not(following-sibling::*)]
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 ')])]
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]
div:last-child 1 === 1 .//div[not(following-sibling::*)]
p:not(.c1) 324 === 324 .//p[not(contains(concat(' ', normalize-space(@class), ' '), ' c1 '))]
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[(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('EN', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') or starts-with(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), concat(translate('EN', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), '-')))]
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[(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('en', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') or starts-with(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), concat(translate('en', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), '-')))]
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[translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('fi', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')]
#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[(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') = translate('fr', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') or starts-with(translate(@lang, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), concat(translate('fr', 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), '-')))]
#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)]
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)]
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)]
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)]
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]