xpath定位

来源:互联网 发布:电子期刊在线阅读软件 编辑:程序博客网 时间:2024/05/18 01:03
http://mail.163.com/登录页面的用户名输入框为例,HTML代码大家自行参照

首先使用xpath定位时切忌:
1.不要使用带有空格的属性
2.不要使用自动生成的id、class 等
3.使用firebug会事半功倍
4.定位时一定要找到唯一的属性要确保定位的唯一性,根据唯一的属性进行各种定位
5.查看是否存在frame

先说说定位比较坑的,不建议使用
1、通过绝对路径做定位(相信大家不会使用这种方式)
/html/body/div[2]/div[2]/div[2]/form/div/div[1]/div[2]/input
再次强调千万不要直接复制或者使用绝对路径
2、不要使用元素索引如://input[1]这种

常用的定位方法:
1、通过相对路径做定位,两个斜杠代表相对路径
//input[@placeholder='邮箱帐号或手机号']
此处可以使用placeholder属性不用知道这是啥,只要是唯一的就可以用

2、使用文字定位
<span class="pr-domain j-prdomain" style="right: -76px;" id="auto-id-1510802784387">@163.com</span>
此处的文字指的是中间的“@163.com”这部分的文字
//span[contains(text(),'@163.com')]
//span[text() = '@163.com']
使用文字定位时用contains或者text()都可以,区别就是字面上的contains是指的包含,text就是纯粹的等于

3、使用部分属性值匹配:start-with、contains
//input[starts-with(@placeholder,'邮箱帐号')]
//input[contains(@placeholder,'邮箱帐号')]

4、利用上层节点即父节点等
//form[@id = 'login-form']//input[@name='email']
双斜杠表示相对路径即匹配该节点下的所有子孙节点等
单斜杠只匹配子节点

5、使用兄弟节点preceding-sibling、following-sibling
preceding-sibling:表示当前元素的上面的兄弟元素
//span[contains(text(),'@163.com')]//preceding-sibling::input
先定位到唯一的兄弟节点,在根据兄弟节点去找需要的节点,双引号后面跟对应元素,*号表示全部的节点
following-sibling:表示当前元素的下面的兄弟元素
//label[contains(text(),'邮箱帐号或手机号')]//following-sibling::input
原理同上

最后:

1、firebug一定要看,上面表示当前元素在哪,是在主页还是在frame里面,要看好做对应的切换
2、下面表示你所写的xpath对应的或者到的元素个数一定要唯一!一定要唯一!一定要唯一!!!
原创粉丝点击