关于selenium的CSS
经过将近两年半自动化的经验(两年selenium相关经验)对于selenium对元素的定位,常用的几种ID,CLASS之类的没必要说了在这里,对于一些不规范的前端代码 我想我最喜欢用的事CSS定位。
优势1:一般情况下定位速度要比XPATH快
优势2:语法要比XPATH更简洁更易懂
优势3:对于页面结构的变化对其影响并不像XPATH那么大
当然还有很多因素是我的个人喜好
下面列出一些常用的CSS定位的一些常用语法 这里不剧烈了有需要的可以给我留言我会一一解答
* |
通用元素选择器,匹配任何元素 |
E |
标签选择器,匹配所有使用E标签的元素 |
.info |
class选择器,匹配所有class属性中包含info的元素 |
#footer |
id选择器,匹配所有id属性等于footer的元素 |
E,F |
多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔 |
E F |
后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔 |
E > F |
子元素选择器,匹配所有E元素的子元素F |
E + F |
毗邻元素选择器,匹配紧随E元素之后的同级元素F (只匹配第一个) |
E ~ F |
同级元素选择器,匹配所有在E元素之后的同级F元素 |
E[att='val'] |
属性att的值为val的E元素 (区分大小写) |
E[att^='val'] |
属性att的值以val开头的E元素 (区分大小写) |
E[att$='val'] |
属性att的值以val结尾的E元素 (区分大小写) |
E[att*='val'] |
属性att的值包含val的E元素 (区分大小写) |
E[att1='v1'][att2*='v2'] |
属性att1的值为v1,att2的值包含v2 (区分大小写) |
E:contains('xxxx') |
内容中包含xxxx的E元素 |
E:not(s) |
匹配不符合当前选择器的任何元素 |
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元素,注意,文本节点也被看作子元素 |
xpath | css | |
标 签 |
//div |
div |
By id |
//div[@id='eleid'] |
div#eleid |
By class |
//div[@class='eleclass'] |
div.eleclass |
By 属性 |
//div[@title='Move mouse here'] |
div[title=Move mouse here] |
定位子元素 |
//div[@id='eleid']/* |
div#eleid >* |
定位后代元素 |
//div[@id='eleid']//h1 |
div h1 |
By index |
//li[6] |
li:nth(5) |
By content |
//a[contains(.,'Issue 1164')] |
a:contains(Issue 1164) |
根据子元素回溯定位父元素 |
//li[a[contains(.,'Issue 1244')]] |
li{a:contains(Issue 1244)} |
根据邻近元素定位 |
//li[preceding-sibling::li[contains(.,'Issue 1244')]] |
css=li:contains(Issue 1244) + li |
以上可供参考 有些方法可能针对不同版本的selenium,有些不同或者有的会失效具体列子具体分析了
上一篇: 关于selenium的CSS
下一篇: VS2012使用XListCtrl