当前位置: 首页 > news >正文

记录两种好用常用的xpath定位方式

目录

总结概览

写法一:xpath=//text()[.='选择网元类型']/parent::*

逐步分解:

完整解释:

适用场景与特点:

写法二:xpath=(//plx-select[.//text()='选择指标']//div)[2]

逐步分解:

完整解释:

适用场景与特点:

对比总结


总结概览

这两种写法代表了两种不同的XPath定位策略:

  • 第一种:基于精确的文本内容定位,然后向上查找父元素。精确、直接

  • 第二种:基于相对模糊的文本内容定位到一个复杂组件,然后通过层级关系定位到其内部的下拉箭头。灵活、实用

xpath=//text()[.='选择网元类型']/parent::*

xpath=(//plx-select[.//text()='选择指标']//div)[2]

写法一:xpath=//text()[.='选择网元类型']/parent::*

这是一种非常精确的定位方法。

逐步分解:
  1. //text()

    • 在HTML DOM中,text() 是一个节点类型,代表元素的文本内容。

    • //text() 表示在整个HTML文档中,查找任意层级下的所有文本节点。

  2. [.='选择网元类型']

    • 这是一个谓词过滤器(Predicate)。[ ] 里的条件用于筛选节点。

    • . 代表当前节点,即上一步找到的每一个文本节点。

    • 这个条件的意思是:文本节点的内容必须完全等于“选择网元类型”

  3. /parent::*

    • / 表示从当前节点集(即内容为“选择网元类型”的文本节点)向下一步。

    • parent:: 是轴(Axis),表示选择当前节点的父节点

    • * 是一个节点测试(Node Test),表示匹配任何元素节点(即HTML标签,如<div><span><button>等)。

完整解释:

在整个文档中,找到内容完全等于“选择网元类型”的文本节点,然后获取它的直接父元素。

适用场景与特点:
  • 精确性:通过唯一的文本内容来定位,非常可靠。

  • 目标明确:你想要点击或操作的,正是包含这个特定文字的那个元素(比如一个按钮、一个下拉框的标签、一个标题等)。

  • 依赖文本:如果网页文字发生变更(例如从“选择网元类型”改为“请选择网元”),此XPath将立即失效。

  • 结构假设:它假设你需要的操作目标就是文本的直接父元素。如果文本在一个复杂的嵌套结构中(例如<span><i>选择网元类型</i></span>),那么父元素可能是<i>而不是外层的<span><button>,这时可能需要使用 parent::div 或 ancestor::button 来更精确地定位。

写法二:xpath=(//plx-select[.//text()='选择指标']//div)[2]

这是一种更复杂、更实用的定位方法,常用于操作现代Web框架(如Vue, Angular, React)生成的UI组件。

逐步分解:
  1. //plx-select

    • 查找文档中任意层级的 <plx-select> 元素。这很可能是一个自定义的Web组件(例如来自某个UI库,如Element UI, Ant Design等,它们通常会生成特定的标签名)。

  2. [.//text()='选择指标']

    • 这也是一个谓词过滤器,用于筛选上一步找到的 <plx-select> 组件。

    • .//text() 中的 . 代表当前节点(即每个 <plx-select> 组件)。所以 .//text() 的意思是:在当前 <plx-select> 组件的所有后代节点中查找文本节点。

    • 条件 ='选择指标' 表示在这些后代文本节点中,至少有一个包含“选择指标”这个文字。

    • 这个条件的目的是:找到那个标签文字是“选择指标”的下拉框组件。

  3. //div

    • 上一步筛选出的特定 <plx-select> 组件内部,继续查找任意后代节点中的 <div> 元素。一个复杂的下拉框组件内部通常包含很多个 <div>

  4. (......)[2]

    • 括号 () 将前面的整个路径 //plx-select[.//text()='选择指标']//div 包裹起来,先计算出所有匹配的 <div> 元素的集合。

    • [2] 表示从这个结果集中选取第二个匹配的 <div> 元素。

完整解释:

首先定位到标签为“选择指标”的那个自定义下拉框组件,然后在这个组件内部找到所有的 <div> 元素,并从中选择第二个。

适用场景与特点:
  • 组件化开发:专门用于定位由现代前端框架构建的复杂UI组件。

  • 操作特定部分:这种写法通常用于定位下拉框的箭头图标下拉区域。因为第一个 <div> 可能是整个组件的容器,第二个 <div> 可能就是那个可点击的下拉箭头。

  • 相对稳定:通过组件的标签名 (plx-select) 和标签文本来定位,比单纯依赖CSS类名或动态ID更稳定。

  • 索引依赖[2] 是一个脆弱点。如果组件的HTML结构发生变化(比如在开头插入了一个新的 <div>),那么原本的目标元素就可能变成 [3],导致定位失败。这是一种“通过位置定位”的方法。

  • 文本模糊匹配:原写法是精确匹配,可以改为模糊匹配以增强鲁棒性,例如://plx-select[contains(.//text(), ‘选择指标’)]//div[2]

对比总结

特性写法一://text()[.='选择网元类型']/parent::*写法二:(//plx-select[.//text()='选择指标']//div)[2]
策略文本驱动:直接通过可见文本定位其父容器。组件驱动:先定位组件,再定位组件内部的特定子元素。
精确度非常高,直接定位到文本的父元素。相对较低,依赖于组件内部结构的稳定性(特别是索引[2])。
灵活性较弱,严格依赖文本内容和直接的父子关系。较强,能处理复杂的嵌套组件。
典型用途定位按钮、链接、标题等文本明确的简单元素。定位复杂UI组件(如下拉框、日期选择器)的特定交互部分(如箭头、输入框)。
脆弱点文本内容改变。组件内部HTML结构改变(特别是索引位置)。

在实际的自动化测试(如Selenium)中,第二种写法非常常见,因为测试对象大多是这种复杂的UI组件。而第一种写法则更通用,适用于定位任何包含已知文本的元素。

http://www.dtcms.com/a/471035.html

相关文章:

  • 怎么选一个适合自己的网站国外建站网址
  • 国外主题网站seo最新快速排名
  • 网站类型定位分析网站建设160页答案
  • spring webflux
  • 福永网站设计设计常用网站
  • 如何免费建设自己稳定的网站网络班级网站建设
  • 命名管道 vs 匿名管道的内核缓冲区区别
  • 基于MATLAB生成雷达脉冲信号
  • 百度网盘 13.11.4 | 支持倍速播放,去除广告及冗余功能,界面简洁,体积小巧
  • 牛客算法_数组
  • 怎样建立自己购物网站阿里云gpu服务器租用费用
  • 浙江省网站备案时间手机网站开发 宽度
  • 计算学习理论:周志华《机器学习》中的理论基石
  • 怎么做 社区网站首页wordpress报表
  • 建个网站需要多少钱圣宝电动车大架号在哪里做有后台的网站
  • linux学习笔记(26)计算机网络基础
  • 网站建设与维护书籍推荐魔方网站建设网站制作
  • h5网站要多久工商注册名称核准
  • Spring Boot 3零基础教程,依赖管理机制,笔记06
  • 做网站得花多少钱wordpress 百度推广
  • AI在安全运营中的四大价值与制约
  • Node.js 24.10.0: 拥抱现代 JavaScript 与增强性能
  • 1.2、网络安全攻防实验室搭建指南:VMware + Kali Linux + Win10 全流程
  • 网站规划模板下载wordpress导入数据库后出现乱码
  • UPage 正式开源!
  • 网站建设外包工作室建设厅网站首页
  • 07-docker-compose容器编排
  • 网站密钥怎么做百度投诉中心在线申诉
  • 数据库、API和MCP等概念
  • 敬请期待打一生肖seo公司如何优化