selenium xpath定位

selenium-xpath定位

<span style="background-color:#2d2d2d"><span style="color:#cccccc"><code class="language-javascript">element_xpath <span style="color:#67cdcc">=</span> driver<span style="color:#cccccc">.</span><span style="color:#f08d49">find_element</span><span style="color:#cccccc">(</span>By<span style="color:#cccccc">.</span><span style="color:#f8c555">XPATH</span><span style="color:#cccccc">,</span> <span style="color:#7ec699">'xpath表达式'</span><span style="color:#cccccc">)</span>
</code></span></span>

xpath定位说明

xpath即为XML路径语言(XML Path Language),是由国际标准化组织W3C指定的,一种用来确定XML文档节点位置的语言

xpath定位优点

1.相较于其他定位方式,可支持更多定位方法,如:布尔逻辑判断、模糊定位等
2.可支持web定位、Android app原生页面定位

xpath定位缺点

1.需要从头到尾解析整个页面,速度较慢

xpath调试方法

方法1:在浏览器开发者模式的elements中,Ctrl+F搜索栏输入xpath表达式
方法2:在浏览器开发者模式的console中,按如下格式可验证表达式

<span style="background-color:#2d2d2d"><span style="color:#cccccc"><code class="language-javascript"><span style="color:#f08d49">$x</span><span style="color:#cccccc">(</span><span style="color:#7ec699">"xpath表达式"</span><span style="color:#cccccc">)</span>   # 表达式中存在引号,则使用单引号,<span style="color:#7ec699">'$'</span>可更换为<span style="color:#7ec699">'$$'</span>
</code></span></span>

xpath节点

在xpath中,有七种类型的节点(node):元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)
在开始xpath语法前,我们需要简单了解这几种节点:

节点名称说明示例
元素节点网页中的各个标签如<textarea>…</textarea>、<p>…</p>
根节点网页的第一个元素节点网页的根节点通常为<html>…<html>
属性节点标签中的各个属性如<div id=‘su’ >…</div>,id即为div节点的属性
文本节点标签的文本如<div>啦啦啦</div>,'啦啦啦’即为div节点的文本

xpath语法

xpath使用路径表达式描述目标节点与网页头的关系

绝对路径 & 相对路径

路径表达式有两种结构,分别为:

  • 绝对路径:从根节点/html开始往下,一层层的表示出来直到需要的节点为止。以百度输入框为例,表达式为:
<span style="background-color:#2d2d2d"><span style="color:#cccccc"><code class="language-javascript"><span style="color:#67cdcc">/</span>html<span style="color:#67cdcc">/</span>body<span style="color:#67cdcc">/</span>div<span style="color:#cccccc">[</span><span style="color:#f08d49">1</span><span style="color:#cccccc">]</span><span style="color:#67cdcc">/</span>div<span style="color:#cccccc">[</span><span style="color:#f08d49">2</span><span style="color:#cccccc">]</span><span style="color:#67cdcc">/</span>div<span style="color:#cccccc">[</span><span style="color:#f08d49">5</span><span style="color:#cccccc">]</span><span style="color:#67cdcc">/</span>div<span style="color:#cccccc">[</span><span style="color:#f08d49">1</span><span style="color:#cccccc">]</span><span style="color:#67cdcc">/</span>div<span style="color:#67cdcc">/</span>form<span style="color:#67cdcc">/</span>span<span style="color:#cccccc">[</span><span style="color:#f08d49">1</span><span style="color:#cccccc">]</span>
</code></span></span>
  • 相对路径:从任意节点开始,根据节点描述信息找到需要的节点。同样以百度输入框为例,表达式为:
<span style="background-color:#2d2d2d"><span style="color:#cccccc"><code class="language-javascript"><span style="color:#999999">//input[@id='su']</span>
</code></span></span>

对比两种表达式,可以发现:

  • 相对路径更简洁,方便阅读
  • 相对路径更稳定,当前端页面有结构变动就容易引起绝对路径发生变化

因此,在项目中几乎都是使用相对路径进行定位

xpath基本表达式

表达式说明示例示例说明
nodename选取此节点的所有子节点html选取<html>根节点的所有子节点
/从根节点选取,或者用来选择子节点/html/body/textarea选择<body>中的所有<textarea>子节点
//从匹配节点开始选取,或者选择后代节点/html/body//textarea选择<body>中的所有<textarea>后代节点
|选择多个节点//div|//a选择所有<div>节点和<a>节点
选择当前节点的父节点//p/…选择所有<p>的父节点
*选择所有节点/html/body/*选择<body>中的所有节点

xpath谓语表达式

谓语表达式(predicate):紧跟在节点后面,嵌入在[]中的一段表达式,可用来筛选多个同名节点
谓语表达式作用原理:获取节点信息,通过表达式判断节点是否符合要求,为True则返回该节点
谓语格式:

<span style="background-color:#2d2d2d"><span style="color:#cccccc"><code class="language-javascript">节点名称<span style="color:#cccccc">[</span>谓语<span style="color:#cccccc">]</span>
</code></span></span>
常用谓语说明示例示例说明
n节点编号//div[2]选择所有<div>节点且该节点是其父级的第二个<div>节点
last()最后一个节点//div[last()]选择所有<div>节点且该节点是其父级的最后一个子节点
position()比较节点编号//div[position() < 3]选择所有<div>节点且该节点是其父级的前两个<div>节点
@属性属性//input[@id]选择所有<input>节点且该节点带id属性
@属性=‘属性值’比较属性//input[@id=‘kw’]选择所有<input>节点且该节点id属性为’kw’
text()比较节点文本//a[text()=‘新闻’]选择所有<a>节点且该节点文本为’新闻’
谓语运算符说明示例示例说明
= !=
> <
>= <=
大小比较/html/body/div[position()=2]选择<body>中的第2个<div>子节点
+ - *、
div mod
加减乘除求余/html/body/div[last()-1]选择<body>中的倒数第2个<div>子节点
and or not()或、且、非运算//*[@id=‘kw’ and @class=‘s_ipt’]选择所有id='kw’并且class='s_ipt’的节点
contains()包含//*[contains(text(), ‘新闻’)]选择所有文本带有’新闻’二字的节点
starts-with()头部包含//*[starts-with(@id, ‘s’)]选择所有文本以’新闻’开头的节点

备注:

  1. last()、position()、text()、not()这类带有括号的表达式,实质都是xpath提供的函数,本篇文章只列出了常用函数
  2. 根据W3C标准,第一个节点编号应该是[1],但在IE5及更高版本中第一个节点编号是[0]

xpath轴(axis)

        轴:表示所选节点与当前节点之间的树关系,用来筛选对于当前节点有相同关系的一类节点
轴格式:

<span style="background-color:#2d2d2d"><span style="color:#cccccc"><code class="language-javascript">当前节点<span style="color:#67cdcc">/</span>轴名称<span style="color:#67cdcc">:</span><span style="color:#67cdcc">:</span>节点名称
</code></span></span>
说明示例示例说明
ancestor先辈节点//input[@id=‘kw’]/ancestor::\ *选择id='kw’的<input>节点的所有先辈节点
ancestor-or-self先辈节点以及当前节点
attribute节点属性
child子节点,等同于//html/body/child::div选择<body>中的所有<div>子节点
descendant后代节点,等同于///html/body/descendant::div选择<body>中的所有<div>后代节点
descendant-or-self后代节点以及当前节点
following结束标签之后的所有节点
namespace命名空间
parent父节点
preceding开始标签之前的所有节点
preceding-sibling当前节点之前的所有同级节点
self当前节点

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在gitlab中指定自定义 CI/CD 配置文件

文章目录 1. 介绍2. 配置操作3. 配置场景3.1 CI/CD 配置文件在当前项目step1&#xff1a;在当前项目中创建目录&#xff0c;编写流水线文件存放在该目录中step2&#xff1a;在当前项目中配置step3&#xff1a;运行流水线测试 3.2 CI/CD 配置文件位于外部站点上step1&#xff1a…

掌动智能性能压力测试优势有哪些

企业通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。本文将介绍性能压力测试的价值及主要优势! 一、性能压力测试的价值 1、评估系统能力&#xff1a;有助于参数的基准测试&#xff0c;可以度量系统的响应时间;还有助于检查系统是否可…

OpenCV-Python小应用(九):通过灰度直方图检测图像异常点

OpenCV-Python小应用&#xff08;九&#xff09;&#xff1a;通过灰度直方图检测图像异常点 前言前提条件相关介绍实验环境通过灰度直方图检测图像异常点代码实现输出结果 参考 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff…

基于springboot实现高校党务平台管理系统【项目源码】

基于springboot实现高校党务平台管理系统演示 Java技术 Java是由Sun公司推出的一门跨平台的面向对象的程序设计语言。因为Java 技术具有卓越的通用性、高效性、健壮的安全性和平台移植性的特点&#xff0c;而且Java是开源的&#xff0c;拥有全世界最大的开发者专业社群&#x…

ubuntu16.04 交叉编译 mbedtls

在为客户交叉编译项目时需要依赖 mbedtls&#xff0c; 客户的机器是 arm64 的 ubuntu 16.04&#xff0c; 交叉编译过程中遇到几个问题。 首先&#xff0c; mbedtls 需要依赖 python, 在 cmake 的过程中&#xff0c; 如果不是使用系统默认的 cmake 可能会导致&#xff0c;mbedt…

蓝桥杯算法双周赛心得——被替换的身份证(分类讨论)

大家好&#xff0c;我是晴天学长&#xff0c;分类讨论一定要细节啊&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .被替换的身份证 2) .算法思路 假设一方获胜 1.接受数据 2.假设潜梦醒 无非就是&am…

计算机组成原理之处理器(单周期)

引言 处理器的实现方式决定了时钟周期长度和CPI。实现方式有单周期与流水线&#xff0c;本篇谈谈单周期处理器。 目前CPU的频率一般是3GHZ/4GHZ&#xff0c;但是频率是有极限值的&#xff0c;受cycletime影响 基本的RISC-V实现 存储指令&#xff1a;ld,sd算术逻辑指令 &…

AI 绘画 | Stable Diffusion 进阶 Embeddings(词嵌入)、LoRa(低秩适应模型)、Hypernetwork(超网络)

前言 Stable Diffusion web ui&#xff0c;除了依靠文生图&#xff08;即靠提示词生成图片&#xff09;&#xff0c;图生图&#xff08;即靠图片提示词生成图片&#xff09;外&#xff0c;这两种方式还不能满足我们所有的绘图需求&#xff0c;于是就有了 Embeddings&#xff0…

京东数据分析:2023年Q3户外鞋服市场分析报告(冲锋衣行业销售数据分析)

从露营、骑行、徒步、桨板、垂钓、飞盘、滑雪到如今的city walk&#xff0c;近两年户外运动已经成为了年轻人新的生活方式。户外运动的爆发也刺激了人们对于鞋服在穿搭、场景化、专业性功能等方向的需求&#xff0c;户外鞋服市场迎来增长。 而全国性的降温则带给目前的户外鞋服…

json数据格式的理解(前+后)

什么是JSON&#xff1a; JSON&#xff08;JavaScript Object Notation&#xff09;是一种广泛使用的数据交换格式&#xff0c;它在前端和后端开发中都扮演着重要的角色。 JSON 的结构&#xff1a; JSON 数据由大括号 {} 包围&#xff0c;表示对象。 对象中的数据以键值对形式…

vue.cli 中怎样使用自定义的组件

目录 创建自定义组件 注册并使用自定义组件 全局注册自定义组件 使用 Props 传递数据 总结 前言 在Vue CLI中使用自定义组件是构建交互式和模块化Web应用的重要一环。Vue CLI为开发者提供了使用自定义组件的灵活性和简便性。通过Vue CLI&#xff0c;你可以创建、注册和使…

yo!这里是哈希应用相关介绍

目录 前言 位图 模拟实现 应用举例 布隆过滤器 模拟实现 应用举例 后记 前言 在介绍unordered系列容器时&#xff0c;我们知道其底层使用的是哈希表&#xff0c;其实哈希是一种方法&#xff0c;是一种思想&#xff0c;哈希思想&#xff08;Hashing&#xff09;是一种在…

【第2章 Node.js基础】2.4 Node.js 全局对象...持续更新

什么是Node.js 全局对象 对于浏览器引擎来说&#xff0c;JavaScript 脚本中的 window 是全局对象&#xff0c;而Node.js程序中的全局对象是 global&#xff0c;所有全局变量(除global本身外)都是global 对象的属性。全局变量和全局对象是所有模块都可以调用的。Node.is 的全局…

Vue3 源码解读系列(三)——组件渲染

组件渲染 vnode 本质是用来描述 DOM 的 JavaScript 对象&#xff0c;它在 Vue 中可以描述不同类型的节点&#xff0c;比如&#xff1a;普通元素节点、组件节点等。 vnode 的优点&#xff1a; 抽象&#xff1a;引入 vnode&#xff0c;可以把渲染过程抽象化&#xff0c;从而使得组…

Oracle迁移(RAC变单机模式)

1.升级内核 systemctl stop firewalld systemctl disable firewalldrpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm yum --enablerepo"elrepo-kernel" list --showduplic…

鸿蒙原生应用开发-DevEco Studio远程模拟器的使用

使用单设备模拟器运行应用/服务 Remote Emulator支持Phone、Wearable、Tablet、TV等设备类型&#xff0c;但不同区域&#xff08;开发者帐号注册地&#xff09;支持的设备类型可能不同&#xff0c;请以实际可申请的设备类型为准。 Remote Emulator中的单设备模拟器&#xff08…

图扑智慧农业:农林牧数据可视化监控平台

数字农业是一种现代农业方式&#xff0c;它将信息作为农业生产的重要元素&#xff0c;并利用现代信息技术进行农业生产过程的实时可视化、数字化设计和信息化管理。能将信息技术与农业生产的各个环节有机融合&#xff0c;对于改造传统农业和改变农业生产方式具有重要意义。 图…

语音识别与自然语言处理(NLP):技术前沿与未来趋势

语音识别与自然语言处理&#xff08;NLP&#xff09;&#xff1a;技术前沿与未来趋势 随着科技的快速发展&#xff0c;语音识别与自然语言处理&#xff08;NLP&#xff09;技术逐渐成为人工智能领域的研究热点。这两项技术的结合&#xff0c;使得机器能够更好地理解和处理人类语…

Leetcode Hot100之六:42.接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 提示&#xff1a; n height.length 1 < n < 2 * 10^4 0 < height[i] < 10^5 思路 暴力循环&#xff1a; 原本的思路是左边界i从左到…

C语言--有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

一.解体思路 设一个结构体数组&#xff0c;数组中包含3个元素; 每个元素中的信息应包括候选人的姓名和得票数;输入被选人的姓名&#xff0c;然后与数组元素中的“姓名”成员比较&#xff0c;如果相同&#xff0c;就给这个元素中的“得票数”成 员的值加1;输出所有元素的信息。 …