【Selenium专题】元素定位之CssSelector

系统 2074 0

CssSelector是我最喜欢的元素定位方法,Selenium官网的Document里极力推荐使用CSS locator,而不是XPath来定位元素,原因是CSS locator比XPath locator速度快,特别是在IE下面(IE没有自己的XPath 解析器(Parser))他比xpath更高效更准确更易编写,美中不足是根据页面文字时略有缺陷没有xpath直接。

因为前端开发人员就是用CSS Selector设置页面上每一个元素的样式,无论那个元素的位置有多复杂,他们能定位到,那我们使用CSS Selector肯定也能非常精准的定位到页面Elements。

CssSelector常用定位

1.根据tagName

  driver.findElement(By.cssSelector("input")

2.根据ID

  driver.findElement(By.cssSelector("input#username"));html标签和#id

  driver.findElement(By.cssSelector("#username"));只是#id

3.根据className

  单一class:driver.findElement(By.cssSelector(".username"));.class

  复合class:driver.findElement(By.cssSelector(".username.**.***"));.classA.classB

4.根据元素属性

  1)精准匹配: 

    [A]  driver.findElement(By.cssSelector("input[name=username]"));属性名=属性值,id,class,等都可写成这种形式

           [B]  driver.findElement(By.cssSelector("img[alt]"));存在属性。例如img元素存在alt属性

    [C]  driver.findElement(By.cssSelector("input[type='submit'][value='Login']"));多属性

  2)模糊匹配:(正则表达式匹配属性)

    [A]  ^=  driver.findElement(By.cssSelector(Input[id ^='ctrl']));匹配到id头部 如ctrl_12

    [B]  $=  driver.findElement(By.cssSelector(Input[id $='ctrl']));匹配到id尾部 如a_ctrl

    [C]  *=  driver.findElement(By.cssSelector(Input[id *= 'ctrl']));匹配到id中间如1_ctrl_12

    更多正则匹配原则请查看 CSS3 选择器——属性选择器   http://www.w3cplus.com/css3/attribute-selectors

5.查询子元素

        
          <
        
        
          form 
        
        
          id
        
        
          ="form"
        
        
           class
        
        
          ="fm"
        
        
           name
        
        
          ="f"
        
        
          >
        
        
          <
        
        
          span 
        
        
          id
        
        
          ="s_kw_wrap"
        
        
           class
        
        
          ="bg s_ipt_wr quickdelete-wrap"
        
        
          >
        
        
          <
        
        
          input 
        
        
          id
        
        
          ="kw"
        
        
           class
        
        
          ="s_ipt"
        
        
           type
        
        
          ="text"
        
        
           autocomplete
        
        
          ="off"
        
        
           maxlength
        
        
          ="100"
        
        
           name
        
        
          ="wd"
        
        
          >
        
        
          </
        
        
          span
        
        
          >
        
        
          <
        
        
          span 
        
        
          id
        
        
          ="s_btn_wr"
        
        
           class
        
        
          ="btn_wr s_btn_wr bg"
        
        
          >
        
        
          <
        
        
          input 
        
        
          id
        
        
          ="su"
        
        
           class
        
        
          ="btn self-btn bg s_btn"
        
        
           type
        
        
          ="submit"
        
        
           value
        
        
          ="百度一下"
        
        
          >
        
        
          </
        
        
          span
        
        
          >
        
        
          </
        
        
          form
        
        
          >
        
      
案例html

以上代码是百度首页搜索输入框和按钮的html,下面讲解以此为例

  1)子元素   A>B

    WebElement input=  driver.findElement(By.cssSelector("form>span>input"));//搜索输入框

  2)后代元素   A空格B

    WebElement input=  driver.findElement(By.cssSelector("form input"));//搜索输入框

  3)第一个后代元素   :first-child

    WebElement span= driver.findElemet(By.cssSelector("form :first-child"));//冒号前有空格,定位到form下所有级别的第一个子元素

      可定位到三个元素:<span id="s_kw_wrap".../> <input id="kw"..../> <input id="su"........./>

    WebElement span= driver.findElemet(By.cssSelector("form input:first-child"));//冒号前无空格,定位到form下所有级别的第一个input元素

      可定位到两个元素:<input id="kw"..../> <input id="su"........./>

    WebElement span= driver.findElemet(By.cssSelector("form>span:first-child"));//冒号前无空格,定位到form直接子元素中的第一个span元素

      可定位到一个元素:<span id="s_kw_wrap".../>

  4)最后一个子元素    :last-child  [类同:first-child]

    WebElement userName = driver.findEleme(By.cssSelector("form :last-child"));//冒号前有空格,定位到form下所有级别的第一个子元素

  5)第2个子元素     :nth-child(N)   [类同:first-child]

    WebElement userName = driver.findElemet(By.cssSelector("form#form :nth-child(2)"));//冒号前有空格,定位到form下所有级别的第二个子元素

6.查询兄弟元素

  driver.findElement(By.cssSelector("form#form span+span")); 定位到a 再定位到和它相邻的b

深入学习cssselector可访问以下地址:


http://www.w3.org/TR/css3-selectors/

 

CSS3 选择器——基本选择器   http://www.w3cplus.com/css3/basic-selectors
CSS3 选择器——属性选择器   http://www.w3cplus.com/css3/attribute-selectors
CSS3 选择器——伪类选择器   http://www.w3cplus.com/css3/pseudo-class-selector
 

【Selenium专题】元素定位之CssSelector


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论