Selenium定位方法之CSS Selector

CSS Selectors

前言

在刚学习UI自动化时,对于定位方式一窍不通,在使用插件辅助工具加上对定位方式的一些了解,算是磕磕绊绊用了起来,随着编写用例数量的增加,定位方式的稳定性也更加重要,只懂一些基本的定位知识已经不能够满足要求,百度搜索到的使用方法也大都看的云里雾里,因此花费些时间整理了下CSS和Xpath(后续补充)两种定位方法,发现还是有很多细节需要掌握(使用粗体标记),根据学到的自己对使用方法作了三种划分,当然这并不代表所有CSS定位方法,更多可参考文末链接学习。

1. 基本表示法

通配符:*

*

使用*可以匹配到所有节点,即页面上的所有元素

元素:element

div

直接使用元素名就可以匹配到所有此类型的元素,如div;若需要匹配多个元素,使用逗号隔开,如:

em,span

ID:#id

#login

根据该元素的ID属性中的值匹配元素,ID属性值必须完全匹配。ID在CSS中具有唯一性,含有ID属性的元素尽量选择使用ID来定位。

类:.class

.demo

根据元素的类属性中的值匹配元素 ,当有多个class属性值时,必须与其中一个完全匹配,匹配多个类名使用逗号隔开

属性:[attr]

*[href]

上述表达式可以匹配到所有含链接属性的元素

属性选择器通过已经存在的属性名或属性值匹配元素,是对元素节点的具体描述

ID和类都可以和元素选择器配合使用

2. 节点描述法

节点描述法即对元素的进一步描述,主要是针对属性,也是属性选择器的补充

单个属性:[attr=value]

h2[class=demo]

匹配到含有class属性且值为demo的h2元素

注意:

使用注意事项:

  1. 注意值必须是全匹配,像class使用空格隔开的多值不能匹配(参考属性模糊匹配)
  2. 因属性值不需要引号,所以属性值中含有.#字符以及空格不适用,如herf属性

多个属性:[attr=value] [attr=value]

div[class=demo][name=test]

匹配到含有属性class和name且值分别为demo和test的div元素

使用方法和注意点和单个属性一致,只是添加了多个不同属性名称

属性值模糊匹配

HTML示例代码

<div class="one two three">元素A</div>
<div class="test-one two">元素B</div>

1. [attr~=value]

div[class~=one]

匹配到元素A,表示属性值以空格作分隔的列表,且其中一个能匹配到value

2. [attr|=value]

div[class|=test]

匹配到元素B,表示属性值以value为前缀且使用连字符‘-’连接

[attr^=value]

div[class^='on']

匹配到元素A,表示属性值是以"value"开头的元素

[attr$=value]

div[class$='wo']

匹配到元素B,表示属性值是以"value"结尾的元素。

[attr*=value]

div[class*='one']

匹配到元素A和元素B,表示属性值包含有"value"的元素

注意:~=和|=是css2版本定义的,value不需要使用引号

3. 家族关系法

<div id=“body”>
    <span>后天更美好</span>
    <p>世界很大<span>我想去看看</span></p>
    <p>海浪向往着陆地</p>
</div>
<span>我向往着你</span>

子元素:element>element

#body>span

匹配到第一个span元素,表示只会匹配作为第一个元素的直接后代(子元素)的第二元素

后代元素:element element

#body span

匹配到div中的所有span元素,和子元素选择器相似,只是不需要相匹配元素之间要有严格的父子关系,也可能是孙子关系

兄弟元素:element+element

span+p

匹配到p元素,表示两个元素相邻且在同一个父元素下,第二个元素选中。

第N个子元素( :nth-child(n) )

#body>p:nth-child(2)

匹配到div内的第二个p元素,表示匹配其父元素下的的第二个子元素,n从1开始

注意经常犯的错误:

  1. 除了兄弟元素,其他关系定位必须指定父元素(可能因为兄弟可以相互参考所以不需要)
  2. 匹配多个中的某一个时,父元素必须是唯一的,否则nth-child永远是多个的
  3. 家族关系定位只能向内或同级定位(即往里查找子元素或后代元素),不能向外定位

参考

CSS Selectors - CSS(层叠样式表) | MDN
CSS 选择器参考手册

猜你喜欢

转载自www.cnblogs.com/dream08/p/11925282.html
今日推荐