东莞市盛裕绒艺玩具有限公司

东莞市盛裕绒艺玩具有限公司

918天堂

15373739398
联系方式
全国服务热线: 15373739398

咨询热线:13616990759
联系人:张彤宇
地址:喀什市喀什新隆建设集团有限责任公司

selenium使用xpath定位元素

来源:918天堂   发布时间:2019-07-01   点击量:225

 

在学习XPath之前你应该对XML的节点,元素,属性,原子值(文本),处理指令,注释,根节点(文档节点),命名空间以及对节点间的关系如:父(Parent),子(Children),兄弟(Sibling),先辈(Ancestor),后代(Descendant)等概念有所了解。这里不在说明。

一、路径表达式语法: 

    路径 = 相对路径 | 绝对路径XPath路径表达式 = 步进表达式 | 相对路径 "/"步进表达式。步进表达式=轴 节点测试 谓词

说明:

    其中轴表示步进表达式选择的节点和当前上下文节点间的树状关系(层次关系),节点测试指定步进表达式选择的节点名称扩展名,谓词即相当于过滤表达式以进一步过滤细化节点集。谓词可以是0个或多个。多个多个谓词用逻辑操作符andor连接。取逻辑非用not()函数。

请看一个典型的XPath查询表达式:/messages/message//child::node()[@id=0],其中/messages/message是路径(绝对路径以"/"开始),child::是轴表示在子节点下选择,node()是节点测试表示选择所有的节点。[@id=0]是谓词,表示选择所有有属性id并且值为0的节点。

 

二、相对路径与绝对路径:

如果"/"处在XPath表达式开头则表示文档根元素,(表达式中间作为分隔符用以分割每一个步进表达式)如:/messages/message/subject是一种绝对路径表示法,它表明是从文档根开始查找节点。假设当前节点是在第一个message节点【/messages/message[1]】,则路径表达式subject(路径前没有"/")这种表示法称为相对路径,表明从当前节点开始查找。具体请见下面所述的"表达式上下文"

 

 三、使用百度首页进行实践

1.通过相对路径的属性值查找多个属性值使用and进行连接。

 

2.通过text函数进行查找,依旧可以和其他条件联合使用。记住函数是使用的()结尾

 //a[text()="学术"]

3.使用contains 属性值 text() 联合进行定位主要contains的方法不带等号

 

//a[contains(text(),"新闻") and contains(@href,"new") and @target="_blank" and text()="新闻"]

 

4.根据索引值进行定位使用last()函数。也可以直接赋索引值,因为标签个数有可能会变化,尽量使用函数进行加减

 

 

5使用xpath轴进行定位

轴名称

结果

ancestor

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

ancestor-or-self

选取当前节点的所有先辈(父、祖父等)以及当前节点本身

attribute

选取当前节点的所有属性

child

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

descendant

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

descendant-or-self

选取当前节点的所有后代元素(子、孙等)以及当前节点本身。

following

选取文档中当前节点的结束标签之后的所有节点。

namespace

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

parent

选取当前节点的父节点。

preceding

直到所有这个节点的父辈节点,顺序选择每个父辈节点前的所有同级节点

preceding-sibling

选取当前节点之前的所有同级节点。

self

选取当前节点。

ancestor节点使用方法(descendant的使用方法也是如此):

1.使用当前节点定位,找寻先辈的标签。

 

2.将祖辈是某个节点作为当前节点唯一祖辈

 

preceding-sibling(following-sibling用法一致)

 

找到同级节点标签为input,属性为name=ie 并且,想要查找的节点的标签是input,name属性是tn

 

//input[preceding-sibling::input[@name="ie"] and @name="tn"]

找到input标签属性name=ie的同级节点下input下属性name为f

 

//input[@name="ie"]/preceding-sibling::input[@name="f"]

 

parent和child用法类似,代表当前节点的父节点和子节点

 

其实看过好多博客,有人说xpath定位比较慢,用了这么长时间,感觉速度还好啊,个人感觉慢是相对的,1ms和50ms对于肉眼来说可以忽略不计的。

相关产品

COPYRIGHTS©2017 918天堂 ALL RIGHTS RESERVED 备案号:225