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’)] | 选择所有文本以’新闻’开头的节点 |
备注:
- last()、position()、text()、not()这类带有括号的表达式,实质都是xpath提供的函数,本篇文章只列出了常用函数
- 根据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 | 当前节点 | 略 | 略 |
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

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

相关文章:
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 styl…...
「我在淘天做技术」音视频技术及其在淘宝内容业务中的应用
作者:李凯 一、前言 近年来,内容电商似乎已经充分融入到人们的生活中:在闲暇时间,我们已经习惯于拿出手机,从电商平台的直播间、或者短视频链接下单自己心仪的商品。 尽管优质的货品、实惠的价格、精致的布景、有趣的…...
el-input 输入后失去焦点
说了是无情,写了更无情,你说你看了不点赞是不是更绝情?遇到这种神奇的BUG,也是大家无奈的神情。 来分析看代码: <div class"card-item input-item" :class"{ w-100: followRadio 2 }"v-for&…...
docker创建并访问本地前端
docker创建并访问本地前端,直接上命令: 安装nginx镜像: docker pull nginx 查看已安装的nginx: docker images 创建DockerFile文件,直接在当前文件夹种创建 touch Dockerfile 在Dockerfile写入内容: F…...
数据结构之单链表基本操作
🤷♀️🤷♀️🤷♀️ 今天给大家分享的是单链表的基本操作。 清风的个人主页 🎉欢迎👍点赞✍评论❤️收藏 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位…...
Python 实践
文章目录 一、HttpRequests 一、Http Requests python——Request模块...
使用easyui前端框架快速构建一个crud应用
本篇文章将会详细介绍jquery easyui前端框架的使用,通过创建一个crud应用来带大家快速掌握easyui的使用。 easyui是博主最喜欢的前端框架,没有之一,因为它提供了多种主题,而且有圆润的各种组件。 一、快速开始 easyui的官网地址&…...
Logback从添加依赖,到配置给中打印级别,archive相关信息配置,在项目中的常见的用法,一个完整的过程
添加Logback依赖: 在您的Maven或Gradle项目中,添加Logback依赖。例如,在Maven中,可以将以下依赖添加到pom.xml文件中: <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-c…...
虚假内容检测,谣言检测,不实信息检测,事实核查;纯文本,多模态,多语言;数据集整理
本博客系博主个人理解和整理所得,包含内容无法详尽,如有补充,欢迎讨论。 这里只提供数据集相关介绍和来源出处,或者下载地址等,因版权原因不提供数据集所含的元数据。如有需要,请自行下载。 “Complete d…...
数据结构:单链表
文章目录 🍉前言🍉基本概念🍉链表的分类🍌单链表节点的结构🍌创建节点🍌打印链表🍌插入和删除🥝尾插🥝头插🥝尾删🥝头删🥝指定位置之前…...
官媒代运营:让大众倾听品牌的声音
在当今数字时代,媒体的影响力和多样性远远超出了以往的范畴。品牌和企业越来越依赖媒体来传播信息、建立声誉以及与大众互动。而媒体矩阵成为了现代品牌传播的关键策略,使大众能够倾听品牌的声音。媒体矩阵:多元化的传播渠道 媒体矩阵是指利…...
postgresql 实现计算日期间隔排除周末节假日方案
前置条件:需要维护一张节假日日期表。例如创建holiday表保存当年假期日期 CREATE TABLE holiday (id BIGINT(10) ZEROFILL NOT NULL DEFAULT 0,day TIMESTAMP NULL DEFAULT NULL,PRIMARY KEY (id) ) COMMENT假期表 COLLATEutf8mb4_0900_ai_ci ;返回日期为xx日xx时x…...
金融工作怎么做?低代码如何助力金融行业
10月30日至31日,中央金融工作会议在北京举行。金融是国民经济的“血脉”,是国家核心竞争力的重要组成部分。会议指出,党的十八大以来,在党中央集中统一领导下,金融系统有力支撑经济社会发展大局,坚决打好防…...
基于springboot实现智慧外贸平台系统【项目源码+论文说明】计算机毕业设计
基于springboot实现智慧外贸平台系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把智慧外贸管理与现在网络相结合,利用java技术建设智慧外贸平台,实现智慧外贸的信息化。则对于进一步提高智慧外贸管理发展,丰富智慧外贸管理经验能…...
带头+双向+循环链表
前言: 前面我们已经学习了单链表的结构及其功能特点,也了解了单链表在实现一些功能时出现的一些缺点,比如在删除某个节点前面一个节点时就需要再开一个变量来存放前面一个节点的信息,这样就显得不灵活,为了使链表实现功…...
Leetcode_2:两数相加
题目描述: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外ÿ…...
Pytorch实战教程(一)-神经网络与模型训练
0. 前言 人工神经网络 (Artificial Neural Network, ANN) 是一种监督学习算法,其灵感来自人类大脑的运作方式。类似于人脑中神经元连接和激活的方式,神经网络接受输入,通过某些函数在网络中进行传递,导致某些后续神经元被激活,从而产生输出。函数越复杂,网络对于输入的数…...
【MySQL】手把手教你centos7下载MySQL
centos7下载MySQL 前言正式开始卸载不需要的环境(如果你之前没有安装过数据库相关的东西可以跳过)下载mysql登录mysql登陆⽅法⼀【不⾏就下⼀个】登陆⽅法⼆【不⾏就下⼀个】登录方式三 前言 安装和卸载MySQL都用系统的root权限,更方便一点&…...
openlayers
OpenLayers使用_openlayers中文官网-CSDN博客...
力扣每日一道系列 --- LeetCode 88. 合并两个有序数组
📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构探索 ✅LeetCode每日一道 🌅 有航道的人,再渺小也不会迷途。 文章目录 思路1:暴力求解思路2:原地合并 LeetCode 88. 合并两个有序数组…...
PyTorch深度学习框架核心技术与实战应用
1. PyTorch与深度学习全景图PyTorch作为当前最活跃的深度学习框架之一,其设计哲学与实现方式完美诠释了现代深度学习的核心要义。我第一次接触PyTorch是在2017年处理一个图像分割项目时,当时被其动态计算图的灵活性所震撼——这种设计让研究者能够像写Py…...
Halcon仿射变换的“魔法”与“陷阱”:从vector_angle_to_rigid到hom_mat2d_rotate的旋转中心到底在哪?
Halcon仿射变换的“魔法”与“陷阱”:从vector_angle_to_rigid到hom_mat2d_rotate的旋转中心到底在哪? 在工业视觉开发中,仿射变换就像一把瑞士军刀,能解决图像对齐、坐标转换、物体定位等核心问题。但当你自信满满地写下hom_mat2…...
《JAVA面经实录》- 设计模式面试题(一)
《JAVA面经实录》- 设计模式面试题(一)这份是设计模式面试题・标准答案背诵版语言精炼、口语化、不啰嗦,面试官最爱听,直接背就能过。一、基础必问题(标准答案)1.设计模式三大类?创建型:控制对象创建&#…...
企业级HTML转Word文档自动化转换框架:构建高性能文档处理系统
企业级HTML转Word文档自动化转换框架:构建高性能文档处理系统 【免费下载链接】html-to-docx HTML to DOCX converter 项目地址: https://gitcode.com/gh_mirrors/ht/html-to-docx 在当今数字化办公环境中,HTML转Word文档转换已成为企业文档自动化…...
【 PyTorch深入浅出】PyTorch从动态图到AI未来的核心引擎
导语:磨刀不误砍柴功,第一期先介绍一下什么是PyToch,知己知彼学起来就可以事半功倍。PyTorch从动态图到AI未来的核心引擎 PyTorch是一个开源的机器学习库,由Meta(原Facebook)AI研究团队于2017年正式发布&am…...
如何查看vDisk分组使用统计数据
如何查看vDisk分组使用统计数据本文为澄成vDisk IDV云桌面运维人员、高校机房管理员提供如何查看vDisk分组统计的详细操作指引,适用于已完成本地化部署的澄成vDisk IDV云桌面管理控制台环境,不涉及vDisk分组创建、权限配置与统计导出功能配置讲解。澄成v…...
Pandas crosstab实战:用一份超市销售数据,搞定会员复购率与商品关联分析
Pandas crosstab实战:用一份超市销售数据,搞定会员复购率与商品关联分析 超市运营团队经常面临两个关键问题:如何提升会员忠诚度?哪些商品组合能带来更高客单价?本文将用一份模拟超市交易数据,带你用Pandas…...
从随便用到查户口:AI圈的实名暴政,程序员炸了
这两天Anthropic的Claude实名认证风波席卷AI圈,引发全球用户群体的强烈不满和抗议。这一政策变化在科技社区、社交媒体平台上迅速发酵,形成了"全球集体众怒"的舆论风暴。 作为一个写了几十年代码、摸遍国内外AI工具的老程序员,我是…...
Dify 客户端安全上线倒计时(C# 14 AOT 零配置加固白皮书首发)
第一章:Dify 客户端安全上线倒计时:C# 14 AOT 零配置加固白皮书导言C# 14 的原生 AOT(Ahead-of-Time)编译能力正重塑 .NET 客户端安全交付范式。当 Dify 的 Web UI 客户端需以独立、无运行时依赖、抗逆向分析的方式嵌入边缘设备或…...
模型集成:将本地大模型接入Flask应用
005、模型集成:把本地大模型塞进Flask应用 昨天深夜调试时遇到个典型问题:同事在Flask路由里直接加载7B参数的模型,每次请求都重新读一遍权重文件。结果第一个请求等了三分半,服务器内存直接飙到32G——典型的“把实验代码当生产代码用”。今天咱们就聊聊怎么把本地大模型…...
