selenium定位网页元素
1、概述
在使用 Selenium 进行自动化测试时,定位网页元素是核心功能之一。Selenium 提供了多种定位方法,每种方法都有其适用场景和特点。以下是通过 id、linkText、partialLinkText、name、tagName、xpath、className 和 cssSelector 定位元素的详细说明。
2、通过 id 定位
id 是 HTML 元素的唯一标识符,通常是最高效和最简单的定位方式。
element = driver.find_element(By.ID, "element_id")
-
特点:
id必须是唯一的,因此定位速度快且准确。 -
适用场景:当元素有唯一的
id属性时。
3、通过 linkText 定位
linkText 是通过链接的完整文本内容来定位元素。
element = driver.find_element(By.LINK_TEXT, "完整链接文本")
-
特点:只能用于定位
<a>标签(超链接)。 -
适用场景:当链接文本是唯一的,且需要精确匹配时。
4、通过 partialLinkText 定位
partialLinkText 是通过链接文本的一部分来定位元素。
element = driver.find_element(By.PARTIAL_LINK_TEXT, "部分链接文本")
-
特点:比
linkText更灵活,只需匹配部分文本即可。 -
适用场景:当链接文本较长,或者部分文本是动态生成时。
5、通过 name 定位
name 是通过元素的 name 属性来定位。
element = driver.find_element(By.NAME, "element_name")
-
特点:
name通常用于表单元素(如输入框、按钮等)。 -
适用场景:当元素有唯一的
name属性时。
6、通过 tagName 定位
tagName 是通过元素的 HTML 标签名称来定位。
element = driver.find_element(By.TAG_NAME, "div")
-
特点:定位所有具有相同标签的元素。
-
适用场景:通常用于获取一组元素,然后通过其他方法进一步筛选。
7、通过 className 定位
className 是通过元素的 class 属性来定位。
element = driver.find_element(By.CLASS_NAME, "class_name")
-
特点:
class属性可以有多个值,但find_element只能匹配其中一个值。 -
适用场景:当元素有唯一的
class属性时。
8、通过 cssSelector 定位
cssSelector 是通过 CSS 选择器来定位元素。
element = driver.find_element(By.CSS_SELECTOR, "input#element_id")
-
特点:
-
支持 ID、类名、属性、伪类等多种选择器。
-
性能通常优于
xpath。
-
-
适用场景:当需要使用复杂的 CSS 选择器时,如定位具有特定属性的元素。
9、通过 xpath 定位
xpath 是一种强大的定位方法,可以通过路径表达式来定位元素。
element = driver.find_element(By.XPATH, "//input[@id='element_id']")
-
特点:
-
支持相对路径和绝对路径。
-
可以通过属性、位置、文本等多种方式定位。
-
-
适用场景:当其他定位方法无法满足需求时,
xpath是最灵活的选择。
XPath 的基本语法
XPath 使用路径表达式来定位节点。以下是一些常用的语法规则:
-
/-
表示从根节点开始定位。
-
例如:
/html/body/div表示从根节点<html>开始,逐级找到<body>下的<div>。
-
-
//-
表示从任意层级开始查找。
-
例如:
//div表示查找文档中所有的<div>元素。
-
-
[@属性名='值']-
通过元素的属性来定位。
-
例如:
//input[@id='username']表示查找id属性为username的<input>元素。
-
-
text()-
通过元素的文本内容来定位。
-
例如:
//button[text()='Submit']表示查找文本内容为Submit的<button>元素。
-
-
*-
通配符,表示任意元素。
-
例如:
//div/*表示查找<div>下的所有子元素。
-
-
[]-
用于添加条件。
-
例如:
//div[@class='example'][1]表示查找class为example的第一个<div>。
-
-
..-
表示父节点。
-
例如:
//input[@id='username']/..表示查找id为username的<input>的父元素。
-
-
and/or-
用于组合多个条件。
-
例如:
//input[@id='username' and @type='text']表示查找id为username且type为text的<input>。
-
XPath 的示例
<html><body><div id="header"><h1>Welcome</h1></div><div class="content"><form id="loginForm"><input type="text" id="username" name="username" placeholder="Username"><input type="password" id="password" name="password" placeholder="Password"><button type="submit">Login</button></form></div></body>
</html>
1. 定位 <h1> 元素
-
XPath:
/html/body/div/h1 -
解释:从根节点
<html>开始,逐级找到<body>下的<div>,再找到<h1>。
2. 定位 id 为 username 的 <input> 元素
-
XPath:
//input[@id='username'] -
解释:查找任意层级下的
<input>元素,且id属性为username。
3. 定位 class 为 content 的 <div> 下的 <button> 元素
-
XPath:
//div[@class='content']//button -
解释:查找
class为content的<div>,然后在其任意子层级中找到<button>。
4. 定位文本内容为 Login 的 <button> 元素
-
XPath:
//button[text()='Login'] -
解释:查找任意层级下的
<button>元素,且文本内容为Login。
5. 定位 id 为 loginForm 的表单下的所有 <input> 元素
-
XPath:
//form[@id='loginForm']//input -
解释:查找
id为loginForm的<form>,然后在其任意子层级中找到所有<input>。
6. 定位第一个 <input> 元素
-
XPath:
(//input)[1] -
解释:查找文档中所有的
<input>元素,然后选择第一个。
7. 定位 type 为 password 的 <input> 元素
-
XPath:
//input[@type='password'] -
解释:查找任意层级下的
<input>元素,且type属性为password。
10、总结
-
id:最高效,适用于唯一标识。 -
linkText和partialLinkText:适用于超链接。 -
name:适用于表单元素。 -
tagName:适用于获取一组元素。 -
xpath:最灵活,适用于复杂定位。 -
className:适用于具有唯一类名的元素。 -
cssSelector:性能好,适用于复杂选择器。
在实际使用中,可以根据元素的特点和页面结构选择最适合的定位方法。
相关文章:
selenium定位网页元素
1、概述 在使用 Selenium 进行自动化测试时,定位网页元素是核心功能之一。Selenium 提供了多种定位方法,每种方法都有其适用场景和特点。以下是通过 id、linkText、partialLinkText、name、tagName、xpath、className 和 cssSelector 定位元素的…...
Autogen_core 测试代码:test_cache_store.py
目录 原始代码测试代码代码中用到的typing注解 原始代码 from typing import Dict, Generic, Optional, Protocol, TypeVarT TypeVar("T")class CacheStore(Protocol, Generic[T]):"""This protocol defines the basic interface for store/cache o…...
变压器的漏感
测量变压器漏感的时候需要将次级绕组短路: 测量变压器初级线圈的电感方法很简单,直接用LCR测量就可,无需像测量漏感那样将次级绕组短接:...
【新春特辑】2025年春节技术展望:蛇年里的科技创新与趋势预测
🔥【新春特辑】2025年春节技术展望:蛇年里的科技创新与趋势预测 📅 发布日期:2025年01月29日(大年初一) 在这个辞旧迎新的美好时刻,我们迎来了充满希望的2025年,也是十二生肖中的蛇…...
cursor软件的chat和composer分别是什么
Cursor 是一款基于人工智能的代码编辑器,集成了类似 ChatGPT 的功能,旨在帮助开发者更高效地编写代码。以下是 Cursor 中 Chat 和 Composer 的具体功能: 1. Chat Cursor 中的 Chat 是一个基于 AI 的聊天功能,类似于 ChatGPT&…...
从ChatGPT热潮看智算崛起
2025年1月7日,科智咨询发布《2025年IDC产业七大发展趋势》,其中提到“ChatGPT开启生成式AI热潮,智能算力需求暴涨,算力供给结构发生转变”。 【图片来源于网络,侵删】 为何会以ChatGPT发布为节点呢?咱们一起…...
攻克 AI 幻觉难题
当下,AI 已经成为我们生活中不可或缺的一部分。无论是智能语音助手,还是对话式的AI模型,它们凭借强大的算法和海量的数据,为我们答疑解惑、出谋划策。 然而,小编今天向AI提问:上山打老虎。他却回答&#x…...
格式化时间的插件
1.安装dayjs包 npm i dayjs 2.组件中的应用...
自创《艺术人生》浅析
艺术是生活的馈赠,艺术是苦痛的呻吟。 笔记模板由python脚本于2025-01-29 00:01:11创建,本篇笔记适合喜欢写诗读诗诵诗的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验,而不仅仅是知识的简单复述。 …...
【Python-办公自动化】实现自动化输出json数据类型的分析报告和正逆转换
分析报告 import json from pprint import pprint, PrettyPrinterdef analyze_energy_data(file_path):"""能源数据分析与结构查看函数参数:file_path (str): JSON文件路径功能:1. 加载并解析JSON数据2. 显示数据结构概览3. 交互式结构探索"""…...
防御保护第一次实验:安全策略配置
一、实验拓扑 二、实验要求 三、需求分析 1.创建两个vlan 2.在ENSP中配置基于时间的ACL实现对于办公区PC访问OA Server的时间限制(工作日早8到晚6)。 3.通过配置基于MAC地址的ACL来实现对于生产区PC访问Web Server的限制(除PC3外不能访问&am…...
【Pytest】生成html报告中,中文乱码问题解决方案
链接上一篇文章:https://blog.csdn.net/u013080870/article/details/145369926?spm1001.2014.3001.5502 中文乱码问题,python3,Python3.7后,还一个文件就是result.py 因为中文可以在内容中,也可能在文件名,类名&…...
【ollama通过命令行启动后如何在网页端查看运行】
ollama通过命令行启动后如何在网页端查看运行 http://localhost:11434/...
Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊(毛玻璃)对比,Kotlin
Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊(毛玻璃)对比,Kotlin import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas import android.graphics.RectF …...
Jetpack Compose 和 Compose Multiplatform 还有 KMP 的关系
今天刚好看到官方发布了一篇文章,用于讨论 Compose Multiplatform 和 Jetpack Compose 之间的区别,突然想起之前评论区经常看到说 “Flutter 和 CMP 对于 Google 来说项目重叠的问题”,刚好可以放一起聊一聊。 最近写的几篇内容写的太干&…...
基于STM32的智能宠物喂食器设计
目录 引言系统设计 硬件设计软件设计 系统功能模块 定时喂食模块远程控制与视频监控模块食物存量检测与报警模块语音互动与用户交互模块数据记录与智能分析模块 控制算法 定时与手动投喂算法食物存量检测与低存量提醒算法数据记录与远程反馈算法 代码实现 喂食控制代码存量检测…...
python生成图片和pdf,快速
1、下载安装 pip install imgkit pip install pdfkit2、wkhtmltopdf工具包,下载安装 下载地址:https://wkhtmltopdf.org/downloads.html 3、生成图片 import imgkit path_wkimg rD:\app\wkhtmltopdf\bin\wkhtmltoimage.exe # 工具路径,安…...
解锁FPGA的故障免疫密码
我们身处“碳基智能”大步迈向“硅基智能”序曲中,前者更像是后者的引导程序,AI平民化时代,万物皆摩尔定律。 越快越好,几乎适用绝大多数场景。 在通往人工智能的征程中,算力无处不在,芯片作用无可替代。 十六年前,就已宣称自己是一家软件公司的英伟达,现已登顶全球…...
【数据结构】初识链表
顺序表的优缺点 缺点: 中间/头部的插入删除,时间复杂度效率较低,为O(N) 空间不够的时候需要扩容。 如果是异地扩容,增容需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗。 扩容可能会存在…...
【hot100】刷题记录(6)-轮转数组
题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转…...
如何移植ftp服务器到arm板子?
很多厂家提供的sdk,一般都不自带ftp服务器功能, 需要要发人员自己移植ftp服务器程序。 本文手把手教大家如何移植ftp server到arm板子。 环境 sdk:复旦微 Buildroot 2018.02.31. 解压 $ mkdir ~/vsftpd $ cp vsftpd-3.0.2.tar.gz ~/vs…...
深度学习 Pytorch 神经网络的损失函数
本节开始将以分类神经网络为例,展示神经网络的学习和训练过程。在介绍PyTorch的基本工具AutoGrad库时,我们系统地介绍过数学中的优化问题和优化思想,我们介绍了最小二乘法以及梯度下降法这两个入门级优化算法的具体操作,并使用Aut…...
Node.js 的底层原理
Node.js 的底层原理 1. 事件驱动和非阻塞 I/O Node.js 基于 Chrome V8 引擎,使用 JavaScript 作为开发语言。它采用事件驱动和非阻塞 I/O 模型,使其轻量且高效。通过 libuv 库实现跨平台的异步 I/O,包括文件操作、网络请求等。 2. 单线程事…...
C++ 中用于控制输出格式的操纵符——setw 、setfill、setprecision、fixed
目录 四种操纵符简要介绍 setprecision基本用法 setfill的基本用法 fixed的基本用法 setw基本用法 以下是一些常见的用法和示例: 1. 设置字段宽度和填充字符 2. 设置字段宽度和对齐方式 3. 设置字段宽度和精度 4. 设置字段宽度和填充字符,结合…...
996引擎 - NPC-添加NPC引擎自带形象
996引擎 - NPC-添加NPC引擎自带形象 截图参考添加NPC参考资料截图参考 添加NPC 编辑NPC表:Envir\DATA\cfg_npclist.xls 1.1. 需要临时隐藏NPC时可以在id前加 // 1.2. 如果NPC朝向不对,可以调整dir 列。(按8方向,上是0顺时针数。我这里给的4) 1.3. 形象代码:NPC代码、怪物…...
深度研究新范式:通过Ollama和DeepSeek R1实现自动化研究
引言 在信息时代,海量数据的产生与传播速度前所未有地加快,这既为研究者提供了丰富的资源,也带来了信息筛选与处理的巨大挑战。 传统研究方法往往依赖于研究者的个人知识库、文献检索技能以及时间投入,但面对指数级增长的数据量…...
Golang 并发机制-1:Golang并发特性概述
并发是现代软件开发中的一个基本概念,它使程序能够同时执行多个任务,从而提高效率和响应能力。在本文中,我们将探讨并发性在现代软件开发中的重要性,并深入研究Go处理并发任务的独特方法。 并发的重要性 增强性能 并发在提高软…...
(一)QT的简介与环境配置WIN11
目录 一、QT的概述 二、QT的下载 三、简单编程 常用快捷键 一、QT的概述 简介 Qt(发音:[kjuːt],类似“cute”)是一个跨平台的开发库,主要用于开发图形用户界面(GUI)应用程序,…...
代码随想录算法训练营第34天| 动态规划:01背包理论基础(二维和一维)、416. 分割等和子集
模板: 今日学习的文章链接和视频链接自己看到题目的第一想法看完代码随想录之后的想法 自己实现过程中遇到哪些困难 今日收获,记录一下自己的学习时长 动态规划:01背包理论基础 题目链接:46. 携带研究材料(第六期模拟…...
OpenEuler学习笔记(十四):在OpenEuler上搭建.NET运行环境
一、在OpenEuler上搭建.NET运行环境 基于包管理器安装 添加Microsoft软件源:运行命令sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm,将Microsoft软件源添加到系统中,以便后续能够从该源安装.…...
