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

news2024/11/28 16:35:45

一、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.coloradmin.cn/o/858158.html

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

相关文章

【计算机网络】应用层协议Http

文章目录 前言URL&#xff08;网址&#xff09;urlencode 和 urldecodeHttp格式方法Http状态码重定向Http常见报头会话保持结语 前言 通过前面的学习&#xff0c;我们已经知道了协议其实就是一种约定&#xff0c;要求双方都能理解对方的消息。应用层上的协议不属于操作系统&am…

七夕送什么礼物最有意义?可以试试潮趣数码好物!

​七夕送什么礼物最有意义&#xff1f;七夕节不想送常见物品&#xff0c;你可以送给他/她潮趣数码好物&#xff0c;不需要多么的贵重&#xff0c;最重要的是你的心意&#xff0c;只要你送的都喜欢。下面来安利几款值得入手的数码好物&#xff01; 推荐一&#xff1a;南卡00压开…

readMe、profile美化。

GitHub的profile美化&#xff0c;第一步&#xff1a;创建与个人账号一致的仓库。然后就会自动展示于个人首页、再新建readme.md文档&#xff0c;添加照片信息即可。&#xff08;动态效果是用svg实现的&#xff09; 一、上波浪svg代码 <svg xmlns"http://www.w3.org/2…

C# WPF 开源主题 HandyControl 的使用(一)

HandyControl是一套WPF控件库&#xff0c;它几乎重写了所有原生样式&#xff0c;同时包含80余款自定义控件&#xff08;正逐步增加&#xff09;&#xff0c;下面我们开始使用。 1、准备 1.1 创建项目 C# WPF应用(.NET Framework)创建项目 1.2 添加包 1.3 在App.xaml中引用…

15-矩阵转置的拓展延伸

&#x1f52e;矩阵的转置✨ 前言 在很多时候我们拿到的数据本身可能并不会把点的坐标按列的方向排列起来&#xff0c;对于我们人类来说&#xff0c;更方便的方式依然是把这个点的坐标按行的方向排列&#xff0c;我们比较熟悉把矩阵看作为一个数据&#xff0c;在这里&#xff0…

6款SSL证书实用工具,全都免费使用!

俗话说“工欲善其事&#xff0c;必先利其器”&#xff0c;SSL证书作为保护网站数据传输安全的重要部分&#xff0c;我们在申请、签发、部署安装SSL证书的时候&#xff0c;可能会涉及到CSR文件生成、获取证书链、转换证书格式等需求&#xff0c;这时候有对应的工具就可提高工作效…

SharePoint 审核和监控工具

审核在顺利的 SharePoint 管理中起着重要作用&#xff0c;尤其是在满足法规遵从性和取证要求方面。为避免数据泄露&#xff0c;必须了解谁来自哪个组访问了哪个文档&#xff0c;以及谁创建或删除了网站或网站集。 审核 SharePoint 服务器 SharePoint采用率的提高导致企业在其…

词性标记:了解使用维特比算法(2/2)

作者&#xff1a;Sachin Malhotra和Divya Godayal 来源&#xff1a; Viterbi Algorithm in Speech Enhancement and HMM 一、说明 早就想写一篇隐马尔可夫&#xff0c;以及维特比算法的文章&#xff1b;如今找了一篇&#xff0c;基本描述出隐马尔可夫的特点。 隐马尔可夫模型&a…

精彩回顾 | D-Day深圳 上海站:高频策略研发再提速

上周末&#xff0c;DolphinDB 分别在上海及深圳成功举办了两场 D-Day 分享会&#xff0c;来自国内头部券商、公募基金以及多家私募机构的数十位核心策略研发、数据分析专家们分享了 DolphinDB 在量化交易各个环节的使用经验&#xff0c;并基于与同类技术栈的优劣势对比&#xf…

java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 tbms

​ 项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以…

Java多线程(八)

目录 一、产生死锁的情况 1.1 一个线程多把锁 1.1.1 Java中可重入锁的实现机制 1.2 两个线程两把锁 1.3 N个线程M把锁 二、解决死锁的方案 2.1 死锁的必要条件 2.2 破除循环等待 一、产生死锁的情况 死锁是这样一种情形&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个…

开放式耳机很吵吗?开放式耳机推荐

​一般情况下&#xff0c;开放式耳机是不会吵到别人&#xff0c;开放设计&#xff0c;使声音不会被完全封闭在耳朵里&#xff0c;而是向四周扩散。与传统的封闭式耳机相比&#xff0c;开放式耳机以其出色的音质和宽广的音场而备受追捧。选择一款适合自己的开放式耳机无疑是至关…

金蝶云星空对接打通管易云分布式调入单查询接口与其他入库单新增完结接口接口

金蝶云星空对接打通管易云分布式调入单查询接口与其他入库单新增完结接口接口 源系统:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上&#xff0c;提供了标准的管理模式&#xff1b;通过标准的业务架构&#xff1a;多会计准则、多币别、多地点、多组织、多税制应…

Three.js WebXR沉浸式渲染简明教程

在前面文章中&#xff0c;我们了解了 VR 概念以及它们如何在 WebXR 中映射。 这使你可以考虑想要为用户提供的体验。 在本文中&#xff0c;我们将介绍如何将 WebXR 与 Three.JS 结合使用来创建针对大型异构用户群的沉浸式体验。 警告&#xff1a;WebXR API 仍在完善中&#xf…

C++学习笔记总结练习:数值方法

数值方法 1.1 随机数 头文件 #include<random>随机数概述 随机数分布。随机数的分布方式distribution 随机数引擎。产生随机数engin。随机性的源头 随机数生成器。由一个随机数引擎和一个随机数分布&#xff0c;组合成一个随机数生成器。 随机数引擎的操作 编译器…

关于@JSONField的使用

1.此注解来自jar包com.alibaba.fastjson 今天分享一个有意思的事情。这个注解作用与类的属性上&#xff0c;如下&#xff1a; ApiModelProperty(value"开始时间,格式:yyyy-MM-dd",required true) JSONField(name"start_date",ordinal 1) private String…

扫盲!PRINCE2认证6大常见问题集锦!

一&#xff0c;什么是PRINCE2认证&#xff1f; PRINCE2是PRoject IN Controlled Environment&#xff08;受控环境下的项目管理&#xff09;的简称&#xff0c;也叫国际项目管理师认证&#xff0c;是英国商务部(OGC)在1996年开始推广世界三大项目管理体系之一。 PRINCE2是一套…

API数据安全风险飙升! 3场景1实践看美创科技API-SMAC有效防护

在某次实战攻防演练中&#xff0c;防守方层层布防&#xff0c;搭建了十分健全的防御体系&#xff0c;本以为万无一失&#xff0c;结果靶标悄无声息被拿下。事后溯源中才发现&#xff0c;一个存在未授权访问的历史API&#xff0c;成为了突破口&#xff0c;敏感信息被红队获取&am…

【LeetCode 75】第二十一题(1207)独一无二的出现次数

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 用两个unordered_map来分别存放每个数字的出现次数和出现的次数这个数,有点绕,比如说有给的数组有两个1,那么第一个map存放的是(1,2),表示1这个数子出现了两次,而第二个map存放的是(2,true),表示有出现次数为2的数…

python——案例11:数值交换

案例11&#xff1a;数值交换xinput(输入一个数值赋值给x&#xff1a;) yinput(输入一个数值赋值给y&#xff1a;)tempx #创建临时变量&#xff0c;以此变量为基础进行逐次交换 xy ytemp print(交换后的X的值是:{}.format(x)) # print(交换后的Y的值是:{}.format(y)) #