selenium之如何使用xpath定位页面元素

一.概述

      xpath是一种选择器,是一种xml路径语言,在自动化测试过程中能够准确的定位页面的元素,可以说xpath

能解决99%的元素定位的问题;

二.xpath常用符号说明

/ 表示绝对路径,绝对路径是指从根目录开始

//表示相对路径

.表示当前层

..表示上一层

*表示通配符

@表示属性

[]属性的判断条件表达式

三.常用的xpath的写法

/html/div

/html//div 表示选择根目录下的所有的子孙后代节点中的div节点,//表示相对路径

//div 表示选择所有的div节点

//div/div 表示选择所有的div节点的子节点中含有div的节点

//div/div/. 表示选择//div/div节点的当前层的节点,与//div/div的结果相同

//div/div/.. 表示选择//div/div节点的上一层节点,也就是选择一个div节点,该div节点的子节点有div节点

//div/div/* ,表示选择//div/div的所有子节点,//div/div会有两个匹配出来的节点

//div[@id='input'] 表示选择一个id为’input’的div节点

//div[@id='input']/input 表示选择一个id为’input’的div节点的input子节点

//table//input[@id='user'] 表示选择table的子孙后代中id为user的input节点

//input[@name='identity' and @class='Volvo'] 选择一个name为identity并且class为Volvo的input节点

//input[@name='identity' or @class='Volvo'] 选择一个name为identity,或者class为Volvo的节点

//input[@name='identity' or @class='Volvo'][1] 选择第一个name为identity,或者class为Volvo的节点

//input[@name='identity' or @class='Volvo'][last()] 选择最后一个name为identity,或者class为Volvo的节点

四.xpath的几个常用函数

1.contains()://div[contains(@id,'in')] ,表示选择id中包含有’in’的div节点

2.text()://a[text()='baidu']表示文本值

3.last()

4.starts-with()://div[starts-with(@id,'in')] ,表示选择以’in’开头的id属性的div节点

5.not():表示否定,//input[@name=‘identity’ and not(contains(@class,‘a’))],表示匹配出name为identity并且class的值中不包含a的input节点。

五.xpath的轴的概念

ancestor 选取当前节点的所有先辈(父,祖父等)

ancestor-or-self 选取当前节点的所有先辈(父,祖父等)以及当前节点本身

attribute 选取当前节点的所有属性

child 选取当前节点的所有子元素

descendant 选取当前节点的所有后代元素(子,孙等)

descendant-or-self 选取当前节点的所有后代元素(子,孙等)及当前节点本身

following 选取当前节点的结束标签时候的所有节点

following-sibling 选取当前节点之后的所有同级节点

namespace 选取当前节点的所有命名空间节点

parent 选取当前节点的父节点

preceding 选取当前节点开始标签之前的所有节点

priceding-sibling 选取当前节点之前的所有同级节点

self 选取当前节点

六.xpath轴的用法

//div[@id='radio']//label[text()='Saab']/preceding-sibling::input[1] 选择label的text为Saab的节点之前的同级节点中为input节点的第一个

用xpath轴时应注意的几个问题:

1.调用轴时最好用'/';

2.轴后面要加上符号"::" 

3.“::”后面可以接节点名称,也可以接”*”

轴的另一种写法:

//input[following-sibling::label[1][text()=‘Saab’]], 这个的作用与//div[@id='radio']//label[text()='Saab']/preceding-sibling::input[1]的作用是一样的!

 

posted @ 2015-12-03 16:16  li_wu  阅读(6097)  评论(0编辑  收藏  举报