xpath定位

Posted mrwuzs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xpath定位相关的知识,希望对你有一定的参考价值。

xpath定位

被测试网页的HMTL代码

技术图片

<html>
    <body>
        <div id="div1">
            <input name="div1input"></input>
                <a href="http://www.sogou.com">搜狗搜索</a>
                    <img alt="div1-img1" src="http://www.sogou.com/images/logo/new/sogou.png" href="http://www.sogou.com">搜狗图片</img>
            <input type="button" value="查询"></>
        </div>
        <br>
        <div name="div2">
            <input name="div2input"></input>
                <a href="http://www.baidu.com">百度搜索</a>
                    <img alt="div2-img2" src="http://www.baidu.com/img/bdlogo.png" href="http://www.baidu.com">百度图片</img>
        </div>
    </body>
</html>

技术图片

绝对路径定位方式:

在被测试网页中,查找第一个 div 标签中的按钮。

XPath的表达式: /html/body/div/input[@value="查询"]

Java的定位语句: WebElement button= driver.findElement(By.xpath("/html/body/div/input[@value=‘查询‘]"));

相对路径定位方式:

在被测试网页中,查找第一个 div 标签中的按钮。
XPath的表达式:
// input[@value="查询"]
Java的定位语句:
WebElement button= driver.findElement(By.xpath("//input[@value=‘查询‘]"));

XPath 使用索引号定位:

被测试网页的HMTL代码

使用索引号定位方式: 在被测试网页中,查找第二个 div 标签中的“查询”按钮。

XPath的表达式: //input[2]

Java的定位语句: WebElement button= driver.findElement(By.xpath("//input[2]"));

XPath 使用页面元素的属性值定位:

使用页面属性值方式:

我们尝试定位被测试网页中的第一个图片元素。
XPath 的表达式
//img[@alt=‘div1-img1‘]
Java的定位语句:
WebElement img= driver.findElement(By.xpath("//img[@alt=‘div1-img1‘]"));

XPath 使用页面元素的属性值定位:

预期定位的页面元素 定位表达式示例 使用的属性值
定位页面的第一个图片 //img[@href=‘http://www.sogou.com‘] 使用img标签的href属性值
定位第二个div中第一个Input输入框 //div[@name=‘div2‘]/input[@name=‘div2input‘] 使用div标签的name属性值 使用 input标签的name 属性值
定位第一个div中的第一个链接 //div[@id=‘div1‘]/a[@href=‘http://www.sogou.com‘] 使用的div标签的id 属性值 使用了a标签的href属性值
定位页面的查询按钮 //input[@type=‘button‘] 使用了type属性值

XPath 使用模糊页面属性值定位:

XPath函数 定位表达式示例 表达式解释
Starts-with() //img[starts-with(@alt,‘div1‘)] 查找图片alt属性开始位置包含’div1’关键字的页面元素
Contains() //img[contains(@alt,‘g1‘)] 查找图片alt属性包含’g1’关键字的页面元素

使用 XPath 的轴(axis)进行元素定位:

轴:
XPath轴(XPath Axes)可定义某个相对于当前节点的节点集:
1、child 选取当前节点的所有子元素
2、parent 选取当前节点的父节点
3、descendant 选取当前节点的所有后代元素(子、孙等)
4、ancestor 选取当前节点的所有先辈(父、祖父等)
5、descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身
6、ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
7、preceding-sibling 选取当前节点的开始标签之前的所有同级节点
8、following-sibling 选取当前节点的结束标签之后的所有同级节点
9、preceding 选取文档中当前节点的开始标签之前的所有节点
10、following 选取文档中当前节点的结束标签之后的所有节点
11、self 选取当前节点
12、attribute 选取当前节点的所有属性
13、namespace 选取当前节点的所有命名空间节点

技术图片

XPath轴关键字 轴的含义说明 定位表达式示例 表达式解释
ancestor 选择当前节点上层的所有节点 //img[@alt=‘div2-img2‘]/ancestor::div 查找到alt属性值为div2-img的图片,并基于图片位置找到他上级的div页面元素
descendant 选择当前节点下层的所有节点注:不能超出当前节点的结束标签 //div[@name=‘div2‘]/descendant::img 查找到name属性值的div页面元素,并基于div的位置找到他下级所有节点中的img页面元素
following 选取当前节点的结束标签之后的所有节点注:仔细体会与descendant的区别 //div[@id=‘div1‘]/following::img 超找到id 属性值为div1的div页面元素,并基于div的位置找到它后面(结束标签之后)节点中的img页面元素
following-sibling 选取当前节点的结束标签之后的所有平级节点 ,自上而下,离当前结点最近的为索引1,越往下数字越大。 //a[@href=‘http://www.sogou.com‘]/follo wing-sibling::input 查找到链接地址为http://www.sogou.com的链接页面元素,并基于链接的位置找到它后续节点中input页面元素
preceding 选择当前节点开始标签之前的所有节点 //img[@alt=‘div2-img2‘]/preceding::div 查找到alt属性值为div2-img2的图片页面元素,并基于图片的位置找到它前面节点中的div页面元素
preceding-sibling 选择当前节点开始标签之前的所有同级节点,自下而上,离当前结点最近的为索引1,越往上数字越大。 //img[@alt=‘div2-img2‘]/preceding-sibling ::a[1] 查找到alt属性值为div2-img2的图片页面元素,并基于图片的位置找到它前面同级节点中的第二个链接页面元素

例子:

如下,需要根据下图中的“河南”关键字,定位到前面的操作按钮,:

技术图片

查看html代码,结构如下

技术图片

1)先找到河南的元素位置

xpath=//a[contains(text(),‘河南‘)]

2)根据dom结构,相对定位

xpath=//a[contains(text(),‘河南‘)]/parent::li/child::i

技术图片

参考:https://www.cnblogs.com/testlife007/p/4263745.html

以上是关于xpath定位的主要内容,如果未能解决你的问题,请参考以下文章

利用Xpath和jQuery进行元素定位示例

webdriver实例14-Xpath定位的几种方法

xpath定位

appium python xpath 定位问题,新手问题。

xpath定位selenium自动化时遇到的轴定位。

xpath 定位单选框