Xpath常用的定位方法

相信做过selenium UI自动化的朋友都知道,工作中大部分的元素定位都是使用xpath进行定位,所以xpath是UI自动化工作中非常重要的一个环节,所以我单独整理出来一篇博客出来~~希望对大家有帮助~

相对定位

相对定位是两个杠表示“//”,相对路径易维护

绝对路径

绝对定位用一个杠“/”, 绝对路径一个层级变化所有空间都有变化

/html/body/div[1]/section/section/main/div[2]/div[2]/div[1]/div[2]/button[1]/span

last()方法
当标签存在多个相同的时候,可以使用xpath中的last()方法,定位到最后一个

//标签名[last()]
//span/ul//li[last()]

如果我们要定位到倒数第二个,可以在last() 后面加上 -1,代表倒数第二个

//标签名[last()-1]
//span/ul//li[last()-1]

属性查找@

如,这里我们以百度为例,如果我们要定位到百度的id元素,那么可以使用 //标签名[@元素名称=‘元素值’]

 //标签名[@元素名称='元素值']
//input[@id='kw']

xpath逻辑表达式-and

当一个元素无法定位到唯一值得时候,我们可以使用and表达式,同一个标签下定位多个元素


//标签名[@元素名称='元素值' and @元素名称='元素值']
//input[@id='kw' and @class='s_ipt']

xpath表达式-or

xpath 中 or的表达式和and很像,指的是当你元素满足其中一个条件的时候,就可以定位到,如图,在百度搜索框中,我们故意将@class='s_t’元素写错,内容中并没有这个元素,

// 标签名[@元素名称='元素值' or @元素名称='元素值']
//input[@id='kw' or @class='s_t']

非查找控件

如图,如果我们想要查找元素值不等于某个值的内容,可以使用!=方法,但是这个方法在工作中用的比较少,目前我还没有用到过,不过xapth提供了这个方法,可以结合场景使用~

//标签名称[@元素名称 != '元素值']
//input[@class!='1111']

Not查找

//标签名[not(.='元素值')
//year[not(.=2005)]
//div[not(@id="tab-AndroidVersions")]

这里没有找到合适的场景,意思就是查找year内容不为2005的内容 注:“.”就等于text()

模糊匹配

//标签名[contains(text(), "内容"]
//div[contains(text(), "更新")]

这里的意思是模糊查询内容包含“更新”的元素

精准匹配

//标签名[(text()='内容')]
//div[(text()='更新文案')]

使用大于小于符号定位

//div[@class="cell" and text()>'1336']
//div[@class="cell" and text()<'1336']

如图,当我们商品列表中有多个商品ID,那我们想要定位到ID大于或者小于1336的数据,可以通过上面的方式。

轴方式定位

轴表达式说明parent::* :表示当前节点的父节点元素ancestor::* :表示当前节点的祖先节点元素child::* :表示当前节点的子元素 /A/descendant::* 表示A的所有后代元素self::* :表示当前节点的自身元素ancestor-or-self::* :表示当前节点的及它的祖先节点元素descendant-or-self::* :表示当前节点的及它们的后代元素following-sibling::* :表示当前节点的后序所有兄弟节点元素preceding-sibling::* :表示当前节点的前面所有兄弟节点元素following::* :表示当前节点的后序所有元素preceding::* :表示当前节点的所有元素
  1. parent:: 当前节点的父节点元素*

//div[@class="cell" and text()='1338']/parent::*

如图,我们要定位到ID为1338元素的父节点元素,可以使用如上xpath轴定位, “*” 表示匹配所有

  1. following-sibling::
/bookstore/book[1]/following-sibling::*

查找books1所有的同级元素都查找出来,“*”表示所有

//div[3]/table/tbody/tr[1]/td[1]/following-sibling::td[2]

查找td[1]下同级节点下的第二个节点

3. following-sibling::当前节点的前面所有兄弟节点元素

/bookstore/book[2]/year/preceding-sibling::*

意思是:查找books[2]下year前的同级节点

  1. 查找节点的父辈
/bookstore/book[2]/year/parent::*
  1. 查找节点的子辈
/bookstore/book[2]/descendant::*

使用position位置定位

意思是定位到th标签下的第一个

//th[@class="c-id " and position()=1]


也可以//th[@class="c-id " and position()<2] 这样用~

史上最全的xpath定位方法 全在这了!相关推荐

  1. 史上最全的xpath定位方法

    XPath是一种用于在XML和HTML文档中定位元素的语言.下面是一些XPath路径查找的技巧和思路: 使用元素名称定位:可以使用元素的名称来查找元素.例如,要查找所有的<div>元素,可 ...

  2. xpath定位(全)

    xpath定位(全) 简介 XPATH在浏览器中的验证方式 1. 绝对定位: 2. 相对路径: 3. 标签属性定位: 4. 节点文本定位 5. XPath Axes(轴)和Step(步) 6. 函数 ...

  3. 元素定位-XPATH定位方法总结

    1.Xpath定位方法探讨 xpath是比较常用的一种定位元素的方式,因为它很方便,缺点是,消耗系统性能.如果Xpath使用的比较好,几乎可以定位到任何页面元素,而且受页面变化影响较小. 1.1.什么 ...

  4. Xpath定位方法深入探讨及元素定位失败常见情况

    一.Xpath定位方法深入探讨 (1)常用的Xpath定位方法及其特点 使用绝对路径定位元素. 例如: driver.findElement(By.xpath("/html/body/div ...

  5. python—selenium —xpath定位方法详解

    前言 今天我们来聊聊selenium -- xpath定位方法,我们都知道selenium有八大定位策略分别是id.name.class name.tag name.link text.partial ...

  6. 基于selenium和xpath定位方法爬取某个话题下的微博内容!是真的强!

    为什么这期要叫暴力爬虫呢?因为笔者认为基于selenium方法非常的简单粗暴!!理由有两点: 1.在selenium方法下,我们可以通过调用浏览器驱动来实现模拟鼠标点击.滑轮下滑以及输入文本等操作,就 ...

  7. 爬虫系列(2):暴力爬虫——基于selenium和xpath定位方法爬取某个话题下的微博内容

    为什么这期要叫暴力爬虫呢?因为笔者认为基于selenium方法非常的简单粗暴!!理由有两点: 1.在selenium方法下,我们可以通过调用浏览器驱动来实现模拟鼠标点击.滑轮下滑以及输入文本等操作,就 ...

  8. 史上最牛的穷人创业方法

    一定要有钱才能创业吗? 很多人肯定会回答是,因为创业资金是必须的,没有资金项目就不能运作,公司就不能运作,就谈不上创业!但是真的是这样吗?请看史上最牛的穷人创业:http://www.goocy.co ...

  9. 史上最正确的achemy安装方法

    alchemy 配置教程 Alchemy3D是一款基于Adobe Alchemy技术的Flash 3D引擎,以下是其基本的开发环境: Cygwin + Adobe Alchemy Toolkit + ...

最新文章

  1. mysql 开仓函数_MySQL函数大全 及用法示例
  2. Oracle数据库设计规范
  3. Flask 中内置的 Session
  4. 自带数据线的迷你数显充电宝,好用到哭
  5. [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并
  6. 无序数组求第K大/第K小的数
  7. Redis学习(5)-常用命令
  8. 关于 CSDN 下载频道知识产权保护的声明
  9. Effective_STL 学习笔记(二十六) 尽量使用 iterator 代替 const_iterator,reverse_iterator和const_reverse_iterator...
  10. 文件正由另一进程使用,该进程无法访问该文件,解决方法
  11. 【二分法】剑指offer:二维数组中的查找
  12. wind 修复 matlab 插件后仍然无效
  13. 用计算机清点木材的数量,计算机在木材工业中的应用.doc
  14. springcloud如何制作一个物联网产品
  15. 浅看Redis内存回收
  16. 编码,隐匿在计算机软硬件背后的语言读书笔记(6/7/8)
  17. Java 中ArrayList中的重复数据
  18. 绘制地图格网时,如何只显示度的数值
  19. 能玩游戏的计算机名字,适合玩大型游戏的笔记本电脑排行榜前十名
  20. 软件工程期末复习(超详细)

热门文章

  1. sqrt在C语言中是啥意思,C语言 sqrt 是什么意思?_后端开发
  2. FPS(farthest_point_sample) 最远点采样并可视化(附open3d python代码)
  3. 【学习笔记-FPGA】verilog语言中assign的使用
  4. 2021年中国苹果行业产业链分析:上下游市场稳定,苹果行业市场运行情况平稳增长 [图]
  5. Python网络协议编程之HTTP协议详解
  6. 干货自助时代,带你玩转Big Data:SDCC 2017·深圳站大数据专场一轮预告上线
  7. 金蝶K3WISE15.1最新部署步骤
  8. MATLAB GUI报错“创建控件失败,ProgIDMWLED.LEDCtrl.1无效”的原因
  9. Ubuntu查看服务占用内存情况
  10. mysql 2003错误 10055,MYSQL无法连接提示10055错误的解决方法