![6e44364b332653eb918d9b7f4a22601d.png](https://i-blog.csdnimg.cn/blog_migrate/cf59848bde750afcf2d47585f1320de2.jpeg)
场景
使用Selenium进行自动化测试,一大难题就是元素定位。虽然Selenium支持使用ID、name、Class、链接文字等多种方式进行元素识别,但对于复杂的网页,采用富客户端框架的前台界面,部分界面元素特征的稳定性无法保证,导致识别失败。如果生搬硬套使用ID、name等方式,会导致自动化脚本可用率降低,增加了投入成本。
通常情况下, 我们可以浏览器自带的定位方式, Firefox的F12, Chrome的开发者工具, 找到元素右键copy-copy xpath即可.
本文推荐使用手写定位方式,它不会局限于工具, 如果你写的相对定位, 维护成本会较低. 以下介绍XPath定位的几种方式:绝对路径、相对路径、索引号、属性值、文本内容,其中属性值和文本内容说明模糊匹配的使用。在多种XPath定位方式中,推荐使用相对路径、属性值、文本内容和Axis组合的方式,并给出界面识别的推荐规则。
通过XPath的组合,让你的自动化测试不再担心元素定位问题。
基本语法
XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:
![2eda5354338c3bcb9c1e782c88da478d.png](https://i-blog.csdnimg.cn/blog_migrate/e30105a66208371737f2923ca0b9a79d.jpeg)
定位方式
html代码如下:
<html>
<body link="#0000cc">
<div id="wrapper" style="display: block;">
<div id="content" style="display: block;">
<p>请输入内容:</p>
<div id="u1" style="display: block;">
<div id="m">
<p id="lg">
<p id="nv">
<div id="fm">
<a href="http://www.baidu.com">百度一下</a>
<form id="form" class="fm" action="/s" name="f1">
<span class="s_ipt_wr">
<input id="kw" type="text" name="wd">
</body>
</html>
1.绝对路径定位
使用绝对路径的方式定位除非是其父级元素都没有一个唯一识别的元素才使用该方式;假如要定位到输入框,那么使用绝对路径的方式为:
xpath= /html/body/div/div/div/div/div/form/span/input
就是从根部开始找,一级一级往下走,如果有同级别的需要用[]标明序号,从1开始
2. 通过属性查找
- xapth = //*[@id="kw"]
- xpath = //input[@id="kw]
- xpath = //input[@type="text"]
- xpth = //input[@name="wd"]
//input表示匹配input标签的所有元素, //*表示匹配所有元素的标签
注意:要保证这些元素可以唯一的识别一个元素
3.组合定位
如果input标签中 id不是唯一的,type也不是唯一的,但在该页面中包含该id和type的只有这个元素时,那么我们可以用组合的方式定位
xpath = //input[@id="kw and @name="wd"]
当然还有or, 但是 慎用
4.找父级属性
如果自己没有唯一的标志,那么就找自己的上级(父级),或者上级的上级,以此类推。
找父级:xpath=//span[@class="s_ipt_wr"]/input
找父级的父级:xpath=//form[@id="form"]/span[1]/input
5.跳级
如果需要定位的元素在该页面不是唯一,但在某个容器内是唯一的,当然那个容器必须要有唯一的标志; 跳级的话要用两个//
xpath = //div[@id="wrapper"]//input[@id="kw"]
6. 其它
- contains: xpath =//input[contains(@id,"w")], 表示选择id中包含"w"的input节点
- text(): xpath= //a[text()="地图"]. 由于一个节点的文本值不属于属性, ,所以,用text()函数来匹配节点
除了上述xpath定位方式以外, 还可以通过轴和步这些高阶写法来完成. 对于测试的同学来讲, 以上已经够用, 有兴趣的同学可以自行研究.
温馨提示: 大家如果觉得这个专栏还不错, 一定记得点赞收藏哟!如果学习中遇到困难, 可以发私信进行交流~