Python —— UI自动化之八大元素定位

1、基础元素定位

1、id定位

使用html中标签的id元素去定位,在一般定位中优先选择,举例:

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
driver.maximize_window()    # 放大窗口'''第一种方式,也是最简单的定位方式,ID'''
driver.find_element(By.ID,"kw").send_keys("测试开发工程师")
sleep(5)

2、name定位

举例如下:

找到百度页面的name元素:

通过name方式定位这个元素:

'''第二种方式,通过name定位'''
driver.find_element(By.NAME,"wd").send_keys("高薪工作")
sleep(5)  #停留5秒针
driver.close()   # 关闭浏览器操作

3、标签名定位

一般一个页面会有多个重复的标签名,标签名定位默认去找页面中的第一个input标签名的元素,所以这种方式几乎不使用

'''第三种方式,通过标签名定位'''
driver.find_element(By.TAG_NAME,"input").send_keys("高薪工作")
sleep(5)
driver.close()

4、样式名定位

样式定位使用标签中的classname定位,在元素的class属性值 ,用的较少
 注意:CLASS_NAME只能支持单个样式值,不能支持多个。如果要能去支持多个样式值的话,我们可以使用CSS选择器/Xpath

'''第四种方式,通过样式名定位'''
driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("高薪工作")
sleep(5)
driver.close()


5、超链接完整文本定位方式

'''第五种方式:link_text定位 - 超链接元素的文本'''
driver.find_element(By.LINK_TEXT,"更多").click()
sleep(5)
driver.close()

备注一个小知识:什么情况下超链接会打开一个新的窗口,超链接元素有属性target="_blank"

6、超链接部门文本定位方式

'''第五种方式:link_text定位 - 超链接元素的文本'''
driver.find_element(By.PARTIAL_LINK_TEXT,"北京延庆下雪").click()
sleep(5)
driver.close()

备注:超链接定位元素是建立在要定位的元素在a标签中的基础上

2、cssSelector选择器 - 元素定位

1、根据标签名,实际使用很少

driver.find_element(By.CSS_SELECTOR,"input");

2、根据ID

使用id定位时,id的值前方需要加 “#” 号,有2种方式:

1、“#id值”,如下:

driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("测试派")
sleep(5)
driver.close()

2、“标签名#id值”,如下:

driver.find_element(By.CSS_SELECTOR,"input#kw").send_keys("柠檬")
sleep(5)
driver.close()

3、根据className

有2种方式:

1、直接写样式名,写法 “.样式名”

driver.find_element(By.CSS_SELECTOR,".s_ipt").send_keys("橙子")
sleep(5)
driver.close()

2、写标签名加样式名,写法 “标签名.样式名”

driver.find_element(By.CSS_SELECTOR,"input.s_ipt").send_keys("橙子")
sleep(5)
driver.close()

4、根据属性选择定位

写法:“标签名[属性名=‘属性值’]”

driver.find_element(By.CSS_SELECTOR,"div[aria-label='百度热搜']").click()
sleep(3)
driver.close()

5、多属性选择定位

写法:"标签名[属性1='属性值'][属性2='属性值']"

driver.find_element(By.CSS_SELECTOR,"input[class='s_ipt'][name='wd']").send_keys("你好")
sleep(5)
driver.close()

3、xpath元素定位(支持web页面+APP页面+小程序页面)

1、概述

xpath是一种path(路径),一个描述页面元素位置信息的路径,相当于元素的坐标。xpath基于XML文档树形结构,是XML路径语言,用来查询xml文档中的节点。xpath既可以用于XML,也可以用于HTML。

以下介绍xpath的定位方式。

2、xpath绝对定位即绝对路径,一般不推荐使用

绝对路径以 / (单引号)表示,而且是让解析引擎从文档的根节点开始解析,也就是html这个节点下开始解析,举例如下:

找到要定位的元素的html标签,在标签旁边点击右键 - 选择 copy - 选择Copy full Xpath,即可复制当前标签的绝对路径,可以看到有 xpath和full xpath两种方式,xpath代表相对路径,full xpath是绝对路径

代码:

from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element(By.XPATH,"/html/body/div[2]/div[2]/div[5]/div[1]/div/form/span[1]/input").send_keys("测试")
sleep(5)
driver.close()

这个代码是有问题的,不能找到指定元素

3、xpath相对路径

相对路径则以 // (双斜杠)表示,则表示让解析的引擎从文档的任意符合的元素节点开始运行解析(条件:身高、体重)

1、属性定位

有2种定位方式:

1、//标签名[@属性名=‘值’] 或者  标签名[属性名=‘属性值’] #css选择器的写法

driver.find_element(By.XPATH,"//*[@id='kw']").send_keys("测试找工作")

2、多个属性定位,// 标签名[@属性名=‘值1’ and @属性名=‘值2’]

driver.find_element(By.XPATH,"//input[@class='s_ipt' and @name='wd']").send_keys("测试开发工程师")
2、文本定位
driver.find_element(By.XPATH,"//a[text()='网盘']").click()
3、*代表通配符,表示筛选所有的标签名
//*[@id='kw']
4、包含匹配 - 模糊匹配-contains函数

使用场景:当文本或者属性中的值过长,可以使用它来简化表达式,写法://标签名[contains(@属性名,'')] //标签名[contains(text(),'')] 

注意:写被包含的部分的时候,这部分必须是原始值连续的一段字串,不能是间隔的,有2种方式

1、属性包含匹配

百度页面局举例:

driver.find_element(By.XPATH,"//span[contains(@class,'s-top-right-text')]").click()

2、文本包含匹配

携程页面举例:

driver.find_element(By.XPATH,"//h3[contains(text(),'国内火')]").click()
5、层级关系定位(对前面的补充)
使用场景: 如果通过常规的方法定位到的元素不是唯一的,那么可以考虑先通过他们不同的父级或父级的 父级来定位。(只能通过爸爸找儿子/ 通过祖先找儿子)
层级关系定位有2种:
1. 先去找目标元素的祖先,祖先有一些特殊的特征
2. 先去定位到祖先元素 -> 后代(目标元素)
如下举例说明:
1、先找父级再找对应的元素,//*[ @id = 'father' ]/child
driver.find_element(By.XPATH,"//*[@class='hs_destination-search-box_3jPTN']/input").send_keys("北京")
2、先找父级的父级,再找对应元素,写法://*[ @id = 'ancestor' ]//child
driver.find_element(By.XPATH,"//*[@id='hotelSearchV1']//input[@class='hs_show-hightlight_CWkCV']").send_keys("测试")

6、xpath轴定位

使用场景:如果元素之间有父关系(儿子找爸爸)、兄弟关系(找哥哥/找弟弟)

以上方式都无法定位到元素的情况下,可以考虑轴定位,轴定位的一些关键字:
轴名称释义
ancestor选取当前节点的所有祖先节点(包括父节点)
parent选取当前节点的父节点
preceding选取当前节点之前的所有节点
preceding-sibling
选取当前节点之前的所有兄弟节点 -- 找哥哥
following
选取当前节点之后的所有节点
following-sibling
选取当前节点之后的所有兄弟节点 -- 找弟弟

使用语法:轴名称::标签名,如://a[text()='登录']//parent::td

举例:在这个豆瓣电影页面,定位“选座购票”

可以这样写:

//a[text()='坚如磐石']/parent::li/following-sibling::li[2]/a

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

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

相关文章

CI/CD工具中的CI和CD的含义

CI/CD工具中的CI和CD的含义? CI/CD 是现代软件开发方法中广泛使用的一种方法。其中,CI 代表持续集成(Continuous Integration),CD 则有两层含义,一是持续交付(Continuous Delivery)…

Pyside6 QPushButton

Pyside6 QPushButton QPushButton使用QPushButton继承关系QPushButton的函数(Function)和信号(Signal)QPushButton信号 QPushButton例程界面设计clicked信号测试pressed信号测试released信号测试toggled信号测试按键长按测试按键长按间隔测试完整程序界面程序主程序 按键或命令…

redis学习(二)——redis常见命令及基础数据类型

数据类型 基础数据类型 字符串 String abcMap集合 Hsah {name:“zhangsan”,age:18}列表 List [a, b, c, d]Set集合 Set {a,b,c}有序Set集合 SortSet {a:1,b:2,c:3} 特殊数据类型 GEO 地理坐标 {A:(100.2,35.1)}BitMap 位图,只存储0和1 01101011101HyperLog 基数…

详解CAN通信的标识符掩码和标识符列表两种过滤机制

CAN 通信的应用非常广泛,本文不涉及CAN通信的基础配置,重点分析一下STM32和GD32的CAN通信两种ID过滤方式。 首先,不管是STM32还是GD32,实现CAN通信ID过滤的机制和原理一定是一样的,只是用到的寄存器有差别。 1. ID过…

计算机视觉简介(1)

任何计算机视觉处理流程都始于成像系统,它从景物中捕获反射出来的光线,并将光信号转换成计算机可以读取和处理的图像格式 在计算机成像技术发展的早期,图像通过把胶卷或印刷图像素 化后获得;而现在图 像通常直接由数码相机获取&a…

消息驱动 —— SpringCloud Stream

Stream 简介 Spring Cloud Stream 是用于构建消息驱动的微服务应用程序的框架,提供了多种中间件的合理配置 Spring Cloud Stream 包含以下核心概念: Destination Binders:目标绑定器,目标指的是 Kafka 或者 RabbitMQ&#xff0…

记录一次springboot使用定时任务中@Async没有生效的场景

环境说明 jdk21springboot 3.0.11 springcloud 2022.0.0 spring-cloud-alibaba 2022.0.0.0 在开发一个定时触发的任务的时候,由于开发执行任务的函数比较耗费时间,所以采用异步解决问题。 发现并没有按照预期的触发 经询问后,发现当前类的…

2023年中国隆鼻行业发展历程及趋势分析:隆鼻手术市场将实现进一步增长[图]

隆鼻术就是以各种植入材料置入为主要方法,隆起或抬高鼻部形态为主要目的的鼻整形术式。隆鼻术可能是开展最多的整形美容手术之一。隆鼻术也是一种很成熟的美容手术,操作较为简单、安全、风险较小,也易于接受。 隆鼻行业分类 资料来源&#x…

这道面试题工作中经常碰到,但 99% 的程序员都答不上来

小时候都被问过一个脑筋急转弯,把大象放进冰箱有几个步骤?我们一开始都会抓耳挠腮,去想着该如何把大象塞进冰箱。最终揭晓的答案却根本不关心具体的操作方法,只是提供了 3 个步骤组成的流程,「把冰箱打开,把…

Notepad++提取含有特定字符串的行

ctrl M快捷键,进入"标记" 页面 标记所在行–循环查找-- 正则表达式 – 输入关键字 – 全部标记 – Copy Marked Text 关键字格式如下: .*关键字.*ctrl v,粘贴即可。

深度学习基础知识 nn.Sequential | nn.ModuleList | nn.ModuleDict

深度学习基础知识 nn.Sequential | nn.ModuleList | nn.ModuleDict 1、nn.Sequential 、 nn.ModuleList 、 nn.ModuleDict 类都继承自 Module 类。2、nn.Sequential、nn.ModuleList 和 nn.ModuleDict语法3、Sequential 、ModuleDict、 ModuleList 的区别…

阿里云数据库MongoDB恢复到本地

共两种方式,建议使用第二种的逻辑恢复,比较方便快捷 一、下载物理备份文件 下载的格式是xb的,主要跟实例创建时间有关,2019年03月26日之前创建的实例,物理备份文件格式为tar,后面全部都是xb的格式了&#…

PTE阶段规划

目录 复习的各个阶段 线下应该如何 rs应对 从来都是流利度大于内容 推荐的练习网站 口语 DI 关键词是不能念错 口语 RL rl每日练习方法 ASQ 写作 swt 阅读 一半靠机经 听力 口语和听力 考模版来熟悉 熟悉模版 强调的是,整个的逻辑思维 字字和句句都…

【数据结构】排序

🐇 🔥博客主页: 云曦 📋系列专栏:数据结构 💨吾生也有涯,而知也无涯 💛 感谢大家👍点赞 😋关注📝评论 文章目录 前言一、排序的概念及运用二、常…

基于vue框架的uniapp小程序开发发现了新大陆

项目场景: 在基于vue框架的uniapp小程序开发中,在页面跳转时,当前页路径带参数,在跳转页中接受数据除了用官方推荐的保留当前页面,跳转到应用内的某个页面,使用onLoad(option)接受数据,但是我发…

TensorFlow入门(十四、数据读取机制(1))

TensorFlow的数据读取方式 TensorFlow的数据读取方式共有三种,分别是: ①预加载数据(Preloaded data) 预加载数据的方式,其实就是静态图(Graph)的模式。即将数据直接内嵌到Graph中,再把Graph传入Session中运行。 示例代码如下: import tensorflow.compat.v1 as tf tf.disabl…

CDN,DNS,ADN,SCDN,DCDN,ECDN,PCDN,融合CDN的介绍

一、CDN是什么? CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之…

Windows系统搭建VisualSVN服务结合内网穿透实现公网访问

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统…

Ubuntu右上角不显示网络的图标解决办法

一.line5改为true sudo vim /etc/NetworkManager/NetworkManager.conf 二.重启网卡 sudo service network-manager stop sudo mv /var/lib/NetworkManager/NetworkManager.state /tmp sudo service network-manager start

超高频RFID模具精细化生产管理方案

近二十年来,我国的模具行业经历了快速发展的阶段,然而,模具行业作为一个传统、复杂且竞争激烈的行业,企业往往以订单为导向,每个订单都需要进行新产品的开发,从客户需求分析、结构确定、报价、设计、物料准…