[Python]Selenium-自动化测试
Selenium是一个web自动化测试的工具,在使用之前先在对应的项目添加工具包噢.
本文章主要简单的介绍了selenium对于自动化测试的使用
目录
添加浏览器驱动
get函数来到对应网站
驱动的定位
元素定位
id定位
class name定位
CSS定位
XPath定位
link text定位
定位一组元素
层级定位
操作测试对象
等待
强制等待
显式等待
隐式等待
鼠标点击与键盘的输入
send_keys()
click()
submit()
text
打印信息
浏览器的操作
浏览器最大化
浏览器的宽与高
浏览器的前进与后退
键盘按键
常用按键方法
键盘组合键用法
鼠标事件
alert,conirm,prompt的处理
上传文件的操作
selenium简单使用流程
添加浏览器驱动
from selenium import webdriver #导包browser = webdriver.Edge() #得到浏览器驱动
get函数来到对应网站
browser.get("https://www.baidu.com/index.htm")
驱动的定位
通俗的说,页面通过句柄进行定位,句柄是页面的唯一标识
可以通过
driver.window_handles
来获取所有的句柄,也可以通过下面的方法获取最新页面的句柄
driver.switch_to.window(driver.current_window_handle) #获取当前页面的句柄,并将驱动重新定位到最新的页面
在获取后,通过switch_to.window方法重新定位浏览器驱动,这样才能进行后续的操作.
元素定位
首先要进行导包
from selenium.webdriver.common.by import By
定位元素的方法有很多:
-
- id定位(通常是唯一)
- name定位(允许重复,定位到第一个)
- tag name(标签名,允许重复定位到第一个)
- class name定位()
- CSS定位
- XPath定位
- link text定位
关键是"定位",当然是要定位到一个唯一的地址,当以上的id,name,class name在页面上不是唯一的时候,定位都会失败.
(可以在浏览器的开发者模式F12中,按下ctrl + f.输入要定位的元素的id或classname进行查看是否唯一)

图中显示有72个元素包含有container
id定位
通过元素的id进行定位

browser.find_element(By.ID, "kw")
name,tag name,class name都是与id定位一样的,但都是在唯一的前提下才能进行使用.
class name定位
class我们可以只截取其一部分进行定位,如果一个元素的class为hello world
那么我们可以只把hello或world放上语句进行定位
CSS定位
在F12下,找到对应的元素.右键

选择slector,得到当前元素的CSS
browser.find_element(By.CSS_SELECTOR, "#kw")
XPath定位
与CSS类似的

browser.find_element(By.XPATH, "//*[@id='kw']")
link text定位

像以上的文字链接,就可以使用这种方式(页面唯一时)
browser.find_element(By.LINK_TEXT,"hao123").click()
定位一组元素
使用find_elements
可以找到多个元素,并以集合的形式存储
saveH3 = driver.find_elements(By.CLASS_NAME, "t") # 获取所有的t
for a in saveH3: # 遍历t中的a,获取文本并打印 data = a.find_element(By.TAG_NAME,"a").text print(data)
层级定位
在定位复杂一点的元素时,可以先定位到其父级元素,并再次定位进行寻找
driver.find_element(By.CLASS_NAME, "t").find_element(By.TAG_NAME,"a")
操作测试对象
定位完元素之后当然是要对其进行操作啦.
在webdriver中常用的操作对象有:
- click 点击
- send_keys 在对象上模拟按钮输入
- clear 清楚对象输入的文本
- submit 提交
- text 获取元素的文本内容
等待
在selenium中,等待分为隐式等待,显示等待与强制等待
强制等待
time包中的sleep-单位为秒(s)
time.sleep(5) #页面强制等待5s
显式等待
对特定的元素进行等待
#显式等待,直到元素被加载出来.条件是10s内,每0.5秒进行尝试点击.如果元素加载出来了就停止等待
#超过10s找不到就抛异常
tmp = WebDriverWait(browser,10,0.5).until(EC.presence_of_element_located((By.LINK_TEXT,'我的世界Minecraft中国版官方网站——你想玩的,这里都有')))
tmp.click()
隐式等待
隐式等待(设置一次,全局生效)
会对所有将要被操作元素进行等待
在下一个被操作的元素没有加载出来之前会进行等待,等待的时长为20,单位为秒
driver.implicitly_wait(20)
鼠标点击与键盘的输入
send_keys()
在输入框中输入文本
click()
对元素进行点击
from selenium.webdriver.common.keys import Keys driver.find_element(By.ID, "kw").send_keys("B站")
driver.find_element(By.ID, "kw").send_keys(Keys.ENTER)#对输入框的内容进行键盘上的Enter操作
submit()
提交表单,对type为submit类型的元素.触发表单的提交
text
获取元素的文本信息
driver.find_element(By.TAG_NAME,"a").text
打印信息
页面的title,URL...都可以获取出来
但是驱动的title和URL等属性都是当前驱动所在页面的属性,并不是浏览器上最新页面的属性
例如:
在百度搜索结果页面,点开了一个超链接.新建了页面A
但此时浏览器驱动还是在百度搜索结果页面上,此时直接去搜索页面A的元素是会报错的
而通过driver.title获取页面的标题,得到的也只是百度搜索结果页面的标题,并不是A的标题
浏览器的操作
对页面的控制,
浏览器最大化
driver.maximize_window()
将页面调整至最大化
浏览器的宽与高
driver.set_window_size(#{宽},#{高})
浏览器的前进与后退
driver.forward() # 前进 driver.back # 后退
键盘按键
模拟键盘操作,首先要导入keys包
from selenium.webdriver.common.keys import Keys # 键盘按钮包
通过键盘的输入方法send_keys来进行下面的操作
常用按键方法
send_keys(Keys.TAB) # 按下tab
send_keys(Keys.ENTER) # 按下回车
send_keys(Keys.SPACE) # 按下空格
send_keys(Keys.ESCAPR) # 按下回车键
键盘组合键用法
注意组合键后面的英文字母为小写
send_keys(Keys.CONTROL,'a') # 全选
ctrl + a send_keys(Keys.CONTROL,'c')
send_keys(Keys.CONTROL,'x')
send_keys(Keys.CONTROL,'v')
鼠标事件
鼠标事件也要导入包
from selenium.webdriver.common.action_chains import ActionChains
ActionChains类 (执行链)中的方法有
- context_click(#{element}) # 右键
- double_click(#{element}) # 双击
- drage_and_drop(#{element},#{target}) # 拖动元素至目标 target也是元素
- move_to_element(#{element}) # 指针移动到元素
alert,conirm,prompt的处理
这是关于弹窗的处理,首先来说明一下三个弹窗
- alert,警告类弹窗.只有确认键
- confirm,询问类弹窗,询问是否继续某些操作.有确认与取消键
- prompt,消息类弹窗,含有输入框,可能会要输入内容,有确认与取消键
alter = driver.switch_to.alert # 将驱动定位到当前弹窗:alert/confirm/prompt上
alter.text # 获取当前弹窗的文本
alter.accept() # 按下当前弹窗的确认键
alter.dismiss() # 按下当前弹窗的取消键-如果有的话
alter.send_keys("要输入的内容") # 在弹窗的输入框中输入内容-如果有的话
上传文件的操作
找到type为file的input标签,使用send_keys方法添加本地文件的路径
selenium简单使用流程
driver = webdriver.Edge()
driver.implicitly_wait(30)
driver.get("https://www.baidu.com/index.htm")
driver.maximize_window() # 设置页面最大化
driver.find_element(By.ID, "kw").send_keys("蜡笔小新")
driver.find_element(By.ID, "kw").send_keys(Keys.ENTER)
driver.switch_to.window(driver.current_window_handle)saveH3 = driver.find_elements(By.CLASS_NAME, "t") # 获取所有的t
for a in saveH3: # 遍历t中的a,获取文本并打印data = a.find_element(By.TAG_NAME, "a").textprint(data)alter = driver.switch_to.alert # 将驱动定位到当前弹窗:alert/confirm/prompt上
alter.text # 获取当前弹窗的文本
alter.accept() # 按下当前弹窗的确认键
alter.dismiss() # 按下当前弹窗的取消键-如果有的话
alter.send_keys("要输入的内容") # 在弹窗的输入框中输入内容-如果有的话
相关文章:
[Python]Selenium-自动化测试
Selenium是一个web自动化测试的工具,在使用之前先在对应的项目添加工具包噢. 本文章主要简单的介绍了selenium对于自动化测试的使用 目录 添加浏览器驱动 get函数来到对应网站 驱动的定位 元素定位 id定位 class name定位 CSS定位 XPath定位 link text定位 定位一…...
高效管理文件夹名称:如何批量修改指定多样化的文件夹名称
在文件管理工作中,文件夹名称的管理对于整体的文件管理体系有着至关重要的作用。然而,往往我们会在文件夹名称的管理上遇到一些难题,如:需要修改的文件夹名称多样化,无法一次性满足所有需求。为了解决这个问题…...
c 读取音频协议WAV文件头(再生成wav文件)
查找wav文件头关键struct 位置,当然也可查找avi文件头。用这个方法找到avi文件data位置后,可直接读出文件的每一帧图片。当然avi数据的标志位不是data,可以是00dc等。 WAV音频头文件有三个关键struct:RIFF, fmt,data。 AVI 视频文件头的关键…...
Prompt设计与大语言模型微调
本文主要介绍了Prompt设计、大语言模型SFT和LLM在手机天猫AI导购助理项目应用。 ChatGPT基本原理 “会说话的AI”,“智能体” 简单概括成以下几个步骤: 预处理文本:ChatGPT的输入文本需要进行预处理。输入编码:ChatGPT将经过预处理…...
修复VS2015没有代码提示的问题【已解决】
问题描述 在Visual Studio 中编写代码时,发现使用库函数的时候,在类对象后输入点后,并没有出现类对应的成员信息的提示。 解决过程 1)方法1: 百度“vs 没有代码提示”,搜索解决方案。 方案1࿱…...
DeepSpeed: 大模型训练框架 | 京东云技术团队
背景: 目前,大模型的发展已经非常火热,关于大模型的训练、微调也是各个公司重点关注方向。但是大模型训练的痛点是模型参数过大,动辄上百亿,如果单靠单个GPU来完成训练基本不可能。所以需要多卡或者分布式训练来完成这…...
暄桐推荐|学书法的必读书目
在暄桐教室,写字之外,读书、静坐也是桐学们修习的功课。今天,便向你推荐,关于学习书法,暄桐教室的那些必读书目: 暄桐推荐学书法必读书之初阶书目: 对零基础的小白同学或刚入门…...
2023年赋能更多的人
最近接触到一些新人,是真正的网络新人,慢慢理解了新人的困惑。 对于新人,每天获取的信息五花八门,这是好的也是极其不好的。因为他们不知道如何筛选,到底适不适合自己去做。 我一直在劝大家去做一些内容创造性的事情…...
量子计算与量子密码(入门级)
量子计算与量子密码 写在最前面一些可能带来的有趣的知识和潜在的收获 1、Introduction导言四个特性不确定性(自由意志论)Indeterminism不确定性Uncertainty叠加原理(线性)superposition (linearity)纠缠entanglement 虚数的常见基本运算欧拉公式&#x…...
将安全作为首要目标 — Venus 的现状和前景展望
DeFi 的全面爆发将上一轮牛市推向巅峰。在不断的演化中,DeFi 领域也产生了很多新兴的细分领域,比如收益聚合器、合成资产、各种 DeFi 收益工具,以及最近整个市场都在讨论的 RWA 等。 DeFi 在不断进化,不变的是,DEX 和借…...
『第七章』翩翩起舞的雨燕:顺序与并发执行
在本篇博文中,您将学到如下内容: 1. 顺序执行2. 主线程 Main Thread 的秘密3. 并发执行:GCD 与分发队列(DispatchQueue)4. 延时执行5. 数据竞争(Data Race)6. 线程间的同步7. 避免线程爆炸8. RunLoop 与定时器总结楚客自相送,沾裳春水边。 晚来风信好,并发上江船。 花映…...
c语言进制的转换10进制转换16进制
c语言进制的转换10进制转换16进制 c语言的进制的转换 c语言进制的转换10进制转换16进制一、16进制的介绍二、10进制转换16进制的方法 一、16进制的介绍 十六进制: 十六进制逢十六进一,所有的数组是0到9和A到F组成,其中A代表10,B代…...
js中的Formdata数据结构
这里写目录标题 一、基本概念二、常用方法1.append(name, value)、set(name, value)2.get()、getAll()3.has(name)4.delete(name)5.keys(),values(),entries() 三、其他细节1.for of遍历2.转为对象3.结合 URLSearchParams 转为queryString 一、基本概念 FormData 提供了一种表…...
Spring MVC 执行流程
前言 Spring MVC 是一个非常强大的框架,它能够帮助开发人员快速构建高效的 Web 应用程序。然而,要理解 Spring MVC 的执行流程并不容易,因为它涉及到多个组件和模块。在本文中,我们将介绍 Spring MVC 的执行流程,帮助…...
JAVA毕业设计104—基于Java+Springboot+Vue的医院预约挂号小程序(源码+数据库)
基于JavaSpringbootVue的医院预约挂号小程序(源码数据库)104 一、系统介绍 本系统前后端分离带小程序 小程序(用户端),后台管理系统(管理员,医生) 小程序: 预约挂号,就诊充值&…...
一文了解独立站黑科技:clock斗篷技术
FP产品作为高利润高回报的产品,它热度在出海商品中是一直居高不下的。但这类产品在独立站的运营中往往会遇到很多问题,例如最让商家头疼的投流问题,FP产品的推广营销很容易遭到平台的管控封禁,这时候往往会用到市面上现在很火的黑…...
Java IDEA controller导出CSV,excel
Java IDEA controller导出CSV,excel 导出excel/csv,亲测可共用一个方法,代码逻辑里判断设置不同的表头及contentType;导出excel导出csv 优化:有数据时才可以导出参考 导出excel/csv,亲测可共用一个方法&…...
FFmpeg编译安装(windows环境)以及在vs2022中调用
文章目录 下载源码环境准备下载msys换源下载依赖源码位置 开始编译编译x264编译ffmpeg 在VS2022写cpp调用ffmpeg 下载源码 直接在官网下载压缩包 这个应该是目前(2023/10/24)最新的一个版本。下载之后是这个样子: 我打算添加外部依赖x264&a…...
gRPC之gateway集成swagger
1、gateway集成swagger 1、为了简化实战过程,gRPC-Gateway暴露的服务并未使用https,而是http,但是swagger-ui提供的调用服 务却是https的,因此要在proto文件中指定swagger以http调用服务,指定的时候会用到文件 prot…...
Pytorch从零开始实战07
Pytorch从零开始实战——咖啡豆识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——咖啡豆识别环境准备数据集模型选择训练模型可视化模型预测其他问题总结 环境准备 本文基于Jupyter notebook,使用Python3.8,Pytor…...
【HarmonyOS 6.1 全场景实战】《灵犀厨房》之【营养分析引擎】计算个性化卡路里建议:给《灵犀厨房》装上“营养大脑”
【营养分析引擎】计算个性化卡路里建议:给《灵犀厨房》装上“营养大脑” 摘要:从“爱吃什么”到“该吃什么”,是《灵犀厨房》进化的关键一步。上一篇我们刚打通了 Health Kit 数据,今天,我们就要基于 Mifflin-St Jeor …...
Go语言实现Hermes引擎:高性能JavaScript字节码虚拟机解析与实践
1. 项目概述:一个Go语言实现的Hermes引擎最近在折腾一些需要高性能模板渲染的后端服务,偶然间在GitHub上发现了LAI-755/hermes-go这个项目。简单来说,这是一个用纯Go语言实现的Hermes引擎。如果你对前端生态熟悉,可能听说过Hermes…...
Ash印相渲染失败率骤升47%?紧急预警:V6.2更新后Gamma 2.2→2.4迁移引发的印相断层危机
更多请点击: https://intelliparadigm.com 第一章:Ash印相渲染失败率骤升47%的全局现象与危机定性 近期,全球多个采用 Ash 印相引擎(v3.8.2)的影像处理平台集中报告渲染任务异常终止、输出空白或超时中断。监控数据显…...
ARM处理器仿真技术:Cortex-R52与Neoverse实战解析
1. ARM处理器仿真技术概述在现代芯片设计和软件开发流程中,处理器仿真模型已成为不可或缺的关键工具。作为Arm生态系统的重要组成部分,Iris仿真组件提供了对Cortex-R52和Neoverse系列处理器的精确模拟能力。这些模型不仅能够模拟指令执行流程,…...
DeepLake:AI原生数据湖统一管理多模态数据与向量嵌入
1. 项目概述:当数据湖遇上AI向量化如果你正在构建一个AI应用,无论是RAG检索增强生成系统、多模态模型训练,还是复杂的语义搜索,数据管理环节的复杂性往往会让你头疼不已。传统的文件系统、数据库,甚至是对象存储&#…...
韩国市场合规语音交付迫在眉睫!ElevenLabs韩文生成必须配置的4项GDPR+KCC隐私开关
更多请点击: https://intelliparadigm.com 第一章:韩国市场语音AI合规落地的紧迫性与战略意义 韩国《个人信息保护法》(PIPA)于2023年修订后,明确将语音生物特征数据列为“敏感信息”,要求语音AI系统在采集…...
私有化部署智能助手:基于开源项目smarty-gpt的本地化AI对话平台搭建指南
1. 项目概述:当智能助手遇上本地化部署最近在折腾一个挺有意思的开源项目,叫citiususc/smarty-gpt。乍一看名字,你可能觉得这又是一个基于GPT的聊天机器人,没什么新意。但如果你深入了解一下,就会发现它的定位非常独特…...
MCP2221+Blinka+Jupyter:桌面Python直连I2C传感器实时可视化
1. 项目概述:当桌面电脑“学会”与传感器对话作为一名在嵌入式开发和数据可视化领域摸爬滚打了十多年的老手,我见过太多为了读取一个温度传感器的数据,而不得不先折腾Arduino固件、再折腾串口通信、最后还要自己写个上位机软件的复杂流程。整…...
别再拍脑袋定样本量了!用Excel 5分钟搞定市场调研的样本容量计算(附置信区间模板)
别再拍脑袋定样本量了!用Excel 5分钟搞定市场调研的样本容量计算(附置信区间模板) 在快节奏的商业决策中,市场调研的可靠性往往取决于一个关键数字——样本量。产品经理小张最近就踩了坑:耗时两周完成的500份用户问卷&…...
AI工作效率入门:普通人必须了解的10个AI工具
AI工作效率入门:普通人必须了解的10个AI工具你不需要是程序员,也不需要懂技术,只需要会用这10个工具,你的工作效率就能翻倍。为什么普通人也需要学AI工具? 根据麦肯锡2024年的调研报告,使用AI辅助工作的员工…...
