以
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、使用文字定位
此处的文字指的是中间的“@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对应的或者到的元素个数一定要唯一!一定要唯一!一定要唯一!!!