Selenium 自动化测试学习总结
大概了解一下即可,现在主要用的自动化工具是 playWright,它可以录制操作。
selenium是老款自动化测试工具,仍有很多可取之处。
安装:
pip install selenium即可。然后下载浏览器的驱动包,注意不是浏览器!
然后解压驱动包,将里面的exe程序放入python下载的位置。就不用添加环境变量了,因为python这个位置一般都已经添加了环境变量。
使用驱动打开浏览器的方式:wd = webdriver.Chrome() //最简洁方式,已经添加到环境变量中了。 wd = webdriver.Edge(service=Service(r'D:\work_soft\python\msedgedriver.exe')) //未添加到环境变量,需要指定路径。
对比playWright,selenium需要下载对应驱动包。而playwright一个命令即可完成。且操作命令也有些不同,但css选择器是一样的,html文档的节点也是一样的。
选择元素的方法:
根据 id属性 选择元素:# 根据id选择元素,返回的就是该元素对应的WebElement对象 element = wd.find_element(By.ID, 'kw')
通过element.send_keys(‘信息’)方法操作元素。//输入文本信息
根据 class属性:wd.find_elements(By.CLASS_NAME, 'animal') 注意这里find_elements多一个s,表示返回多个元素。通过for element in elements: print(element.text) 打印文本信息。
tag名 选择元素:elements = wd.find_elements(By.TAG_NAME, 'div') 用法同上。
find_element与find_elements返回的数量不一样。
通过WebElement对象选择元素:实质就是嵌套。第一个元素对象还可以使用find_element的方法。
等待界面元素出现:# 等待 1 秒 from time import sleep sleep(1) 。注意palyWright的等待界面元素出现的方法不能用sleep。
操控元素的方法:
点击元素:调用webElement对象的click方法。
输入元素信息:send_keys方法。
wd.find_elements(By.CLASS_NAME,'result-item').send_keys("文本信息")
获取元素信息:print(element.text)
获取输入框的文字:element.get_attribute('value')
获取元素的属性值:element.get_attribute('class')
CSS表达式:
通过 CSS selector 语法选择元素。
选择单个元素:find_element(By.css_SELECTOR,CSS Selector参数)
根据 tag名、id、class 选择元素:例如:element = wd.find_element(By.CSS_SELECTOR, '#searchtext')
选择 子元素 和 后代元素:如果 元素2 是 元素1 的 直接子元素, CSS Selector 选择子元素的语法是这样的:元素1>元素2
根据属性选择:css 选择器支持通过任何属性来选择元素,语法是用一个方括号 [] 。<a href="http://www.miitbeian.gov.cn">苏ICP备88885574号</a>
比如要选择上面的a元素,就可以使用 [href="http://www.miitbeian.gov.cn"] 。这个表达式的意思是,选择 属性href值为 http://www.miitbeian.gov.cn 的元素。
当然,前面可以加上标签名的限制,比如 div[class='SKnet'] 表示 选择所有 标签名为div,且class属性值为SKnet的元素。
# 根据属性选择元素
element = wd.find_element(By.CSS_SELECTOR, 'div[class="daad"]')
如果一个元素具有多个属性
<div class="misc" ctype="gun">沙漠之鹰</div>
CSS 选择器 可以指定 选择的元素要 同时具有多个属性的限制,像这样 div[class=misc][ctype=gun]
frame切换/窗口切换:
# 切换回 最外部的 HTML 中 wd.switch_to.default_content()
# 然后再 选择操作 外部的 HTML 中 的元素 wd.find_element_by_id('outerbutton').click()
选择框:
<div id="s_radio"><input type="radio" name="teacher" value="小江老师">小江老师<br><input type="radio" name="teacher" value="小雷老师">小雷老师<br><input type="radio" name="teacher" value="小凯老师" checked="checked">小凯老师
</div>
上述是单选按钮,# 获取当前选中的元素
element = wd.find_element(By.CSS_SELECTOR, '#s_radio input[name="teacher"]:checked') print('当前选中的是: ' + element.get_attribute('value'))
其中 #s_radio input[name="teacher"]:checked 里面的 :checked 是CSS伪类选择
checkbox框:它的用法同单选框。都是由input标签得到。
select框:对于Select 选择框, Selenium 专门提供了一个 Select类 进行操作。即select_by_value方法。复选框,存在次序,即select_by_index(次序),从0开始。
# 导入Select类
from selenium.webdriver.support.ui import Select# 创建Select对象
select = Select(wd.find_element(By.ID, "ss_single"))# 通过 Select 对象选中小雷老师
select.select_by_visible_text("小雷老师")# 清除所有 已经选中 的选项
select.deselect_all()
实战技巧:
手机模式:
from selenium import webdrivermobile_emulation = { "deviceName": "Nexus 5" }edge_options = webdriver.EdgeOptions()
edge_options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Edge(options=edge_options)driver.get('http://www.baidu.com')input()
driver.quit()
Xpath选择器:
前面都是CSS 选择器的方式,例如,input[ name =' ']这样表示参数。
此外也需要学习Xpath,它还有其他领域会使用到,比如 爬虫框架 Scrapy, 手机App框架 Appium。
xpath表达式 /html/body/div ,就是一个绝对路径的xpath表达式, 等价于 css表达式 html>body>div
根据属性选择:根据属性来选择元素 是通过 这种格式来的 [@属性名='属性值']
选择所有 select 元素中 class为 single_choice 的元素,可以这样 //select[@class='single_choice']
选择 id 为 west 的元素,可以这样 //*[@id='west']
如果一个元素class 有多个,比如
<p id="beijing" class='capital huge-city'>北京
</p>
如果要选 它, 对应的 xpath 就应该是 //p[@class="capital huge-city"]不能只写一个属性,像这样 //p[@class="capital"] 则不行。
要在某个元素内部使用xpath选择元素, 需要 在xpath表达式最前面加个点
相关文章:
Selenium 自动化测试学习总结
大概了解一下即可,现在主要用的自动化工具是 playWright,它可以录制操作。 selenium是老款自动化测试工具,仍有很多可取之处。 安装: pip install selenium即可。然后下载浏览器的驱动包,注意不是浏览器!…...
【HTML5】01-HTML摆放内容
本文介绍HTML5摆放标签的知识点。 目录 1. HTML概念 2. HTML骨架 3. 标签的关系 4. 标题标签 5. 段落标签 6. 换行和水平线 7. 文本格式化标签 8. 图像标签 图像 - 属性 9. 路径 相对路径 绝对路径 10. 超链接标签 11. 音频标签 12. 视频标签 1. HTML概念 HTM…...
内存管理:
我们今天来学习一下内存管理: 1. 内存分布: 我们先来看一下我们下面的图片: 这个就是我们的内存,我们的内存分为栈区,堆区,静态区,常量区; 我们的函数栈帧开辟消耗的内存就是我们…...
设计模式使用Java案例
代码设计要有可维护性,可复用性,可扩展性,灵活性,所有要使用设计模式进行灵活设计代码 创建型 简单工厂模式(Simple Factory) 简单工厂模式(Simple Factory Pattern)是一种创建型…...
Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实战指南
Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实战指南 一、核心概念对比 1. 本质区别 维度过滤器(Filter)拦截器(Interceptor)规范层级Serv…...
模运算的艺术:从基础到高阶的算法竞赛应用
在算法竞赛中,模运算(取模运算)是一个非常重要的概念,尤其在处理大数、防止溢出、以及解决与周期性相关的问题时。C 中的模运算使用 % 运算符,但它的行为和使用场景需要特别注意。 1. 模运算的基本概念 模运算是指求一…...
Java 并发编程——Java BIO NIO Socket编程
参考Java 并发编程——Java BIO NIO Socket编程 BIO:阻塞式编程模型 Socket 服务端编程Socket 客户端编程 NIO:非阻塞式编程模型 NIO 介绍Java 中 NIO 非阻塞式与前面 BIO 阻塞式的区别Java NIO类库包含以下三个核心组件ServerSocketChannel 服务端编程…...
ST电机库电流采样 三电阻单ADC
一、概述 下图是三电阻采样的电路结构 其中流过三相系统的电流I1、I2、I3遵循以下关系: 因此,为了重建流过普通三相负载的电流,在我们可以用以上公式计算的情况下,只需要对三相中的两相进行采样即可。 STM32的ADC可以很灵活的配置成同步采集两路ADC数据,…...
【网络】什么是 IHL(Internet Header Length,首部长度)TTL(Time To Live,生存时间)?
在 IPv4 数据报文中,IHL(Internet Header Length,首部长度)、TTL(Time To Live,生存时间) 和 TIL 涉及到 IP 数据包的结构和生命周期。以下是对它们的详细解释: 📌 1. IH…...
现代密码学 | 具有保密和认证功能的安全方案
1.案例背景 1.1 2023年6月,微软云电子邮件泄露 事件描述: 2023年6月,属于多家美国政府机构的微软云电子邮件账户遭到非法入侵,其中包括了多位高级政府官员的电子邮件。据报道,美国国务院的10个邮件账户中共有6万封电…...
一款基于Python的从常规文档里提取图片的简单工具开发方案
一款基于Python的从常规文档里提取图片的简单工具开发方案 1. 环境准备 安装必需库 pip install python-docx PyMuPDF openpyxl beautifulsoup4 pillow pip install pdfplumber # PDF解析备用方案 pip install tk # Python自带,无需安装工具选择 开发环…...
JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3+ 2025 版免费体验方案
JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3 2025 版免费体验方案 前言 JetBrains IDE 是许多开发者的主力工具,但从 2024.02 版本起,JetBrains 调整了试用政策,新用户不再享有默认的 30 天免费试用…...
Pytorch实现之BCGAN实现双生成器架构的人脸面部生成
简介 简介:通过双生成器架构与重建损失进行循环的生成训练,实现人脸面部表情合成。 论文题目:BCGAN: Facial Expression Synthesis by Bottleneck-Layered Conditional Generative Adversarial Networks (基于瓶颈分层条件生成对抗网络的面部表情合成) 会议:2021 15th…...
智慧加油站小程序数据库设计文档
智慧加油站系统 - 数据库与API设计文档 1. 数据库设计 1.1 ER模型 系统的核心实体关系如下: 用户(User) ---< 订单(Order) ---< 加油记录(RefuelRecord)| | || | vv v …...
Docker生存手册:安装到服务一本通
文章目录 一. Docker 容器介绍1.1 什么是Docker容器?1.2 为什么需要Docker容器?1.3 Docker架构1.4 Docker 相关概念1.5 Docker特点 二. Docker 安装2.1 查看Linux内核版本2.2 卸载老版本docker,避免产生影响2.3 升级yum 和配置源2.4 安装Dock…...
Linux内核传输层UDP源码分析
一、用户数据包协议(UDP) 1.UDP数据报头 UDP 提供面向消息的不可靠传输,但没有拥塞控制功能。很多协议都使用 UDP,如用于 IP 网络传输音频和视频的实时传输协议 (Real-time Transport Protocol,RTP),此类型…...
FPGA学习(二)——实现LED流水灯
FPGA学习(二)——实现LED流水灯 目录 FPGA学习(二)——实现LED流水灯一、DE2-115时钟源二、控制6个LED灯实现流水灯1、核心逻辑2、代码实现3、引脚配置4、实现效果 三、模块化代码1、分频模块2、复位暂停模块3、顶层模块 四、总结 一、DE2-115时钟源 DE2-115板子包含一个50MHz…...
E1-最远距离(stl使用)
题目描述 给定一个数组,请你找出数组中相同元素之间的最远距离。若数组中不存在相同元素,则输出 null。 输入描述 输入一个数组,数组长度不超过 10000。格式请见用例。 输出描述 输出数组中相同元素的最远距离。 用例 输入 [3, 2, 3,…...
Linux如何在设备树中表示和引用设备信息
DTS基本知识 dts 硬件的相应信息都会写在.dts为后缀的文件中,每一款硬件可以单独写一份xxxx.dts,一般在Linux源码中存在大量的dts文件,对于arm架构可以在arch/arm/boot/dts找到相应的dts,一个dts文件对应一个ARM的machie。 dtsi 值…...
Matlab 汽车振动多自由度非线性悬挂系统和参数研究
1、内容简介 略 Matlab 169-汽车振动多自由度非线性悬挂系统和参数研究 可以交流、咨询、答疑 2、内容说明 略 第二章 汽车模型建立 2.1 汽车悬架系统概述 2.1.1 悬架系统的结构和功能 2.1.2 悬架分类 2.2 四分之一车辆模型 对于车辆动力学,一般都是研究其悬…...
Maven核心包:maven-resolver-api
在阅读 nexus-pubic 开源项目过程中,使用了大量的核心组件进行轻量化集成。它的这种构建方式,在阅读过程中不得不感概,节省成本从构建项目的方式上就遥遥领先了。但是 maven核心包,依然使用前几年的aether-spi,却没有更…...
生活中的可靠性小案例11:窗户把手断裂
窗户把手又断了,之前也断过一次,使用次数并没有特别多。上方的图是正常的把手状态,断的形状如下方图所示。 这种悬臂梁结构,没有一个良好的圆角过渡,导致应力集中。窗户的开关,对应的是把手的推拉ÿ…...
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
074_ai辅助编程_水果程序_fruits_加法 回忆上次内容 上次直接从模块中导入变量、函数 from my_file import pi 导入my_file.pi 并作为 pi 使用 from my_file import pi as my_pi 导入变量 并 重命名 添加图片注释,不超过 140 字(可选) …...
【图论】并查集的学习和使用
目录 并查集是什么? 举个例子 组成 父亲数组: find函数: union函数: 代码实现: fa[] 初始化code: find code: 递归实现: 非递归实现: union code : 画图模拟: 路径压缩:…...
欢乐力扣:反转链表
文章目录 1、题目描述2、思路 1、题目描述 反转链表。 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 2、思路 借助cur指针和pre双指针来调整链表的前后指向。 # Definition for singly-linked list. # class ListNode: # def __i…...
1.8PageTable
页表的作用 虚拟地址空间映射:页表记录了进程的虚拟页号到物理页号的映射关系。每个进程都有自己的页表,操作系统为每个进程维护一个独立的页表。内存管理:页表用于实现虚拟内存管理,支持进程的虚拟地址空间和物理地址空间之间的…...
什么是大带宽服务器
什么是大带宽服务器? 在深入探讨大带宽之前,让我们先明确带宽的概念。带宽与我们日常所说的宽带有所不同,宽带是运营商为满足家庭或商业上网需求所提供的服务,而带宽则特指数据的传输速度,尤其是上行速度。大带宽服务…...
【TCP】三次挥手,四次挥手详解--UDP和TCP协议详解
活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!…...
Compose 实践与探索十二 —— 附带效应
1、SideEffect Google 官方文档对 side effect 有两种翻译,简体中文翻译为附带效应,繁体中文翻译为副作用。这两个翻译我们用哪个都行,关键是如何理解它的含义。 1.1 什么是副作用 我们在日常生活中听到的副作用大多是医学领域中的&#x…...
Kubernetes 控制平面详解 —— 探秘 API Server、Controller Manager、Scheduler 与 etcd
文章目录 Kubernetes 控制平面详解 —— 探秘 API Server、Controller Manager、Scheduler 与 etcd控制平面概述API Server角色与职责工作原理 etcd角色与职责工作原理 Scheduler角色与职责工作原理 Controller Manager角色与职责工作原理 总结 Kubernetes 控制平面详解 —— 探…...
