web自动化上传文件

1,web 自动化文件上传不要太简单

熟悉 web 自动化测试的大佬应该都懂,当采用 js 调用原生控件进行文件上传的时候,最常用的是使用 pywin32 等系统交互库。

image.png

当看到 pywin32 那丑陋的 api 封装只能爆粗口。就为了输入一个文件地址,需要整这么多莫名其妙的代码(看不懂没关系,只需要看代码行数就够了):

image.png

我们来看看使用 pyautogui 多么简单:

#输入文件名 
pyautogui.write(r'd:\demo.txt')# 回车 
pyautogui.press('enter', presses=2) 

2, 跨平台的使用和安装

上面的代码在 mac ,linux 和 windows 上是通用的,只是在 mac 和 linux 下需要安装额外的依赖。

windows 安装不需要其他依赖,直接使用了 python 自带的 ctypes 模块:

pip install pyautogui 

mac 安装需要 PyObjC 模块:

pip3 install pyobjc-core 
pip3 install pyobjc 
pip3 install pyautogui 

linux 需要依赖 python3-Xlib 或者 python-xlib(python2):

pip3 install python3-xlib 
pip3 install pyautogui 

linux 如果没有安装相关 python 库可能会报错。 Debian 系发行版(其他发行版自行了解)你可能需要输入:

sudo apt-get install scrot 
sudo apt-get install python3-tk 
sudo apt-get install python3-dev 

3,基于坐标和图像的设计哲学

pyautogui 并不需要去解析各平台的控件结构,他的元素定位都是基于坐标的。所以不论你是通过手工截图测量,还是通过自动化工具获取,只要你能拿到坐标,你就能进行元素操作。

一,鼠标操作

1,获取坐标

import pyautogui as ui 
# 获取屏幕大小 
size = ui.size() 
# 获取现在鼠标位置 
p = ui.position() 
# 坐标是否超出屏幕范围 
if_on = ui.onScreen(*p) 

2, 鼠标移动

ui.moveTo(x/2, y/2, duration=2, tween=easeInCirc) 

参数说明:

  • x, y 坐标
  • duration 持续秒数,默认是瞬间完成
  • tween 特效,一般没什么用。

3, 鼠标拖拽, 移动到指定的坐标

ui.dragTo(500, 500) 

4, 百发百中的射箭游戏

import random
import time 
import pyautogui as ui 
x, y = ui.position() 
target = (800, 800) 
for i in range(10):rand_x = random.randint(0, x) rand_y = random.randint(0, y) # 随机生成位置 print(rand_x, rand_y) ui.moveTo(rand_x, rand_y) # 移动到目标位置 ui.dragTo(target, duration=0.2) time.sleep(1) 

效果:

image.png

5, 相对移动

ui.move(-500, duration=1) 
ui.move(yOffset=-400, duration=1) 
ui.move(500, duration=1) 
ui.move(yOffset=400, duration=1) 

相对移动的小游戏:

start = 20 
add_point = 10 
duration = 0.5 
for i in range(10): if i % 2 == 0: ui.drag(start, duration=duration) ui.drag(yOffset=start, duration=duration) else: ui.drag(-start, duration=duration) ui.drag(yOffset=-start, duration=duration) start += add_point

效果:

image.png

6,点击

ui.click(x=None,y=None,clicks=1, # 点击次数 interval=0.0, # 间隔时间 button='right', # 右键 duration=0.0) # 持续时间

通过 click 进一步封装了 leftClick, rightClick, middleClick, doubleClick, tripleClick

7, scroll

窗口滚动,但是封装的滚动感觉比较鸡肋,他是以鼠标点击次数为单位的,所以不知道会滚动到什么位置。

pyautogui.scroll(10) # 向上滚动 10 个 clicks 
>>> pyautogui.scroll(-10) # # 向下滚动 10 个 clicks>>> pyautogui.scroll(10, x=100, y=100) # 移动到位置再滚动

使用 drag 和 dragTo 会更加方便一点,还是以坐标为依据,通过操作鼠标中键来实现窗口滚动,比如这个例子是 scroll 和 drag 的对比:

x, y = ui.size() 
ui.scroll(-100) 
time.sleep(1)ui.scroll(100)time.sleep(1) 
ui.dragTo(y=y, button='middle') # 滚动到窗口底部

效果:

image.png

二,键盘操作

1, 输入框输入

# 输入yuz, 每个字母时间间隔 0.2 s
​​​​​​​pyautogui.write("yuz",interval=0.2)

注意:pyautogui 并不支持输入框自动聚焦,所有输入之前先要点击输入框位置。

2,按下键盘 press

press('enter', presses=1, interval=0.0) 

相当于鼠标操作的 click, 可以输入键盘上的按键, 比如 shift 键,enter 键。所有的按键可以查看源码当中的 KEYBOARD_KEYS 或者 KEY_NAMES。

参数:

  • presses, 操作按键次数
  • interval, 每次按键的间隔时间

所有按键列表:

image.png

3, 热键 hotkey

ui.hotkey('ctrl', 'shift', 'esc') 

4, keyUp, keyDown

这是 press 的分解动作,相当于鼠标的 mouseUp 和 mouseDown。上面热键的操作方式可以分解成:

ui.keyDown('ctrl') # 按下 ctrl 
ui.keyDown('shift') # 按下 shift 
ui.keyDown('esc') # 按下 esc 
ui.keyUp('esc') # 释放 ctrl 
ui.keyUp('shift') # 释放 shift 
ui.keyUp('ctrl') # 释放 esc 
三,图像识别

坐标定位这种方式为通用性打下了基础,让 pyautogui 可以轻松做到跨平台。但是实际操作过程中很难清除的知道某个要操作的控件的确切位置,因为每次打开相同的页面都有可能是变动的。pyautogui 给出的解决方案非常简单粗暴,使用图像识别,返回在屏幕中的坐标位置,在通过坐标进行处理。

1,locateCenterOnScreen

返回被识别图像的中心坐标。参数说明:

  • 必传参数,图片路径;
  • confidence, 识别精度,需要安装 opencv 才能使用;
  • grayscale, 灰度级别,能够提升识别速度。
locateCenterOnScreen('img/seven.png', confidence=0.7, grayscale=True) 

现阶段图像识别的结果并不理想,基于图像识别的使用还存在以下问题:

  • 识别不到指定元素;

  • 识别精度不够;

  • 查找速度比较慢

  • 需要用到重型的 opencv 库, 或许可以尝试换用其他库。

  • 需要提前准备被识别的图片,如果操作元素多,手动处理素材会怀疑人生。

    所以 uiautogui 适合的场景是跨平台的少量原生控件交互,如果要对原生应用控件大量操作,还是换用其他工具比较合适。

    基于图像识别的具体例子:

import time import pyautogui as ui 
time.sleep(3) 
seven = ui.locateCenterOnScreen('img/seven.png', confidence=0.7, grayscale=True) 
mult = ui.locateCenterOnScreen('img/multipy.png', confidence=0.7, grayscale=True) 
two = ui.locateCenterOnScreen('img/two.png', confidence=0.7, grayscale=True) 
equal = ui.locateCenterOnScreen('img/equal.png', confidence=0.7, grayscale=True) 
ui.click(*seven) 
ui.click(*mult)ui.click(*two) 
​​​​​​​ui.click(*equal) 

效果:

image.png

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

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

相关文章

MySQL HeatWave Lakehouse

在今年的Oracle Cloud World,Oracle宣布将发布一款数据库湖仓产品——MySQL HeatWave Lakehouse用以解决存储在数据库之外的文件数据等非结构化数据的查询和处理。 MySQL HeatWave是一个完全管理的数据库服务,将事务处理、分析处理和机器学习服务合并到一个MySQL数据库的云服务…

Linux中账号和权限管理

目录 一.用户账号和组账号: 1.用户账号类型: 2.组账号类型: 3.系统区别用户的方法 : 4.用户账号文件: 二.Linux中账户相关命令: 1.useradd: 2.passwd: 3.usermod&#xff1a…

Python爬取今日头条热门文章

前言 今日头条文章收益是没有任何门槛,只要是你发布文章,每篇文章的阅读量超过1000就能有收益,阅读量越多收益越高。于是乎我就有了个大胆的想法。何不利用Python爬虫,爬取热门文章,然后完成自动化发布文章呢&#xf…

24年软件测试的晋升之路与能力要求,“我“该何去何从?

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、软件测试人员的…

1.DQL查询数据(超重点)以及distinct(去重)

DQL(Data Query Language:数据查询语言) 1.所有查询操作都用 SELECT 2.无论是简单的查询还是复杂的查询它都能做 3.数据库中最核心的语言,最重要的语句 4.使用频率最高的语句 语法: SELECT 字段1,字段2,……FROM 表 有时候…

CISP培训强化研发团队,确保金融科技发展安全无忧

​某金融科技公司是行业领先的平台服务商,凭借其在区块链、物联网、云计算、大数据和人工智能等尖端技术的卓越研发实力,致力于将前沿技术融入金融业务模式和应用场景。公司不断努力为客户提供一个“科技金融行业客户”的综合服务平台,从而实…

引领创业新风潮,花为缘享奢二手奢侈品买卖如何突出重围脱颖而出

数据显示,中国消费者的奢侈品消费金额占全球的份额从2000年的1%左右提升到2017年的33%。奢侈品消费的主战场仍是品牌发源地的欧洲和美国,中国消费者奢侈品消费规模全球第一。奢侈品逆势增长与持续涨价这件事,无疑预示着二级奢侈品转售市场将迎…

大数据引爆点:数据可视化的飞速发展

在信息时代,数据如潮水般涌入,企业和个人面临的挑战前所未有。而在这个数据的浩瀚海洋中,数据可视化如一道明亮的灯塔,引领着信息时代的航行者。近几年,数据可视化以其直观、生动的特性,迅速成为了信息表达…

2024年U.S.News全美最佳大学排名公布(附top100榜单)

9月18日,《美国新闻与世界报道》正式发布了最新的2024全美最佳综合大学排名。知识人网小编整理并附上top100的学校榜单,以供访问学者、博士后及联合培养博士们参考。 2024 US News 排名机制调整 U.S. News的排名综合考虑了包括录取率、师生比例、学生标…

嵌入式SOC之通用图像处理之OSD文字信息叠加的相关实践记录

机缘巧合 机缘巧合下, 在爱芯元智的xx开发板下进行sdk的开发.由于开发板目前我拿到是当前最新的一版(估计是样品),暂不公开开发板具体型号信息.以下简称板子 .很多优秀的芯片厂商,都会提供与开发板配套的完善的软件以及完善的技术支持(FAE),突然觉得爱芯…

win10安装ffmpeg

1 ffmpeg官网下载 官网地址:https://ffmpeg.org/ ffmpeg可执行程序下载地址:https://www.gyan.dev/ffmpeg/builds/ ffmpeg官网文档:https://ffmpeg.org/documentation.html 选择对应的版本点解下载可执行程序包,比如6.1版本的…

Linux操作系统(文件系统管理fdisk)

操作系统的两种启动模式Legacy BIOS 和 UEFI Legacy BIOS(Basic Input/Output System,基本输入/输出系统) 在开机时需要自检,启动过程较复杂。且传统的BIOS无法识别GPT(GUID Partition Table)分区表,只能识…

Windows上ModbusTCP模拟Master与Slave工具的使用

场景 Modbus Slave 与 Modbus Poll主从设备模拟软件与Configure Virtual Serial串口模拟软件使用: Modebus Slave 与 Modbus Poll主从设备模拟软件与Configure Virtual Serial串口模拟软件使用_modbus poll激活-CSDN博客 数据对接协议为Modbus TCP,本地开发需要使…

2023教程发布最后一个教程 | R语言绘图汇总

2023年总结 2023年即将结束,我们即将迎来2024年。2023年,我们做了什么呢??这个是个值得深思的问题…? 12月份是个快乐且痛苦时间节点。前一段时间,单位需要提交2023年工作总结,真的是憋了好久才可以下笔…

众和策略:人工智能风起云涌 算力基建支撑加速前进

2023年,人工智能技术完结质的飞跃。通过生成式AI(AIGC)技术,人们可用自然语言与机器进行便捷交互,并将海量的数据通过训练、推理,快速转化为出产力,发生实践商业价值。 AI技术加快向各行各业渗…

HarmonyOS自学-Day4(TodoList案例)

目录 文章声明⭐⭐⭐让我们开始今天的学习吧!TodoList小案例 文章声明⭐⭐⭐ 该文章为我(有编程语言基础,非编程小白)的 HarmonyOS自学笔记,此类文章笔记我会默认大家都学过前端相关的知识知识来源为 HarmonyOS官方文…

LTPI协议的理解——4、LTPI链路初始化以及运行

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 LTPI协议的理解——4、LTPI链路初始化以及运行 前言状态图Link TrainingLink DetectLink SpeedLink Training Example Link ConfigurationAdvertiseConfigure & AcceptLi…

什么是PD快充诱骗芯片?它的原理是什么?

PD快充诱骗芯片,顾名思义,就是通过LDR6328Q PD取电芯片把pd适配器的电压给诱骗出来固定给后端设备供电。 PD诱骗芯片是受电端的一种PD协议芯片,它内置了PD通讯模块,通过与供电端(如PD充电器)的PD协议芯片握…

微信小程序运行机制分析

setData渲染机制 Native就是微信客户端,逻辑层JsCore(js文件)通过setdata把数据送到渲染层Webview(小程序页面,wxml文件),渲染层接收到数据后就会改变对应的元素值。用户在小程序页面进行操作可…

Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中

目录 默认样式 修改默认字体颜色&#xff1a; 修改鼠标悬浮/选中字体颜色&#xff1a; 去掉长分割线并修改下划线颜色 完整代码 默认样式 注意事项&#xff1a;一定要在 <style scoped>不然修改的样式不会覆盖生效 修改默认字体颜色&#xff1a; ::v-deep .el-tabs__…