在selenium中使用css选择器进行元素定位(二)
css中的结构性定位
结构性定位就是根据元素的父子、同级中位置来定位,css3标准中有定义一些结构性定位伪类如nth-of-type,nth-child,但是使用起来语法很不好理解,这里就不做介绍了。
Selenium中则是采用了来自Sizzle的css3定位扩展,它的语法更加灵活易懂
Sizzle Css3的结构性定位语法
E:nth(n) E:eq(n) |
在其父元素中的E子元素集合中排在第n+1个的E元素 (第一个n=0) |
E:first |
在其父元素中的E子元素集合中排在第1个的E元素 |
E:last |
在其父元素中的E子元素集合中排在最后1个的E元素 |
E:even |
在其父元素中的E子元素集合中排在偶数位的E元素 (0,2,4…) |
E:odd |
在其父元素中的E子元素集合中排在奇数的E元素 (1,3,5…) |
E:lt(n) |
在其父元素中的E子元素集合中排在n位之前的E元素 (n=2,则匹配0,1) |
E:gt(n) |
在其父元素中的E子元素集合中排在n位之后的E元素 (n=2,在匹配3,4) |
E:only-child |
父元素的唯一一个子元素且标签为E |
E:empty |
不包含任何子元素的E元素,注意,文本节点也被看作子元素 |
匹配示例:
例如还是段的代码
<div class="subdiv">
<ul id="recordlist">
<p>Heading</p>
<li>Cat</li>
<li>Dog</li>
<li>Car</li>
<li>Goat</li>
</ul>
</div>
locator |
匹配 |
css=ul > li:nth(0) |
<li>Cat</li> |
css=ul > *:nth(0) css=ul > :nth(0) |
<p>Heading</p> |
css=ul > li:first |
<li>Cat</li> |
css=ul > :first |
<p>Heading</p> |
css=ul > *:last css=ul > li:last |
<li>Goat</li> |
css=ul > li:even |
Cat, Car |
css=ul > li:odd |
Dog, Goat |
css=ul > :even |
<p>Heading</p> |
css=ul > p:odd |
[error] not found |
css=ul > li:lt(2) |
<li>Cat</li> |
css=ul > li:gt(2) |
<li>Goat</li> |
css=ul > li:only-child css=ul > :only-child css=ul > *:only-child |
[error] not found (ul没有only-child) |
css=div.subdiv > :only-child |
<ul id="recordlist"> … … … … </ul> |