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…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
生信服务器 | 做生信为什么推荐使用Linux服务器?
原文链接:生信服务器 | 做生信为什么推荐使用Linux服务器? 一、 做生信为什么推荐使用服务器? 大家好,我是小杜。在做生信分析的同学,或是将接触学习生信分析的同学,<font style"color:rgb(53, 1…...
