目前针对一些常规定位方式有:By.id、By.name、By.LinkTest(针对<a>标签)、By.ClassName
针对不太好定位的,比如:没有id、name、class的定位方式,或者说id、name、class的value值显示重复,不太方便一下写出定位方式,这样可以考虑下其它定位方式。以下主要介绍cssSelector如何解决id、name、class的value值显示重复的定位方式。
| 
 E  | 
 标签选择器,匹配所有使用E标签的元素 
  | 
| 
 E F 
  | 
 后代元素选择器,匹配所有属于E元素后代的F元素,E和 F之间用空格分隔 
  | 
| 
 E > F  | 
 子元素选择器,匹配所有E元素的子元素F 
  | 
| 
 E + F  | 
 毗邻元素选择器,匹配紧随E元素之后的同级元素F (只 匹配第一个) 
  | 
| 
 E ~ F  | 
 同级元素选择器,匹配所有在E元素之后的同级F元素 
  | 
| 
 .info class  | 
 选择器,匹配所有class属性中包含info的元素 
  | 
| 
 #footer id  | 
 选择器,匹配所有id属性等于footer的元素 
  | 
| 
 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元素(已经废弃的伪类,不再支持)  | 
| 
 :nth-of-type和:nth-child  | 
 以"type"来区分的,也就是说 ele:nth-of-type(n)是指其父元素下第n个ele元素, ele:nth-child(n)是指其父元素下第n个元素且这个元素为ele,若不是,则选择失败。 
  | 
案例图:
 
例如:
drvier.findElement(By.cssSelector("#operation a span~span")).click();
原文:http://www.cnblogs.com/wxll/p/5970710.html