web自动化测试系列-selenium xpath定位方法详解(六)

在这里插入图片描述

1.xpath介绍

XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。而html中也应用了这种语言 ,所以 ,我们定位html页面元素时也会用到xpath这种方法 。

2.xpath定位方式

xpath主要通过以下四种方法定位 :

  • 路径定位
  • 属性定位
  • 多属性定位
  • 路径与属性结合定位

以上的方法都是xpath本身具有的特性 ,它跟selenium现在还没有关系 。而selenium为了支持xpath这种定位方式 。故实现了一个方法,即 :

find_element_by_xpath(定位方法) .

而括号内的定位方法正是以上四种定位方式 ,所以 ,重点还是要理解如何使用以上的四种定位方式 。

3.路径定位

路径可以分为相对路径和绝对路径

  • 绝对路径 : 是从根节点/html开始定位 ,使用/代表元素的层级,直到定位到想要的元素层级 。比如 :/html/body/div/fieled[2]/input 。但是这种定位只能定位到该层级的标签 ,而这样的标签在html会有很多 ,故它定位不了元素的唯一性 ,只能和其他方法结合使用 。
  • 相当路径 :查找元素时不限制元素的位置 ,在定位元素时前面需要加两个斜杠(//) . 如定位input标签 ,编写格式为: //input , 定位的就是html页面的所有Input标签 . 也可以使用//*代替 ,这样查找的就是所有的标签 。

无论使用相当路径还是绝对路径 ,需结合者属性一起使用 ,这样才能完成元素定位的唯一性 。还需要一点需要说明,就是在定位元素时一般不使用绝对路径 ,绝对路径写的比较死 ,不灵活 ,影响后期维护 。

4.属性定位

这应该是xpath定位的核心 ,多数xpath定位 ,都是选取的这种定位方式 。

所谓的属性定位 ,就是从html页面的节点中找到其中一个属性来完成定位,如果这个属性唯一 ,它就能代表页面的对象 。

它的编写格式为 ://标签[@属性名=‘属性值’] ,对这句代码的解释是 :

包含格式说明
//标签这是相对路径,标明要查找节点的标签,加上标签,能起到缩小定位范围的作用,比如//input,就只查找input标签。
[]查找某个特定节点或某个指定的值的节点 ,这是固定格式 。
@查找的属性

举例 :

  • xpath属性编写格式: //input[@name='username'] ,意思是定位input标签下属性名为name, 属性值为username的元素 。
  • selenium的xpath编写方法 :find_element_by_xpath("//input[@name='username']")
  • 代码编写为 :
driver.find_element_by_xpath("//input[@name='username']").send_keys("13988888888")

xpath的这种方法能定位大多数元素 ,所以很多人都喜欢使用这种方式定位 。

总结如下 ,若使用xpath定位 ,具体步骤 :

  1. 通过浏览器找到要定位对象的属性 ,确定它就是唯一值 。
  2. 使用find_element_by_xpath() 方法 ,括号内编写xpath对应属性的格式 。
  3. 进行调试 ,若能定位到,说明你的方法没有问题 。

5.属性与逻辑定位

在前面我们介绍到使用属性定位 ,但是如若使用一个属性定位不到怎么办 ? 你就可以是用两个属性或者多个属性同时定位 。

这里就不得不说的一个逻辑运算符 ,and(逻辑与) . 它的意思是并且,大白话就是两者都要求满足 。比如 属性1 and 属性2 ,代表这两个属性都要同时都满足 。

所以 ,如果你一个属性定位不到的话 ,再加一个属性就可以进一步缩小范围,从而提高定位准确率 。

而这种写法也正好是xpath语言中所支持的,它的编写格式为 ://标签[@属性1=‘值1’ and @属性2=‘值2’] 。

举例 :

  • xpath两个属性的编写格式 ://input[@class='text_cmu' and @name='username']
  • selenium xpath方法编写格式 :find_element_by_xpath("//input[@class='text_cmu' and @name='username']")

以上的定位虽然使用到了and逻辑运算符 ,但是xpath中,其实并不仅仅支持这一个逻辑运算符 。以下的都可以使用 :

  • 算术运算符 : = ,!= , < , <= , >, >=
  • 逻辑运算符 : or , and

只是以上运算符中,用在定位上的可能只有and比较有用 。

6.路径与属性结合定位

如果你使用了上面的各种方法 ,依然定位不到元素 ,那这个时候 ,你就可以考虑把路径加进来 。

一般原则是先加它的父路径 ,然后再加上当前路径 ,结合使用 。

具体格式为 :

  • //*[@id='um']/input : 父路径属性 + 子标签
  • //bookstore/[@price='30'] : 父路径标签 + 子属性
  • //div[@class='login_bnt']/a[@class='J-login-submit' : 父路径属性 + 子属性

不管咋写 ,只要能确定元素的唯一性 ,就都可以 ,不过这种写法很明显是逼不得已 ,因为你可能使用其它方法都无效的情况下 ,才会使用这种方法 。

7.定位总结

我们将以上所有方法总结为,可以使用以下的几种方法进行定位 。

定位方式xpath
id属性定位//*[@id=‘值’]
class属性定位//*[@class=‘值’]
属性定位//*[@属性名=‘值’]
标签+属性定位//标签[@属性名=‘值’]
逻辑+属性定位//标签[@属性名=‘值’ and @属性名1=‘值1’]
路径定位//标签[@属性名=‘值’]/标签[@属性名=‘值’]

8.项目案例

需求:通过selenium完成对tpshop的登录操作,具体如下 :

  1. 使用xpath属性定位首页登录按钮 ,
  2. 使用逻辑与属性定位用户名输入框,并输入账号,如13988888888
  3. 使用属性定位确认密码输入框,并输入123456 。
  4. 使用属性定位验证码输入框,并输入8888
  5. 使用路径与属性结合定位登录按钮,并点击确定 。
    在这里插入图片描述
# 使用xpath属性进行定位 : //标签[@属性名='属性值']

from selenium import webdriver
import time

# 1. 创建浏览器对象
driver = webdriver.Chrome()
driver.maximize_window()

# 2. 输入地址 :http://localhost
driver.get("http://localhost")

# 3. 点击登录 : 使用xpath属性定位
driver.find_element_by_xpath("//a[@href='/Home/user/login.html']").click()
time.sleep(3)

# 输入用户名,密码,验证码 :使用逻辑与属性集合定位
driver.find_element_by_xpath("//input[@class='text_cmu' and @name='username']").send_keys("13988888888")
driver.find_element_by_xpath("//input[@id='password']").send_keys("123456")
driver.find_element_by_xpath("//input[@name='verify_code']").send_keys("8888")

# 使用层级与属性结合定位
driver.find_element_by_xpath("//div[@class='login_bnt']/a[@class='J-login-submit']").click()
time.sleep(5)
driver.quit()


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/98a1bb4819f346529a9bf85df7fa1193.png#pic_center)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis第12讲——缓存的三种设计模式

缓存的使用在项目中是极其常见的&#xff0c;如果使用得当&#xff0c;缓存可谓时提升系统性能的最简单方法之一&#xff0c;反之则会出现一些莫名其妙的问题&#xff0c;在不同场景下&#xff0c;所使用的缓存策略也是有所变化的&#xff0c;下面我们就介绍一下三种常见的缓存…

appium driver install uiautomator2 安装失败

报错 Installing ‘uiautomator2’ using NPM install spec ‘appium-uiautomator2-driver’ Error: Encountered an error when installing package: npm command ‘install --save-dev --no-progress --no-audit --omitpeer --save-exact --global-style --no-package-lock…

为什么每个人都需要了解这些数据加密技术?

在数字时代&#xff0c;数据加密技术不仅对保护企业的商业秘密至关重要&#xff0c;也是个人隐私安全的重要屏障。随着技术的进步和网络犯罪的增加&#xff0c;数据加密已经成为了信息安全领域的一个热点议题。以下是探讨为什么每个人都需要了解这些数据加密技术的几个主要原因…

Web 前端性能优化之七:数据存储与缓存技术

7、数据存储 在开发Web应用的过程中&#xff0c;会涉及一些数据的存储需求&#xff0c;常见的存储方式可能有&#xff1a; 保存登录态的Cookie&#xff1b; 使用浏览器本地存储进行保存的Local Storage和Session Storage&#xff1b; 客户端数据持久化存储方案涉及的Web SQ…

AI智能调色解决方案,节省了企业的时间和人力成本

如何确保图片、视频的色彩准确、生动&#xff0c;成为企业提升品牌形象和传播效果的重要课题。美摄科技凭借领先的AI技术&#xff0c;推出全新的AI智能调色解决方案&#xff0c;以智能化、精细化的调色方式&#xff0c;帮助企业轻松驾驭色彩&#xff0c;展现视觉魅力。 美摄科…

知乎专业分析二手车

二手车经销商-一个神奇的经济存在体 - 知乎 二手车经销商-一个神奇的经济存在体 - 知乎 1. 本文文字内容较多&#xff0c;近5000字&#xff0c;如果没有兴趣可以看看导图&#xff0c;找到自己感兴趣的环节。 本篇无意为二手车经销商或新车经销商进行判断说谁更高端&#xf…

CentOS7.9创建本地yum源操作步骤报错解决方法

1.基础信息 CentOS7.9-mini最小化安装的系统&#xff0c;在离线安装rpm时候需要大量依赖&#xff0c;需要花费大量时间去查找依赖包。受于环境限制无法接入互联网使用公开yum源&#xff0c;于是便有了搭建本机yum源的想法&#xff0c;在网上下载CentOS7.9标准版“CentOS-7-x86_…

js爬虫puppeteer库 解决网页动态渲染无法爬取

我们爬取这个网址上面的股票实时部分宇通客车(600066)_股票价格_行情_走势图—东方财富网 我们用正常的方法爬取会发现爬取不下来&#xff0c;是因为这个网页这里是实时渲染的&#xff0c;我们直接通过网址接口访问这里还没有渲染出来 于是我们可以通过下面的代码来进行爬取: …

HarmonyOS4-学习入门知识总结

简单的组件学习&#xff1a; /*** weip 自定义控件* 自定义构建函数也是需要充电的地方&#xff0c;分全局和局部的* 全局&#xff1a;需要添加function关键字 局部&#xff1a;不加function关键字* Styles function 自定义公共样式 分全局和局部* Extends(Text) 继承模式 只…

蚂蚁集团CodeFuse 发布“图生代码”功能,支持产品设计图一键生成代码

4月11日&#xff0c;蚂蚁集团自研的智能研发平台CodeFuse推出“图生代码”新功能&#xff0c;支持开发人员用产品设计图一键生成代码&#xff0c;大幅提升前端页面的开发效率。目前相关功能正在内测。 和很多互联网公司一样&#xff0c;蚂蚁集团正在内部全面推行AI编程&#x…

Ubuntu-22.04安装Virtualbox并安装Windows10

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Virtualbox是什么&#xff1f;二、安装Virtualbox1.关闭Secure Boot2.安装 三、安装Windows101.新装虚拟机基本配置2.新装虚拟机核心配置 总结 前言 虚拟机…

2023图灵奖得主揭晓!史上首位计算机和数学最高奖“双料王”诞生

重磅消息&#xff01;北京时间4月10日下午5点整&#xff0c;ACM宣布把2023年图灵奖颁给Avi Wigderson&#xff0c;以表彰Wigderson对计算理论和随机性做出的奠基性贡献。 ACM图灵奖通常被称为“计算机领域的诺贝尔奖”&#xff0c;奖金为100万美元&#xff0c;通常颁发给计算机…

优思学院|过程能力指数CPK是谁发明的?

CPK指数的发明并没有明确归功于某个特定的个人。 它是质量管理和统计过程控制领域中的一个概念&#xff0c;是在多年的实践和研究中逐渐发展形成的。Cpk作为衡量过程性能的工具之一&#xff0c;其理论基础主要来源于统计过程控制&#xff08;SPC&#xff09;和质量管理的原理&…

软件建模与设计 —— 入门

序言 对于软件建模与设计&#xff0c;非科班出身的同学可能和我一样比较陌生&#xff0c;虽然日常开发中也涉及到建模&#xff0c;但是并没有系统的学习过软件建模设计。类似于设计模式&#xff0c;软件建模与设计也有一套三板斧。 设计模式 创建型模式提供了创建对象的机制…

基于GAN的多变量时间序列污染训练集异常检测

论文地址&#xff1a;https://ieeexplore.ieee.org/document/9618824 论文源码&#xff1a;https://github.com/sxxmason/FGANomaly 期刊&#xff1a;IEEE Transactions on Knowledge and Data Engineering 多元时间序列异常检测在结构健康监测、智能运维、量化交易等诸多实际…

【C++】模版

目录 一、泛型编程二、函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 三、类模板3.1 类模板的定义格式3.2 类模板的实例化 四、非类型模板参数五、模板的特化5.1 概念5.2 函数模板特化5.3 类模板特化5.3.1 全特化5.3…

google map POI获取

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、需求背景 因业务发展&#xff0c;需获取全美(或任意国家)所有POI(标记点)信息&#xff0c;包括mark_id、mark_name、address、numb…

JavaThread线程

目录 程序--进程--线程 程序&#xff1a; 进程&#xff1a; 线程&#xff1a; 进程和线程的关系 创建线程 单线程模式 代码 图解 运行 代码 运行 创建线程 方式一 代码 运行 方式二 代码 运行 总结&#xff1a; Thread类中常用的方法 1、 代码 运行…

python统计分析——一般线性回归模型

参考资料&#xff1a;python统计分析【托马斯】 当我想用一个或多个其他的变量预测一个变量的时候&#xff0c;我们可以用线性回归的方法。 例如&#xff0c;当我们寻找给定数据集的最佳拟合线的时候&#xff0c;我们是在寻找让下式的残差平方和最小的参数(k,d)&#xff1a; 其…

YooAsset快速入门

文章目录 YooAsset快速入门指南&#xff1a;YooAsset学习核心要掌握的要点主要包括以下几个方面&#xff1a;基于YooAsset进行游戏资源管理的应用实例 YooAsset快速入门指南&#xff1a; YooAsset是一款专为游戏开发设计的资产管理和分发系统&#xff0c;它能够帮助开发者高效…