XPath定位元素

XPath是另一种元素定位方式,就是通过元素在Dom中的位置进行定位。关于XPath的定义:

XPath 即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快的被开发者采用来当作小型查询语言。

XPath定位的过程中,分为两种类型,完整路径定位和相对路径定位。在Selenium自动化测试中,同学们可以使用这种强大语言的HTML元素定位方式。在Firefox中,借助于FirePath插件,能够快速获取一个元素的XPath。

认识XPath

首先,一起通过Dom树形结构来看看一个元素的位置信息。

见上图中,一步一步展开元素标签,最外层是html,其次是body,然后是id为wrapper的div,随后是id为head的div,进一步是id为s-top-left的div。在id为s-top-left的div中的第一个元素就是“新闻”所在的标签。

可以看到,定位“新闻”所在标签,用到了Dom树,以及排序等信息。这个过程其实就是XPath定位元素的过程。

在WebDriver中,XPath定位元素方法:

# 通过xpath定位元素
find_element_by_xpath()

XPath完整路径定位

XPath路径语言其实是一种规则,按照这个规则,一步一步进行下去就能够定位到需要的元素。这个过程如果人工定位会相对困难,且容易出错。通过FirePath插件,点击指定的元素就能够快速显示其XPath:

那么,依然以搜索Bela为例,将原来使用ID、Name定位的代码进行一个改写:

XPath相对路径

绝对路径定位是否能简化呢,这就是相对路径,能够缩短XPath的路径,同时达到相同的效果。那么,怎么获取相对路径呢,除了人工处理外,FirePath同样能帮我们快速获得相对路径。获取相对路径还是绝对路径,需要配置XPath,如下,取消 Generate absolute XPath , FirePath获取的路径就是相对路径了:

将绝对定位直接换成相对定位,看代码:

从上面看到,输入xpath: .//*[@id='kw'] ,而搜索按钮: .//*[@id='su'] 。现在可以看到,XPath定位这两个元素使用的路径就缩短了很多。细心的同学会发现,相对路径里面有一个很重要的关键字就是id,是的,其实,这里xpath就是使用的id寻找的这个元素。

属性定位

XPath的相对路径定位其实是一种属性定位,就是利用一个元素的属性来定位元素。参考XPath相对定位,通用模板:

.//{标签}[@{属性}='值']

这个模板包含3个占位符:标签、属性、值。例如,如果我们希望定位一个id为kw的input标签,就可以写成:

# 百度输入框属性定位
.//input[@id='kw']

比如如下标签:

<a href="http://www.baidu.com/more/" name="tj_briicon" class="s-bri c-font-normal c-color-t" target="_blank">更多</a>

对于的属性定位格式:

.//a[@name='tj_briicon']

最后

相比于id,name等的元素定位方式,XPath在元素定位过程中更加灵活、强大,但使用起来也相对困难,个人建议,考虑后期测试用例的维护成本,能用id、name等简单方式定位元素的地方,就用简单的方式!

IT赶路人

专注IT知识分享