『心善渊』Selenium3.0基础 — 7、XPath轴定位详解
使用XPath轴方式,可根据文档中元素的相对位置,来进行元素的定位。例如:先找到一个相对好定位的元素,在根据与它的相对位置来定位其他元素,可以解决一些元素难以定位的问题。
1、XPath轴定位介绍
轴可理解为相对于当前节点的节点集。
| 轴名称 | 结果 |
|---|---|
ancestor |
选取当前节点的所有先辈(父、祖父等)。 |
ancestor-or-self |
选取当前节点的所有先辈(父、祖父等)以及当前节点本身。 |
attribute |
选取当前节点的所有属性。 |
child |
选取当前节点的所有子元素。 |
descendant |
选取当前节点的所有后代元素(子、孙等)。 |
descendant-or-self |
选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 |
following |
选取文档中当前节点的结束标签之后的所有节点。 |
namespace |
选取当前节点的所有命名空间节点。 |
parent |
选取当前节点的父节点。 |
preceding |
选取文档中当前节点的开始标签之前的所有节点。 |
preceding-sibling |
选取当前节点之前的所有同级节点。 |
self |
选取当前节点。 |
2、位置路径表达式概念
位置路径可以是绝对的,也可以是相对的。
绝对路径起始于正斜杠(/),而相对路径不会这样。
在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:
(1)绝对位置路径:
/step/step/...
(2)相对位置路径:
//step/step/...
每个步均根据当前节点集之中的节点来进行计算。
(3)步(step)包括:
- 轴(
axis):定义所选节点与当前节点之间的树关系(如上表)。 - 节点测试(
node-test):识别某个轴内部的节点(相当于标签节点或者标签节点集)。 - 零个或者更多谓语(
predicate):索引。
(4)步的语法:
轴名称::节点测试[索引]
3、步的路径表达式范例
| 例子 | 结果 |
|---|---|
child::book |
选取所有属于当前节点的子元素的 book 节点。 |
attribute::lang |
选取当前节点的 lang 属性。 |
child::* |
选取当前节点的所有子元素。 |
attribute::* |
选取当前节点的所有属性。 |
child::text() |
选取当前节点的所有文本子节点。 |
child::node() |
选取当前节点的所有子节点。 |
descendant::book |
选取当前节点的所有 book 后代。 |
ancestor::book |
选择当前节点的所有 book 先辈。 |
ancestor-or-self::book |
选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点) |
child::*/child::price |
选取当前节点的所有 price 孙节点。 |
4、练习
页面代码片段:
<!DOCTYPE html>
<html lang="zh-cn">
<body>
<div id="zc">
<legend>注册用户A</legend>
<p id="p1">
<label for="userA">账号A</label>
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
</p>
<p>
<label for="password">密码A</label>
<input type="password" name="passwordA" id="passwordA" placeholder="密码A" value="">
</p>
<p><a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a></p>
<input type="emailA" name="emailA" id="emailA" placeholder="电子邮箱A" value="">
</div>
</body>
</html>
代码脚本:
"""
1.学习目标:
必须掌握selenium中轴定位方法
2.语法
2.1 选择当前元素之后的同级元素
语法://A/following-sibling::B
说明:选择所有 A 元素之后同级的 B 元素。
2.2 选择当前元素之前的同级元素
语法://A/preceding-sibling::B
说明:选择所有 A 元素之前同级的 B 元素。
2.3 其他的轴定位关键字,可自己拓展练习。
3.需求
在页面中,定位指定元素。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开注册A页面
url = "file:///" + os.path.abspath("./1.html")
driver.get(url)
# 4.定位页面指定元素
# 4.1 选择当前元素之后的同级元素
# 选择所有<legend>标签之后的同级的<p>元素
elements_1 = driver.find_elements_by_xpath("//legend/following-sibling::p")
for element in elements_1:
print(element.get_attribute("outerHTML"))
# 4.2 选择当前元素之前的同级元素
# 选择所有<input>之前的同级的<p>元素
elements_2 = driver.find_elements_by_xpath("//input/preceding-sibling::p")
for element in elements_2:
print(element.get_attribute("outerHTML"))
# 5.关闭浏览器
sleep(2)
driver.quit()
"""
输出结果:
打印两次如下内容
<p id="p1">
<label for="userA">账号A</label>
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
</p>
<p>
<label for="password">密码A</label>
<input type="password" name="passwordA" id="passwordA" placeholder="密码A" value="">
</p>
<p><a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a></p>
"""
『心善渊』Selenium3.0基础 — 7、XPath轴定位详解的更多相关文章
- 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍
目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...
- 『心善渊』Selenium3.0基础 — 10、使用Seleniun定位页面元素归纳总结(超详细)
目录 1.Selenium中8种基本元素定位方式 (1)单数形式 (2)复数形式 2.By类定位的8种定位方式 (1)单数形式 (2)复数形式 3.XPath定位总结 (1)基础定位语法 (2)属性定 ...
- 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作
目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...
- 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件
目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...
- 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍
目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...
- 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素
目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...
- 『心善渊』Selenium3.0基础 — 2、Selenium测试框架环境搭建(Windows)
目录 1.浏览器安装 2.浏览器驱动下载 (1)ChromeDriver for Chrome (2)Geckodriver for Firefox (3)IEDriverServer for IE ...
- 『心善渊』Selenium3.0基础 — 3、使用Selenium操作浏览器对象的基础API
目录 1.导入Selenium库 2.创建浏览器对象 3.浏览器窗口大小设置 4.浏览器位置设置 5.请求访问网址 6.浏览器页面前进.后退和刷新 7.关闭浏览器 相比于高大上的各种Selenium进 ...
- 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解
目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...
- 『心善渊』Selenium3.0基础 — 19、使用Selenium操作文件的上传和下载
目录 1.Selenium实现文件上传 (1)页面中的文件上传说明 (2)文件上传示例 (3)总结 2.Selenium实现文件下载 (1)Firefox浏览器文件下载 1)操作步骤: 2)文件下载示 ...
随机推荐
- 企业更需要定制化CRM系统满足个性化需求
随着市场的发展和信息技术的进步,越来越多的企业购买CRM客户关系管理系统来帮助管理.提高效率.但哪怕处在相同行业的企业,他们对于CRM的功能需求都会有着很大的不同.因此,大部分企业都开始进行个性化定制 ...
- CentOS7 / CentOS8 设置终端屏幕分辨率
Centos7 修改文件 /boot/grub2/grub.cfg 搜索 linux16 / /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=881ac4e6-4a5 ...
- 【转载】spice 有截图
https://segmentfault.com/a/1190000011991047
- RHEL sosreport
RHEL sosreport简介 sosreport对很多RedHat爱好者来说应该并不陌生! 它是一款在RedHat Linux下帮你收集系统信息打成一个tar包的工具,你可以将这个tar包发给供应 ...
- jmeter完成一个简单的性能测试(jp@gc - PerfMon Metrics Collector的运用)
场景:公司项目解耦,在项目前期对新的架构进行简单的性能测试 工具:jmeter 1.大致结构如下: 1800秒(半个小时)内持续产生20000的线程 创建了聚合报告,主要是查看服务器响应结果以及相应时 ...
- shell基础之多功能nginx(安装、重启、停止等)
1 #!/bin/bash 2 #要求:检查本机是否已编译安装nginx,检查本机是否存在nginx源码包,编译安装nginx,实现开启.停止.查看状态等功能 3 #检查是否已编译安装nginx 4 ...
- Java核心技术卷阅读随笔--第4章【对象与类】
对 象 与 类 4.1 面向对象程序设计概述 面向对象程序设计(简称 OOP) 是当今主流的程序设计范型, 它已经取代了 20 世纪 70 年代的" 结构化" 过程化程序设计开发技 ...
- Jenkins 基础篇 - 任务创建
前面了解了 Jenkins 上各种任务的区别后,我们就来实践应用下,先创建一个[文件夹]类型的任务,将我们目前的一些基础的演示任务[移动]到文件夹里面去,这样可以先做个简单的分类. 新建一个[文件夹] ...
- 出现异常org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping
这是因为yaml的配置文件格式出错导致的异常 原代码,仔细看数据源的配置没有和type的路径一致,而是下一级的目录,所以导致出错 使用shift+tab快捷键向左移动改变下就好了 最后成功运行
- Locust入门
Locust入门 Locust是一款Python技术栈的开源的性能测试工具.Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户: Locust并不小众,从它Github的Star数量就 ...