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,查找的是当前节点下面第一层的某个指定节点。格式是

比如下面的例子:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

image

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容