CSS选择器定位的使用

CSS 可以比较灵活选择控件的任意属性,一般情况下定位速度要比XPath 快,但对于初学者来说比较
难以学习使用,下面我们就详细的介绍CSS 的语法与使用。
一、CSS 选择器的常见语法:

例如下面一段代码:
<div class="formdiv">
  <form name="fnfn">
    <input name="username" type="text"></input>
    <input name="password" type="text"></input>
    <input name="continue" type="button"></input>
    <input name="cancel" type="button"></input>
    <input value="SYS123456" name="vid" type="text">
    <input value="ks10cf6d6" name="cid" type="text">
  </form>
  <div class="subdiv">
    <ul id="recordlist">
      <p>Heading</p>
      <li>Cat</li>
      <li>Dog</li>
      <li>Car</li>    

      <li>Goat</li>
    </ul>
  </div>
</div>

通过CSS 语法进行匹配的实例:

 cssSelector匹配
css=div<div class="formdiv">
css=div.formdiv<div class="formdiv">
css=#recordlist
css=ul#recordlist
<ul id="recordlist">
css=div.subdiv p<p>Heading</p>
css=div.subdiv>ul>p<p>Heading</p>
css=form+div<div class="subdiv">
css=p+li<li>Cat</li>
css=p~li<li>Cat</li> 得到4个li中的第一个
css=form>input[name=username]<input name="username" type="text"></input>
css=input[name$=id][value^=SYS]<input value="SYS123456" name="vid" type="text">
css=input[value*='SYS']<input value="SYS123456" name="vid" type="text">
css=a:link<a href="http://www.baidu.com">baidu</a>
css=input:first-child<input name="username" type="text"></input>
css=input:last-child<input value="ks10cf6d6" name="cid" type="text">
css=li:nth-child(2)<li>Cat</li> 因为这个li是ul下的第二个元素,所以是child(2)
css=:root<html>

二、css 中的结构性定位

结构性定位就是根据元素的父子、同级中位置来定位,css3标准中有定义一些结构性定位伪类如
nth-of-type,nth-child,但是使用起来语法很不好理解,这里就不做介绍了。
Selenium 中则是采用了来自Sizzle 的css3定位扩展,它的语法更加灵活易懂。
Sizzle Css3的结构性定位语法:

例如下面一段代码:
<div class="subdiv">
<ul id="recordlist">
<p>Heading</p>
<li>Cat</li>
<li>Dog</li>
<li>Car</li>
<li>Goat</li>
</ul>
</div>

三、下面是一些XPATH 和CSS 的类似定位功能比较。 

 定位方式XPathCSS
标签//divdiv
By id//div[@id='recordlist']div#recordlist
By class//div[@class='subdiv']
//div[contains(@class,'subdiv')]
div.subdiv
By 属性//input[@name='username']input[name=username]
input[name^=user]
input[name$=name]
input[name*=erna]
定位子元素//ul[@id='recordlist']/*
//ul/p
ul#recordlist>*
ul#recordlist>p
定位后代元素//div[@class='subdiv']//pdiv p
By index//li[4] 定位第四个lili:nth-child(5)
By content//li[contains(text(),'Goa')]li contains('Goa') 该方法
已经废弃
根据子元素回溯定位父元素//*[./a[@id='baiduUrl']]
//div[.//p[text()='Heading']]
匹配到:<div class="subdiv">
根据兄弟元素定位//ul[preceding-sibling::a[@id='baiduUrl']]
//ul[preceding-sibling::a[//div[@class='subdiv']/a]]
都匹配到:<ul id="recordlist">
a+ul
a#baiduUrl+ul
匹配到:<ul id="recordlist">

通过对比,我们可以看到,CSS 定位语法比XPath 更为简洁,定位方式更多灵活多样;不过对CSS 理
解起来要比XPath 较难;但不管是从性能还是定位更复杂的元素上,CSS 优于XPath,笔者更推荐使用CSS
定位页面元素。

转载于:https://www.cnblogs.com/xiaohuhu/p/9088470.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值