软件测试|selenium xpath定位

简介: 软件测试|selenium xpath定位
说明:本篇博客基于selenium 4.1.0

selenium-xpath定位

element_xpath = driver.find_element(By.XPATH, 'xpath表达式')


xpath定位说明

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


xpath定位优点

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


xpath定位缺点

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


xpath调试方法

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

$x("xpath表达式")   # 表达式中存在引号,则使用单引号,'$'可更换为'$$'


xpath节点

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

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


xpath语法

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

绝对路径 & 相对路径

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

  • 绝对路径:从根节点/html开始往下,一层层的表示出来直到需要的节点为止。以百度输入框为例,表达式为:
/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]
  • 相对路径:从任意节点开始,根据节点描述信息找到需要的节点。同样以百度输入框为例,表达式为:
//input[@id='su']

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

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

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

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则返回该节点
谓语格式:

节点名称[谓语]


常用谓语 说明 示例 示例说明
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)

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

当前节点/轴名称::节点名称
说明 示例 示例说明
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 当前节点
相关文章
|
16天前
|
Java 测试技术 Android开发
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
58 4
Android性能测试——发现和定位内存泄露和卡顿
|
6天前
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
6天前
|
Web App开发 测试技术 持续交付
自动化测试的利器:Selenium与Python的完美结合
【9月更文挑战第21天】在软件开发的世界里,测试是确保产品质量的关键步骤。随着敏捷开发和持续集成的流行,自动化测试工具变得尤为重要。本文将介绍如何使用Selenium和Python进行高效的自动化测试,不仅提供代码示例,还深入探讨如何设计测试用例、选择正确的测试框架、以及如何整合到CI/CD流程中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
21 3
|
19天前
|
Web App开发 Java 测试技术
自动化测试的利器:Selenium WebDriver入门与实践
【9月更文挑战第8天】在软件开发的海洋中,测试是确保我们不会溺水的那根救生索。Selenium WebDriver,作为自动化测试的明星工具,让这根救生索更加结实可靠。本文将带你快速上手Selenium WebDriver,从基础设置到实际操作,再到实战演练,让你的开发之旅更加平稳顺畅。
|
13天前
|
敏捷开发 Java 测试技术
探索自动化测试的奥秘:从Selenium到Appium
【9月更文挑战第14天】软件测试,这个看似枯燥乏味却至关重要的领域,正经历着一场革命。随着技术的进步,自动化测试工具如Selenium和Appium已成为质量保证的利器。本文将带你一探这些工具的神秘面纱,了解它们如何简化测试流程、提升效率,并确保软件产品的质量。准备好,我们将深入自动化测试的世界,解锁其背后的原理和实践技巧。
|
3天前
|
Web App开发 Linux Python
linux上安装selenium环境及测试
该文章提供了在Linux CentOS上安装Selenium环境、Chrome浏览器及Chromedriver的详细步骤,并演示了如何以无头模式进行测试。
12 0
|
14天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:如何用Selenium和Python打造高效测试脚本
【9月更文挑战第13天】在软件开发的海洋中,自动化测试是那抹不可或缺的亮色。它不仅提升了测试效率,还保障了产品质量。本文将带你领略使用Selenium和Python构建自动化测试脚本的魅力所在,从环境的搭建到脚本的编写,再到问题的排查,每一步都是对软件质量把控的深刻理解和实践。让我们开始这段探索之旅,解锁自动化测试的秘密吧!
13 0
|
15天前
|
JavaScript 前端开发 测试技术
Selenium2Library实现基于GUI的测试
Selenium2Library实现基于GUI的测试
25 0
|
28天前
|
Web App开发 Java 测试技术
自动化测试的新篇章:使用Selenium WebDriver进行高效测试
【8月更文挑战第31天】 在软件开发的海洋中,自动化测试犹如一艘航船,带领着质量保证团队驶向效率与精准的彼岸。本文将揭开Selenium WebDriver的神秘面纱,通过实际案例引导您掌握这一强大的自动化测试工具。我们将从Selenium WebDriver的基础概念出发,逐步深入到代码示例,最后探讨其在现实项目中的应用场景和优势,旨在为您的软件测试之旅提供清晰的指南。
|
28天前
|
Web App开发 测试技术 持续交付
探索自动化测试:以Selenium和Python为例
【8月更文挑战第31天】自动化测试在现代软件开发中扮演着不可或缺的角色。本文将通过一个简化的示例,展示如何使用Selenium和Python进行Web应用的自动化测试。我们将从安装必要的工具开始,逐步构建一个简单的测试脚本,并执行它来验证其功能。通过这个过程,我们旨在揭示自动化测试的价值,并激励读者深入探索这一领域。