Selenium 八大元素定位方法及场景扩展
Selenium 提供了八种常见的元素定位方法,用于在网页中准确找到需要操作的元素。以下是详细介绍以及一些特殊场景的解决方案。
1. ID 定位
用法:
通过元素的唯一 id 属性进行定位。
element = driver.find_element(By.ID, "element_id")
使用场景:
适用于 HTML 中 id 唯一的场景,通常是表单控件、按钮等。
2. Name 定位
用法:
通过元素的 name 属性进行定位。
element = driver.find_element(By.NAME, "element_name")
使用场景:
适合用在表单或具有明确 name 属性的标签。
3. Class Name 定位
用法:
通过元素的 class 属性进行定位。
element = driver.find_element(By.CLASS_NAME, "element_class")
使用场景:
适用于具有明确样式类的 HTML 标签。需要注意,如果多个元素有相同的 class,需要结合其他属性筛选。
4. Tag Name 定位
用法:
通过标签名进行定位。
elements = driver.find_elements(By.TAG_NAME, "button")
使用场景:
适合查找一组同类元素,比如获取页面上所有的按钮或输入框。
5. Link Text 定位
用法:
通过超链接的完整文本内容进行定位。
element = driver.find_element(By.LINK_TEXT, "Click Here")
使用场景:
适用于超链接文本明确且唯一的情况。
6. Partial Link Text 定位
用法:
通过超链接的部分文本内容进行定位。
element = driver.find_element(By.PARTIAL_LINK_TEXT, "Click")
使用场景:
适用于超链接文本较长且部分内容具有唯一性的场景。
7. CSS Selector 定位
用法:
通过 CSS 选择器语法进行定位。
element = driver.find_element(By.CSS_SELECTOR, "div.container > ul > li:nth-child(2)")
使用场景:
适用于复杂的嵌套结构,支持丰富的选择器语法,如 nth-child、伪类等。
8. XPath 定位
用法:
通过 XPath 表达式进行定位,支持绝对路径和相对路径。
element = driver.find_element(By.XPATH, "//div[@id='main']//a[text()='Click Here']")
使用场景:
适用于复杂的层级结构和条件筛选,支持灵活的定位逻辑。
特殊场景扩展
1. 通过子节点找到父节点
场景描述: Selenium 不直接支持从子节点返回父节点,但可以通过 XPath 的 .. 语法实现。
示例:
<div class="parent"><span class="child-class">Child</span> </div>
XPath:
parent_element = driver.find_element(By.XPATH, "//span[@class='child-class']/..")
解释:
//span[@class='child-class']定位子节点<span>。/..回到父节点<div>。
2. 通过兄弟节点定位
场景描述: 找到当前元素的兄弟节点,通常用于导航到同级的其他元素。
示例:
<div id="current">Current Node</div> <div id="sibling">Sibling Node</div>
XPath:
sibling_element = driver.find_element(By.XPATH, "//div[@id='current']/following-sibling::div[1]")
解释:
//div[@id='current']定位当前节点。/following-sibling::div[1]查找当前节点后面的第一个兄弟节点。
3. 动态属性定位
场景描述: 有些属性的值是动态生成的,比如随机 ID,可以使用部分匹配的方法来定位。
示例:
<input id="random_1234" type="text">
XPath:
element = driver.find_element(By.XPATH, "//input[contains(@id, 'random_')]")
解释:
contains(@id, 'random_')匹配包含random_的id属性。
4. 查找所有子节点
场景描述: 如果需要找到一个父节点下的所有直接子节点,可以使用 * 通配符。
示例:
<div id="container"><p>Paragraph 1</p><p>Paragraph 2</p><span>Span 1</span> </div>
XPath:
child_elements = driver.find_elements(By.XPATH, "//div[@id='container']/*")
解释:
//div[@id='container']定位父节点。/*表示父节点下的所有直接子节点。
5. 多条件复合定位
场景描述: 当单个属性无法唯一标识元素时,可以结合多个属性进行定位。
示例:
<input type="text" name="username" class="login-input">
XPath:
element = driver.find_element(By.XPATH, "//input[@type='text' and @name='username']")
解释:
@type='text'和@name='username'是两个条件。and用于组合条件。
6. 使用索引定位
场景描述: 如果有多个相似的元素,需要通过索引定位特定的一个。
示例:
<div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div>
XPath:
element = driver.find_element(By.XPATH, "(//div[@class='item'])[2]")
解释:
(//div[@class='item'])返回所有匹配的节点集合。[2]表示选择第二个元素。
7. 部分匹配属性值
场景描述: 如果属性值有特定的前缀或后缀,可以使用 starts-with 或 contains。
示例:
<button class="btn-primary-save">Save</button>
XPath:
element = driver.find_element(By.XPATH, "//button[starts-with(@class, 'btn-primary')]")
解释:
starts-with(@class, 'btn-primary')匹配以btn-primary开头的class属性值。
8. 动态加载的元素定位
场景描述: 某些页面的元素是异步加载的,需要显式等待。
示例:
<div id="dynamic_element_id">Loaded Content</div>
代码:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "dynamic_element_id")) )
解释:
WebDriverWait等待元素出现。presence_of_element_located检查元素是否已加载到页面上。
通过合理使用以上方法,结合实际场景的需求,可以高效定位并操作网页中的各种元素,提升测试的稳定性和准确性。
相关文章:
Selenium 八大元素定位方法及场景扩展
Selenium 提供了八种常见的元素定位方法,用于在网页中准确找到需要操作的元素。以下是详细介绍以及一些特殊场景的解决方案。 1. ID 定位 用法: 通过元素的唯一 id 属性进行定位。 element driver.find_element(By.ID, "element_id")使用场…...
WebRTC 的优缺点详细解析
在当今数字化浪潮中,WebRTC技术凭借其独特优势,在众多联网平台中得以广泛应用,为实时通信带来了革命性变化。然而,如同任何技术一样,它也并非十全十美,存在着一些有待攻克的短板。 一、WebRTC的优点 卓越…...
B树及其Java实现详解
文章目录 B树及其Java实现详解一、引言二、B树基础1、B树定义2、B树约束 三、B树Java实现1、B树节点实现2、B树操作2.1、搜索2.2、插入2.3、删除 3、B树的Java代码实现 四、总结 B树及其Java实现详解 一、引言 B树是一种多路平衡查找树,广泛应用于数据库和文件系统…...
下载ffmpeg执行文件
打开网址:Download FFmpeg 按下面步骤操作 解压文件就可以看到ffmpeg的执行文件了,需要通过命令行进行使用: ffmpeg命令行使用参考: ffmpeg 常用命令-CSDN博客...
Redis高频知识点
Redis 目录 1 Redis是AP的还是CP的?2 介绍一下Redis的集群方案?3 什么是Redis的数据分片?4 Redis为什么这么快?5 Redis 的事务机制是怎样的?7 Redis的持久化机制是怎样的?8 Redis 的过期策略是怎么样的&a…...
Boost.Asio 同步读写及客户端 - 服务器实现详解
Boost.Asio 同步读写及客户端 - 服务器实现详解 参考文献 Boost.Asio 官方文档学习资料来源: 参考网址 一、引言 Boost.Asio作为一个强大的跨平台网络编程库,为开发者提供了丰富的网络操作接口。在之前的学习中,我们已接触到其同步读写的API函数&…...
LeetCode 3019.按键变更的次数:遍历(转小写)
【LetMeFly】3019.按键变更的次数:遍历(转小写) 力扣题目链接:https://leetcode.cn/problems/number-of-changing-keys/ 给你一个下标从 0 开始的字符串 s ,该字符串由用户输入。按键变更的定义是:使用与…...
ETCD未授权测试
一、测试环境搭建 首先拉取etcd镜像 docker pull quay.io/coreos/etcd:v3.3.1 # 查看镜像 docker images创建自定义网络 docker network create --driver bridge --subnet172.16.1.0/16 --gateway172.16.1.1 mynet # 查看网络 docker network ls创建etcd节点 节点1: docke…...
【Hystrix-1】Hystrix:构建弹性分布式系统的基石
在分布式系统的广袤星图中,服务间的调用如同星辰间的引力,维系着系统的运转。然而,这种依赖关系也如同达摩克利斯之剑,一旦某个服务出现故障,便可能引发连锁反应,导致整个系统的崩塌。Hystrix,如…...
【超详细】MIT 液态神经网络(LNNs)——深度学习新动向
✅作者简介:双一流博士,人工智能领域学习者,深耕机器学习,交叉学科实践者。已发表SCI1/区top论文10+,授权专利4件,公开10+。可提供专利思路和指导,提供科研小工具,分享科研经验,欢迎交流! 📌个人主页: https://blog.csdn.net/allein_STR?spm=1011.2559.3001.5343…...
Git最便捷的迁移方式
#当公司要求git需要迁移时,你是不是感觉到束手无策。今天带来给大家最快,最便捷的迁移方式 这个命令是用于重命名git仓库中的远程仓库名。在这个命令中,我们将远程仓库的名字从"origin"改为"old-origin"。 git remote …...
2024AAAI SCTNet论文阅读笔记
文章目录 SCTNet: Single-Branch CNN with Transformer Semantic Information for Real-Time Segmentation摘要背景创新点方法Conv-Former Block卷积注意力机制前馈网络FFN 语义信息对齐模块主干特征对齐共享解码头对齐 总体架构backbone解码器头 对齐损失 实验SOTA效果对比Cit…...
Laravel操作ElasticSearch
在Laravel项目中操作ElasticSearch可以通过以下步骤来实现,通常会借助相应的ElasticSearch客户端扩展包。 ### 安装ElasticSearch客户端包 在Laravel项目中,常用的是 elasticsearch/elasticsearch 这个PHP客户端库来与ElasticSearch进行交互,…...
江科大STM32入门——SPI通信笔记总结
wx:嵌入式工程师成长日记 (一)简介 四根通信线:SCK、MOSI、MISO、SS(片选信号) 同步(同步通信是一种通信模式,在这种模式下,发送方和接收方在同一时刻进行数据传输。),全…...
微信小程序map组件所有markers展示在视野范围内
注意:使用include-points属性不生效,要通过createMapContext实现 <template><view class"map-box"><map id"map" class"map" :markers"markers" :enable-traffic"true" :enable-poi&…...
深度解析 tanh tanh 激活函数
1. 引言 在现代深度学习中,激活函数(Activation Function)是神经网络的核心组件之一。它的主要作用是引入非线性,从而使神经网络能够学习和表示复杂的非线性关系。如果没有激活函数,神经网络的输出将只是输入的线性组…...
嵌入式入门Day38
C Day1 第一个C程序C中的输入输出输出操作coutcin练习 命名空间使用方法自定义命名空间冲突问题 C对字符串的扩充C风格字符串的使用定义以及初始化C风格字符串与C风格字符串的转换C风格的字符串的关系运算常用的成员变量输入方法 布尔类型C对堆区空间使用的扩充作业 第一个C程序…...
探索Rancher服务发现机制:容器世界的“导航仪”
《探索Rancher服务发现机制:容器世界的“导航仪”》 在当今容器化技术蓬勃发展的时代,容器的大规模部署和微服务架构的广泛应用使得服务之间的相互发现与通信变得至关重要。Rancher作为一款功能强大的容器管理平台,其服务发现机制宛如一座无…...
【ROS2】Qt事件循环和ROS2订阅机制一起使用有什么注意事项?
1、简述 Qt的事件循环和ROS订阅回调函数都可能在阻塞函数中运行, 例如:Qt的QApplication::exec() 和 ROS的rclcpp::spin() 两个阻塞函数不能在同一个线程中使用,如果使用不当,会造成Qt不处理事件或者ROS2不处理订阅的回调函数。 2、多线程 一般 QApplication::exec() 运…...
donet (MVC)webAPI 的接受json 的操作
直接用对象来进行接收,这个方法还不错的。 public class BangdingWeiguiJiluController : ApiController{/// <summary>/// Json数据录入错误信息/// </summary>/// <param name"WeiguiInfos"></param>/// <returns></r…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
