selenium
元素定位
定义:XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。
下面的例子中红色字体表示使用对应语法获取的元素(或属性)。
XPath轴(XPath Axes)可定义某个相对于当前节点的节点集:
1、child 选取当前节点的所有子元素
2、parent 选取当前节点的父节点
3、descendant 选取当前节点的所有后代元素(子、孙等)
4、ancestor 选取当前节点的所有先辈(父、祖父等)
5、descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身
6、ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
7、preceding-sibling 选取当前节点之前的所有同级节点
8、following-sibling 选取当前节点之后的所有同级节点
9、preceding 选取文档中当前节点的开始标签之前的所有节点
10、following 选取文档中当前节点的结束标签之后的所有节点
11、self 选取当前节点
12、attribute 选取当前节点的所有属性
13、namespace 选取当前节点的所有命名空间节点
following-sibling 选取当前节点之后的所有同级节点,跟preceding-sibling一样都是选取同级同父的节点,只不过following是取对应节点之后的节点,preceding-sibling取的是该节点之前的节点。
/AAA/BBB/following-sibling::* 取/AAA/BBB节点的之后的所有同级节点
AAA/BBB/following-sibling::* 取/AAA/BBB节点的之后的所有同级节点
<AAA>
<BBB>
<CCC/>
<DDD/>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
//CCC/following-sibling::* 选取所有CCC元素的之后所有同级节点
<AAA>
<BBB>
<CCC/>
<DDD/>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
xpath的作用就是两个字“定位”,运用各种方法进行快速准确的定位,推荐两个非常有用的的firefox工具:firebug和xpath checker
定位
01依靠自己属性,文本定位
//td[text()='xxx']
//div[contains(@class,'xxx')]
//div[@class='xxx' and @type='xxx']
02依靠父节点定位
//div[@class='xxx']/div
//div[@id='xxx']/div
03依靠子节点定位
//div[div[@id='xxx']]
//div[div[@name='xxx']]
04混合型
//div[div[@name='xxx']]/img
//td[a/font[contains(text(),'xxx')]]//input[@type='xxx']
xpath的学习-拓展
01 following-sibling
following-sibling即为“选择当前节点之后的所有同级节点”,那么没有加上“sibling”关键字的,搜索的就是之上/之下的所有节点,忽略同级概念,例如:
<div>
<input id="123">
<input>
</div>
要定位第二个input://input[@id='123']/following-sibling::input
02 preceding-sibling
preceding-sibling的解释是“选取当前节点之前的所有同级节点”,那么没有加上“sibling”关键字的,搜索的就是之上/之下的所有节点,忽略同级概念, preceding-sibling和following-sibling是刚好相反的
<div>
<span>text</span>
<input id="123">
</div>
要定位第二个input://input[@id='123']/preceding-sibling::span
03 contains
和字面意思一样就是包含,例如://div[contains(@class,'xxx')]
04 starts-with
和字面意思一样就是以某某开头,例如://input[starts-with(@class,'xxx')]
05 not
就是否定的意思
比如找一个id不为123的input:input[not[id='123']]
又如找一个文本中不包含xxx字段的span://span[not(contains(text(),'xxx'))]
xpath的学习-补充
01 绝对路径
html/body/div/span[2]/input[2] 中间结构变化,就失效
02 相对路径
//开始,在整个html source里找,不管在什么位置
03 postition=2position()>3position()<3
例如html:<div id="positions">
<input>
<span>test position()1</span>
<span>test position()2</span>
<span>test position()3</span>
<span>test position()4</span>
<span>test position()5</span>
</input>
</div>
获取第一个span,可以是//div[@id='positions']/span[1],也可以是//div[@id='positions']/span[position()=1]
//div[@id='positions']/span[position()>3]就是定位了test position()4和test position()5
//div[@id='positions']/span[position()<3]就是定位了test position()1和test position()2
04 last()last()-1
以上面的html为例子,获取最后一个span://div[@id='positions']/span[last()]
以上面的html为例子,获取倒数第二个span://div[@id='positions']/span[last()-1]
05 属性定位元素
@class //div[@class] 有class属性的div
06 属性值定位
//div[@class='xxx']
关注公众号回复1赠送测试书籍
回复2赠送测试教程,部分截图
需要其他学习资料或关于转行建议的:
欢迎大家随时加我微信骚扰: