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 定位元素的…...
積分方程與簡單的泛函分析8.具連續對稱核的非齊次第II類弗雷德霍姆積分算子方程
1)def求解具連續對稱核的非齊次第II類弗雷德霍姆積分算子方程 设 是定义在上的连续对称核函数, 非齐次第二类弗雷德霍姆积分算子方程的形式为: , 其中是未知函数,是给定的连续函数,是参数。 2)def其特徵值是否一致…...
长理算法复习
选择排序 #include<iostream>using namespace std;const int N 1010; int a[N]; int n;void selectSort(){for (int i 0; i < n;i){int pos i;for (int j i 1; j < n;j){if(a[j]<a[pos])pos j;}swap(a[i], a[pos]);} }int main() {cin >> n;for (i…...

机器学习-K近邻算法
文章目录 一. 数据集介绍Iris plants dataset 二. 代码三. k值的选择 一. 数据集介绍 鸢尾花数据集 鸢尾花Iris Dataset数据集是机器学习领域经典数据集,鸢尾花数据集包含了150条鸢尾花信息,每50条取自三个鸢尾花中之一:Versicolour、Setosa…...

使用rsync+inotify简单实现文件实时双机双向同步
使用rsyncinotify简单实现文件实时双机双向同步 实现思路 使用inotify-tools的inotifywait工具监控文件变化,触发后使用rsync做同步。加入系统服务项,实现实时监听,方便管理。 以下配置操作,单向同步,只需在单边部…...
Ubuntu 24.04 LTS开机自启动脚本设置方法
目录 Ubuntu中设置开机自启动脚本步骤1:修改 rc-local.service文件步骤2:创建/etc/rc.local文件步骤3:修改/etc/rc.local的权限步骤4:启动rc-local.service步骤5:查看rc-local.service的服务状态 Ubuntu中设置开机自启…...
谈谈对JavaScript 中的事件冒泡(Event Bubbling)和事件捕获(Event Capturing)的理解
JavaScript 中的事件冒泡(Event Bubbling)和事件捕获(Event Capturing),是浏览器在处理事件时采用的两种机制,它们在事件的传播顺序上有显著区别。这两种机制帮助开发者在事件触发时,能够以不同…...

解读2025年生物医药创新技术:展览会与论坛的重要性
2025生物医药创新技术与应用发展展览会暨论坛,由天津市生物医药行业协会、BIO CHINA生物发酵展组委会携手主办,山东信世会展服务有限公司承办,定于2025年3月3日至5日在济南黄河国际会展中心盛大开幕。展会规模60000平方米、800参展商、35场会…...
【第七天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-一种常见的分治算法(持续更新)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.Python中的常用的分治算法2. 分治算法3.详细的分治代码1)一种常见的分治算法 总结 前言 提示:这…...

Spring Data JPA 实战:构建高性能数据访问层
1 简介 1.1 Spring Data JPA 概述 1.1.1 什么是 Spring Data JPA? Spring Data JPA 是 Spring Data 项目的一部分,旨在简化对基于 JPA 的数据库访问操作。它通过提供一致的编程模型和接口,使得开发者可以更轻松地与关系型数据库进行交互,同时减少了样板代码的编写。Spri…...
Python JSON:深入解析与高效应用
Python JSON:深入解析与高效应用 引言 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python 作为一种广泛使用的编程语言,对 JSON 的支持非常友好。本文将深入探讨 Python 中 JSON 的处理方法,包括基本操…...

【C语言进阶(四)】指针进阶详解(上)
指针进阶 1. 前言 2. 字符指针 2.1 常量字符串</br>2.2 常量字符串存储的位置</br> 3. 数组指针3.1 数组指针的使用</br> 4. 指针数组 4.1 拓展</br> 5. 数组传参与指针作为参数 5.1 一维数组传参</br> 5.2 二维数组传参</br> 5.3 一级指…...
DDD架构实战第五讲总结:将领域模型转化为代码
云架构师系列课程之DDD架构实战第五讲总结:将领域模型转化为代码 一、引言 在前几讲中,我们讨论了领域模型的重要性及其在业务分析中的渐进获得方法。本讲将聚焦于如何将领域模型转化为代码,使得开发人员能够更轻松地实现用户的领域模型。 二、从模型到代码:领域驱动设计…...

FPGA实现任意角度视频旋转(完结)视频任意角度旋转实现
本文主要介绍如何基于FPGA实现视频的任意角度旋转,关于视频180度实时旋转、90/270度视频无裁剪旋转,请见本专栏前面的文章,旋转效果示意图如下: 为了实时对比旋转效果,采用分屏显示进行处理,左边代表旋转…...

CPU 缓存基础知识
并发编程首先需要简单了解下现代CPU相关知识。通过一些简单的图,简单的代码,来认识CPU以及一些常见的问题。 目录 CPU存储与缓存的引入常见的三级缓存结构缓存一致性协议MESI协议缓存行 cache line 通过代码实例认识缓存行的重要性 CPU指令的乱序执行通过…...

微信小程序date picker的一些说明
微信小程序的picker是一个功能强大的组件,它可以是一个普通选择器,也可以是多项选择器,也可以是时间、日期、省市区选择器。 官方文档在这里 这里讲一下date picker的用法。 <view class"section"><view class"se…...

Vue3 + TS 实现批量拖拽 文件夹和文件 组件封装
一、html 代码: 代码中的表格引入了 vxe-table 插件 <Tag /> 是自己封装的说明组件 表格列表这块我使用了插槽来增加扩展性,可根据自己需求,在组件外部做调整 <template><div class"dragUpload"><el-dial…...

【Kubernetes】Pod生命周期、初始化容器、主容器
一、Pod生命周期 Pod从创建到终止退出的时间范围称为Pod生命周期。 1、生命周期重要流程 创建基础容器(pause container)初始化容器(init-X Containers)主容器(container)启动后的钩子(post-start)启动探…...

2025牛客寒假训练营1-M题
登录—专业IT笔试面试备考平台_牛客网 题目是翻倍一个连续子区间内的所有元素,求最大值和最小值的最小差。 那么最先的思路肯定是从最小值开始翻倍,然后是次小值,因为如果不翻倍最小值所在区间,那么次小值即使翻倍了只可能增大最大值,而不可能增大最小值。 因为区间是连续的,我…...

css3 svg制作404页面动画效果HTML源码
源码介绍 css3 svg制作404页面动画效果HTML源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果 效果预览 源码如下 <!doctype html> <html> <head> <meta charse…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...