目录
一、简介
二、节点关系
三、绝对路径与相对路径
一、简介
Xpath定位在selenium中属于常用的定位方式,首先来说下Xpath的一些概念,Xpath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言,用白话来说就是他是通过路径来获取元素位置的,像id、name等定位方式需要找到其唯一的值才能准确定位到具体位置,而使用Xpath定位则是通过其路径来确定元素的位置,就像是现实生活中的地址一样,直接输入XX国XX省XX市XX街道XX号就能准确定位到一个准确的地址。
二、节点关系
Xpath中有5种节点关系分别是:父节点(Parent)、子节点(Children)、兄弟节点(Sibling)、先辈节点(Ancestor)、后代节点(Descenadnt),可以先看下面的代码(忽略语法对错)和其对应的树状图来看下各个节点的含义。(为了理解方便,我在下面的树状图上加上了X.X去分辨其具体的位置)
<aaa> #1
<bbb> bbbb </bbb> #1-2.1
<bbb> bbbb </bbb> #1-2.2
<bbb> #1-2.3
<ccc> cccc </ccc> #1-2.3-1.1
<ccc> cccc </ccc> #1-2.3-1.2
</bbb> #1-2.3 (结束)
<bbb> #1-2.4
<ccc> #1-2.4-1.3
<ddd> #1-2.4-1.3-1.1
<eee> eeee </eee> #1-2.4-1.3-1.1-1.1
<fff> ffff </fff> #1-2.4-1.3-1.1-1.1
<fff> ffff </fff> #1-2.4-1.3-1.1-1.2
</ddd> #1-2.4-1.3-1.1(结束)
</ccc> #1-2.4-1.3(结束)
</bbb> #1-2.4(结束)
</aaa> #1(结束)
父节点(Parent):除了开始的节点外,之后每个节点都有自己的唯一的父节点,比如上面的aaa 就是4个bbb的父节点,ddd1.1是eee1.1、fff1.1、fff1.2的父节点。
子节点(Children):子节点可能有无数个也可能没有,比如上面的4个bbb节点就是aaa的子节点,eee1.1、fff1.1、fff1.2就是ddd1.1的子节点,
兄弟节点(Sibling):兄弟节点指的就是拥有相同父节点的节点。比如4个bbb节点就是兄弟节点,ccc1.1、ccc1.2就是兄弟节点,但是ccc1.1、ccc1.2与ccc1.3就不是兄弟节点,因为ccc1.3的父节点是bbb2.4,而ccc1.1、ccc1.2的父节点是bbb2.3.
先辈节点(Ancestor):先辈节点指的是父节点以上的节点,可能是某节点的父的父或者父的父的父等等以此类推。aaa是ccc1.1-1.3、ddd1.1、eee1.1、fff1.1、fff1.2的先辈节点。
后代节点(Descenadnt):后代节点指的是子节点以下的节点,可能是某节点的子的子节点、或者子的子的子节点。ccc1.1-1.3、ddd1.1、eee1.1、fff1.1、fff1.2都是aaa的后代节点。
三、绝对路径与相对路径
在了解到各个节点之间的关系之后,就可以去进行元素的定位了,定位方式一般有两种, 相对路径和绝对路径。
绝对路径:比如我想找fff1.1这个元素,我们就可以先找到aaa然后找他的子元素bbb2.4然后再找其子元素ccc1.3然后再找子元素ddd1.1最后找到其子元素fff1.1,这样从根节点一路查找过来的就是相对路径的方法,这种定位方式比较直观,但是找起来比较麻烦,需要从根目录一级一级的查找。
相对路径:相对路径相比较绝对路径来说更加有效率,相对路径可以从任意节点开始去写,不用从根目录一级一级的查找下来,还是我们要找fff1.1这个元素,因为ddd元素是唯一的,我们可以直接定位到ddd1.1元素,然后再找他的子节点即可找到fff1.1的节点。
(上面是为了方便更容易找到其位置所以加上了X.X,实际上bbb是4个相同的元素、fff是两个相同的元素,如果想找到的话只能通过下标去进行准确的定位,下一篇文章会具体说明如何在相同的兄弟节点中找到自己想要的节点,这里只需要理解其概念就行)
可以试着在浏览器的控制台,找到需要定位的元素,然后在其控制台的位置上右击直接复制其相对路径或者绝对路径去体验下,看看和自己实际想到的是不是一样。
这篇文章先了解下Xpth的节点关系和路径查找方式,下一节用实际例子来说下,如何进行元素定位及其语法的写法。