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…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...