关于selenium 元素定位的浅度解析

一、By类单一属性定位

元素名称

描述

Webdriver API

id

id属性

driver.find_element(By.ID, "id属性值")

name

name属性

driver.find_element(By.NAME, "name属性值")

class_name

class属性

driver.find_element(By.CLASS_NAME, "class_name属性值")

tag_name

标签名

driver.find_element(By.TAG_NAME, "标签名")

link_text

a元素的文本内容-精准匹配

driver.find_element(By.LINK_TEXT, "超链接全部文本值")

partial_link_text

a元素的文本内容-模糊匹配

driver.find_element(By.PARTIAL_LINK_TEXT, "超链接部分文本值")

  1. id定位
  • 特点:id定位 是通过元素的id属性来定位元素的;在整个HTML文档中 id 属性必须是唯一的。(APP中id属性不唯一)
  • 前提:元素有id属性
  • 说明:当目标元素存在 id属性值时,优先使用 id 方法定位元素,前提id不是动态变化的。
  1. name定位
  • 特点:name定位是根据元素name属性来定位的;在HTML文档中 name 的属性值是可以重复的

注意:当页面内有多个元素的特征值是相同的时候,定位元素的方法执行时,默认只会获取第一个符合要求的特征对应的元素。

因此,定位元素时需要尽量保证使用的特征值能够代表目标元素在当前页面的唯一性。

  1. class name 定位
  • 特点:class_name定位是根据元素class属性值来定位元素;HTML通过使用class来定义元素的样式,class属性值可以有多个。
  • 前提:元素有class属性
  • 注意:在使用 class name 方法时,如果**class**有多个属性值,只能使用其中的一个。

比如:class="panel-body has-table scrollbar-hover",只能使用其中一个值panel-body或者has-table或者scrollbar-hover,中间的空格代表间隔符,表示class有多个属性。

  1. tag name 定位
  • 特点:tag_name定位 是通过**标签名**来定位的;HTML本质就是由不同的tag组成,每一种标签一般在页面中存在多个,所以不方便进行精确定位,一般很少使用。
  • 说明:如果存在多个相同的标签,则返回符合条件的 第一个标签
  • 由于标签名的重复性过高,一般做精确定位时,都不会选择tag_name
  1. link test 定位
  • 特点:link_text定位是只针对超链接元素(< a>标签</a >,精确匹配),通过超链接的文本内容来定位元素的(超链接文本必须是唯一,不能有空格),并且需要输入超链接的全部文本信息。
  • 案例:element = driver.find_elementt("link test", '访问新浪网站')
  1. partial link text定位
  • 特点:只针对超链接元素,需要输入超链接的部分文本信息。
  • 案例:element = driver.find_element("partial link text", '访问新浪')
  • 说明:partial link text:a标签通过【模糊匹配】超链接文本,定位元素超链接文本必须是唯一。

二、xpath定位表达式汇总

2.1 xpath术语

2.1.1 节点

  1. XPath中的节点主要有以下几种类型: 元素节点 - 表示XML或HTML中的一个元素(也就是标签),如<book>。 属性节点 - 表示元素的一个属性,如<book category="computer">中的category属性。 文本节点 - 表示元素或属性中的文本内容,如<book>Java</book>中的Java。 文档节点 - 表示整个文档,作为文档树的根节点。 命名空间节点 - 表示XML命名空间,通常是文档的子节点。
  2. 定位节点的方式: 通过路径表达式,如book节点://book 通过节点关系,如parent、child等 通过顺序关系,如following-sibling等

2.1.2 基本值

基本值(Atomic Value)指的是不能再分解的单个值,XML中的一些基本值包括:

  • 字符串(String)
  • 整数(Integer)
  • 小数(Decimal)
  • 布尔值(Boolean)
  • 日期时间(Date/Time)

基本值就是XML文档中的终端节点,不再包含子元素。

例如:

<person><name>John</name><age>30</age>
</person>

上述XML中:

  • name和age元素中的"John"和"30"就是基本值
  • 而person不是基本值,因为它还包含子元素

基本值有以下特点:

  • 不可再分解为更小单元
  • 没有属性或子元素
  • 包含实际数据

2.2 节点关系

2.2.1父(Parent)

每个元素以及属性都有一个父。

在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:

<book><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book>

2.2.2子(Children)

元素节点可有零个、一个或多个子。

在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:

<book><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book>

2.2.3同胞(Sibling)

拥有相同的父的节点

在下面的例子中,title、author、year 以及 price 元素都是同胞:

<book><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book>

2.2.4先辈(Ancestor)

某节点的父、父的父,等等。

在下面的例子中,title 元素的先辈是 book 元素和 bookstore 元素:

<bookstore><book><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book></bookstore>

2.2.5后代(Descendant)

某个节点的子,子的子,等等。

在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素:

<bookstore><book><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book></bookstore>

2.3 xpath定位表达式汇总

 

三、CSS选择器策略汇总

基本介绍:

  • CSS(Cascading Style Sheets)是一种语言,它用来描述HTML元素的显示样式;
  • 在CSS中,选择器是一种模式,用于选择需要添加样式的元素;
  • 在Selenium中也可以使用这种选择器来定位元素。
  • 在Selenium中推荐使用CSS定位(前提得会😂),因为它比XPath定位速度要快。

 

四、元素定位策略总结

  • 如果元素有明确id,name,class属性时,使用对应的基本定位方法。
  • 如果没有id,name,class属性时,或id,name,class属性是动态/不唯一的时候,使用XPath和css_selector定位。
  • 定位页面超链接使用link_text和partial_link_text定位
  • 可使用XPath和css_selector定位的时候,优先使用css_selector。css_selector定位的速度和效率比Xpath高。
  • 没有最好的,只有最精简的,怎么简单怎么来。

五、selenium相关总结脑图大全

附带捎上一份selenium相关总结脑图

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/35300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAUI+Blazor:隐藏标题栏和问题

文章目录 前言相关文章代码问题有必要解决吗&#xff1f; 前言 最近在研究MAUIBlazor开发&#xff0c;发现一个问题&#xff0c;原生的的标题栏实在是太丑了。 相关文章 MAUI桌面端标题栏设置和窗口调整 MAUI Windows How to completely hide the TitleBar? #15142 MAUI …

Chrome开发者工具介绍

Chrome开发者工具介绍 前言1 打开DevTools2 命令菜单3 Elements面板ConsoleJavaScript调试Network 前言 Chrome开发者工具是谷歌浏览器自带的一款开发者工具&#xff0c;它可以给开发者带来很大的便利。常用的开发者工具面板主要包含Elements面板、Console面板、Sources面板、…

数据结构——时间复杂度和空间复杂度

1.算法效率 2.时间复杂度 3.空间复杂度 4. 常见时间复杂度以及复杂度oj练习 1.算法效率 1.1 如何衡量一个算法的好坏 如何衡量一个算法的好坏呢&#xff1f;比如对于以下斐波那契数的计算 long long Fib(int N) { if(N < 3) return 1; return Fib(N-1) Fib(N-2); }我们看到…

2023 互联网大厂薪资大比拼

最近整理了33家互联网大厂的薪资情况。可以看出来&#xff0c;大部分互联网大厂薪资还是很不错的&#xff0c;腾讯、阿里、美团、百度等大厂平均月薪超过30k&#xff0c;其他互联网大厂平均月薪也都在25k以上。01020304050607080910111213141516171819202122232425262728293031…

yo!这里是STL::list类简单模拟实现

目录 前言 重要接口实现 框架 默认成员函数 迭代器&#xff08;重点&#xff09; 1.引言 2.list迭代器类实现 3.list类中调用实现 增删查改 后记 前言 我们知道&#xff0c;stl中的vector对应数据结构中的顺序表&#xff0c;string类对应字符串&#xff0c;而今天要…

Unity C# 之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息

Unity C# 之 Http 获取网页的 html 数据&#xff0c;并去掉 html 格式等相关信息 目录 Unity C# 之 Http 获取网页的 html 数据&#xff0c;并去掉 html 格式等相关信息 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、关键代码 一、简单介绍 Unity中的一些知…

Linux网络基础(中)

目录&#xff1a; 再谈“协议” HTTP协议 认识URL&#xff1a; urlnecode和urldecode HTTP协议格式&#xff1a; HTTP的方法&#xff1a; 简易HTTP服务器&#xff1a; 传输层 再谈端口号&#xff1a; 端口号范围划分&#xff1a; netstat&#xff1a; pidof&…

Ubantu安装Docker(完整详细)

先在官网上查看对应的版本:官网 然后根据官方文档一步一步跟着操作即可 必要准备 要成功安装Docker Desktop&#xff0c;必须&#xff1a; 满足系统要求 拥有64位版本的Ubuntu Jammy Jellyfish 22.04&#xff08;LTS&#xff09;或Ubuntu Impish Indri 21.10。 Docker Deskto…

Redis基础命令大全

这里写目录标题 第一章、Redis 命令大全1.1&#xff09;通用命令语法&#xff1a;ping语法&#xff1a;dbsize语法&#xff1a;select db语法&#xff1a;flushdb语法&#xff1a;exit 或 quit语法&#xff1a;redis-cli 1.2&#xff09;Redis 的 Key 的操作命令语法&#xff1…

Elasticsearch之kibana相关命令

1.中文分词器相关命令 2.拼音分词器相关命令

服务器之LNMP

lnmp的构成 L&#xff1a;linux系统,操作系统。 N&#xff1a;nginx网站服务&#xff0c;前端,提供前端的静态页面服务。同时具有代理,转发的作用。 转发&#xff1a;主要是转发后端请求。转发到PHP。nginx没有处理动态资源的功能,他有可以支持转发动态请求的模块。 M&…

REDIS主从配置

目录 前言 一、概述 二、作用 三、缺点 四、redis主从复制的流程 五、搭建redis主从复制 总结 前言 Redis的主从配置是指在Redis集群中&#xff0c;将一个Redis节点配置为主节点&#xff08;master&#xff09;&#xff0c;其他节点配置为从节点&#xff08;slave&#xff09;…

【数据结构•堆】堆排序(理论基础)

堆的定义  • 堆是一个完全二叉树   –所有叶子在同一层或者两个连续层   –最后一层的结点占据尽量左的位置  • 堆性质   –为空, 或者最小元素在根上   –两棵子树也是堆 存储方式  • 最小堆的元素保存在heap[1..hs]内   – 根在heap[1]   –K的左儿子是2k,…

细胞——求细胞数量 C++详解

细胞——求细胞数量 C详解 求细胞数量题目描述输入格式输出格式样例样例输入样例输出 提示数据规模与约定 解法代码 求细胞数量 题目描述 一矩形阵列由数字 0 0 0 到 9 9 9 组成&#xff0c;数字 1 1 1 到 9 9 9 代表细胞&#xff0c;细胞的定义为沿细胞数字上下左右若还…

vue3中使用component动态组件常见问题

一. 在vue3中使用动态组件问题警告处理 1. 代码如下 <template><div v-for"(item, index) in navItems" :key"index"><component :is"item.component" :key"item.gameId"></component></div> </te…

Leetcode-每日一题【剑指 Offer 26. 树的子结构】

题目 输入两棵二叉树A和B&#xff0c;判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构&#xff0c; 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B&#xff1a; 4 / 1 返回 true&#xff0…

Vue + MapBox快速搭建

一、说明&#xff1a; 1.mapbox-gl自2.0版本开始不再开源&#xff0c;需要用户在官网申请key使用。 2.maplibre GL JS是一个开源库&#xff0c;它起源于 mapbox-gl-js 的开源分支。该库的初始版本&#xff08;1.x&#xff09;旨在替代Mapbox的OSS版本。简单来说maplibre是mapb…

C++——缺省参数

缺省参数的定义 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数的时候&#xff0c;如果没有指定实参&#xff0c;则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout << a << endl; } int main() { Func()…

【Kubernetes】Kubernetes之Pod详解

Pod 一、 Pod1. Pod 基础概念2. 在 Kubrenetes 集群中 Pod 使用方式2.1 pasue 容器2.2 kubernetes 中的 pause 容器提供的功能 3. Pod 的概念和结构组成4. Pod 的分类5. Pod 容器的分类5.1 基础容器&#xff08;infrastructure container&#xff09;5.2 初始化容器&#xff08…

【大数据】Flink 详解(二):核心篇 Ⅲ

Flink 详解&#xff08;二&#xff09;&#xff1a;核心篇 Ⅲ 29、Flink 通过什么实现可靠的容错机制&#xff1f; Flink 使用 轻量级分布式快照&#xff0c;设计检查点&#xff08;checkpoint&#xff09;实现可靠容错。 30、什么是 Checkpoin 检查点&#xff1f; Checkpoint …