Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)

这篇文章继续介绍selenium web driver中的xpath定位器。上次介绍了绝对路径和相对路径的异同,以及怎样使用属性和一些关键字来定位html文档的节点,功能已经比较强大了。但如果还无法完成定位,那还可以用xpath的轴(axes)定位方法。轴定位有以下几种方法:

  1. child
  2. descendant
  3. parent
  4. ancestor
  5. following
  6. preceding
  7. following-sibling
  8. preceding-sibling
  9. self

第一种,child,查找的是当前节点下面第一层的某个指定节点。格式是

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第1张图片

比如下面的例子:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第2张图片

这个xpath找的是form下面第一个p标签下的label标签。再看一个多选的:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第3张图片

第二个class="row"的div下面第一层总共有三个的div。注意,某个节点下面第一层又叫做该节点的子节点。child嘛,孩子,其实你可以把它理解成找该节点的儿子或是女儿。

第二种,descendent,查找的是当前节点下面所有层的某个指定节点。格式是

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第4张图片

descendent与child不同,它是以当前节点为参照找下面所有的匹配节点,不局限在第一层。比如还是刚才的例子。我把child换成descendant:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第5张图片

你看,第二个class="row"的div下面所有的div都被高亮显示了。descendant是子孙的意思,指明了不光包含儿子和女儿,而是所有的子孙节点。

第三种,parent,查找的是当前节点上面一层的节点,也就是它的父节点。xpath一般是向下查询的,但轴定位允许其向上查询。查看其父节点的格式是:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第6张图片

用两个点代表父节点,这点和系统目录查找很像。比如下面的例子:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第7张图片

通配符星号代表所有节点。我的xpath会先找到name="password"的所有节点,显然,只有一个input标签满足这个条件。然后以这个input标签为参照查看它的父节点,这样又锁定了p标签。最后再查找p标签下面第一层的label。

当然,和不停地往下查找子节点一样,xpath也允许连续向上查找父节点:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第8张图片

第四种,ancestor,查找的是当前节点的所有祖先中的某个指定节点。格式是

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第9张图片

parent指的是当前节点上面一层的节点,而ancestor指的就是当前节点上面所有层的节点,所以叫祖先。比如:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第10张图片

name="password"的input标签有很多祖先,但我只选出标签是div的。

第五种,following-sibling,查找的是与当前节点同一层的某个指定节点,但出现位置在当前节点之后。格式是:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第11张图片

sibling是兄弟姐妹的意思,following是跟随、后面的意思,这里代表要查找的节点与当前节点出现在同一层,但出现在当前节点之后。比如:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第12张图片

我先锁定的是id=form1的form标签,然后找到它下面唯一的div标签,最后定位出现在div后面的所有同层的p标签节点。

第六种,preceding-sibling,查找的是与当前节点同一层的某个指定节点,但出现位置在当前节点之前。格式是:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第13张图片

与following-sibling正好相反,preceding-sibling指的是出现在当前节点之前的同层节点。比如:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第14张图片

我先锁定的是id=form1的form标签,然后找到它下面唯一的div标签,最后定位出现在div前面的所有同层的p标签节点。

第七种,following,查找的是所有出现在当前节点后面的某个指定节点,但不包括子孙节点。格式是:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第15张图片

这次没有sibling了,看似简单了,但要注意,虽然是找当前节点后面的,但following是不包含子孙节点的。比如:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第16张图片

先定位属性class等于col-md-6的div标签,再找出现在它后面的div节点。你看,只有一个标签高亮显示,其它的因为都是当前节点的子孙而被忽略。

第八种,preceding,查找的是所有出现在当前节点前面的某个指定节点,但不包括祖先节点。格式是:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第17张图片

这也好理解了,和following相反,只要出现在当前节点前面,而且不是它的祖先就行。比如:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第18张图片

先定位属性class包含login字段的div标签,再找出现在它前面的所有div节点。过滤掉的都是当前节点的祖先。

第九种,self,查找的是当前节点自己。格式是:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第19张图片

找的是当前节点自己,听起来有点扯,但self确实属于轴定位的关键字之一。比如:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第20张图片

选择id="pwd_alert"的label节点,然后再查它自己。好吧,我承认确实很扯。

以上9种xpath轴定位,除了self和parent,其它选出来的很可能是多个指定节点,但大多数时间我们只需要一个就够了。同样,我们可以使用索引。比如用following-sibling选某一个p标签:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第21张图片

我找的是form标签下面div后面的第三个p标签。或是用child选某一个div:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第22张图片

你也可以再练练following和descendant,都是一个原理。child,descendant,following,following-sibling这四者有个共同的特点:索引值是从上往下数的,越往下数值越大。

但是你如果试试ancestor/preceding/preceding-sibling,就会发现不一样。比如用ancestor选某一个div:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第23张图片

明明选的是第6个div,可在最上面。同理,preceding也是一样的:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第24张图片

所以,我们可以总结一下:索引值从上往下数(越往下数值越大)的是child,descendant,following,following-sibling;索引值从下往上数(越往上数值越大)的是ancestor,preceding,preceding-sibling。

上述9种xpath轴定位方法,再加上上一篇讨论的基本用法,xpath基本上能涵盖我们自动化定位的所有情况了。那我现在就演示一下用xpath定位元素,它的格式是:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第25张图片
image

打开示例网页,我们定位该页面上的元素,然后打印出来。代码如下:

Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第26张图片
Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2)_第27张图片

xpath就介绍到这儿,大家多练习。下篇文章我们讨论css selector。本篇文章的源代码是SeleniumXpath。

本篇知识点及注意事项:
1. 使用轴定位时,索引值从上往下数(越往下数值越大)的是child,descendant,following,following-sibling;索引值从下往上数(越往上数值越大)的是ancestor,preceding,preceding-sibling。

你可能感兴趣的:(Selenium Web Driver自动化测试(java版)系列下半部分(10) - xpath定位器(2))