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…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
