Selenium - Xpath 使用方法

由于最新版火狐不在支持FireBug等开发工具,可以通过https://ftp.mozilla.org/pub/firefox/releases/ 下载49版本以下的火狐就可以增加Firebug等扩展了。

什么是Xpath?

XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素。

工具

Xpath可以下载火狐浏览器插件FireBug

 

用法:

1. /(绝对路径,从根节点选取) 
2. //(相对路径,所有子代节点,不用考虑是否直接子节点) 
3. @ 选取属性 
4. “.”选取当前节点 
5. “..”选取当前节点的父节点

使用方法:

注://* 代表定位页面下所有元素,固定模式 @引用某样属性 id ='xxx'

1、Xpath支持ID、Class、Name定位功能,将 * 换位任意标签名,则可根据标签进行筛选

通过ID定位
 
//*[@id='i1']
//div[@id='i2']
 
通过Class定位
 
//*[@class='inner']
//div[@class='inner1']
 
通过Name定位
 
//*[@name='name']
//input[@name='name']
class包含xxx的div
//div[contains(@class,’xxx’)] 

2. 如果标签没有ID、Class、Name三总属性,Xpath还支持属性定位功能

//*[@placeholder='请输入用户名']

3. 当标签页重复时,Xpath提供了层级过滤

支持通过 / 进行层级递进,找到符合层级关系的标签
//input[@value=text][8]  ->>第8个input的value=text

//div[@class='inner'][3]/input[@type='text']
当层级都重复时,可以通过单个层级的属性进行定位

//div[@
class='driver'][1]/div[@class='inner'][3]/input

4. 一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。Xpath提供了索引过滤

通过索引,在List中定位属性,与python的索引有些差别,Xpath从1开始
 
//select[@name='city'][1]/option[1]

5. 上面集中如果都用上了之后还重复的话,我们就可以使用Xpath提供的终极神器,逻辑运算定位。and 或 or

通过and来缩小过滤的范围,只有条件都符合时才能定位到
 
//select[@name='city' and @size='4' and @multiple="multiple"]
 
or就相反了,只要这些筛选中,其中一个出现那么久匹配到了
 
//select[@name='city' or @size='4']

 

Xpath拓展

following-sibling: 选择当前节点之后的所有同级节点,那么没有加上“sibling”关键字的,搜索的就是之上/之下的所有节点,忽略同级概念,例如:

<div>
<input id="123">
<input>    
</div>

 

要定位第二个input://input[@id=’123’]/following-sibling::input

  • preceding-sibling: 选取当前节点之前的所有同级节点

  • starts-with: 以某某开头,例如://input[starts-with(@class,’xxx’)]

  • 绝对路径 html/body/div/span[2]/input[2] 中间结构变化,就失效

  • 相对路径 //开始,在整个html source里找,不管在什么位置

  • 索引[x] //div/input[2] div下面第二个input

  • 完全匹配 xpath=//*[text()=”Join”]

  • not关键字 就是否定的意思 
    比如找一个id不为123的input:input[not[id=’123’]] 
    又如找一个文本中不包含xxx字段的span://span[not(contains(text(),’xxx’))]

  • 通配符 * 
    比如//span[@*=”xxx”]指定位span中任意属性包含xxx的 
    比如//[@=”xxx”]指定位页面中任意属性保护xxx的标签

 

posted @ 2018-04-25 21:28  nancy05  阅读(20930)  评论(0编辑  收藏  举报