自动化工具Pyautogui和Pywinauto详细介绍和使用
自动化测试工具介绍和使用
- 一. Pywinauto库的介绍
- 二、 pyautogui库的介绍和使用
- 2.1 博客推荐
- 2.2 如何实现测试自动化呢?
- 2.3 常见的使用方法介绍
- 2.3.1 故障保险方法
- 2.3.2 获取屏幕的分辨率和鼠标的实时位置
- 2.3.3 模拟鼠标单击(左、右、中)、双击、滚动、移动、拖动方法
- 2.3.3.1 点击方法
- 2.3.3.2左击,右击方法
- 2.3.3.3 滚动方法
- 2.3.3.4 鼠标移动方法
- 2.3.3.5 鼠标拖动方法
- 2.3.4 模拟键盘操作
- 2.3.4.1 键盘按下或按键组合
- 2.3.4.2 键盘写入
- 2.3.4.3 键盘和鼠标按下和松开,和鼠标拖动异曲同工
- 三、pyautogui简单实例
- 3.1 打开百度网页并输入内容,点击回车
在PC端应用程序自动化测试工具有三种,即对于C/S架构来说:Pyautogui、Pywinauto和Pywin32,其中对于浏览器B/S架构来说还可以使用selenium来进行web端的自动化(这个以后在写),因为Pywin32我用的比较少,下面着重介绍其他软件。
一. Pywinauto库的介绍
pywinauto 模块主要用于应用控制(打开、关闭应用等)窗口控制(最大化、最小化窗口等),也可以等位到控件,并对控件进行操作,如点击、编辑等。具体使用方法如下:
#对于首次使用这个包的用户,需要安装包,安装命令如下:
#在cmd里面输入:pip isntall pywinauto
from pywinauto.application import Application #导入Application类
app = Application(backend="uia") #实例化
#backend 属性有2个取值:win32 和 uia,win32 为默认值,根据应用程序的属性来进行查看,常用的小工具有inspect.exe、SpyLite.exe,具体下载链接在下面
path = r"" #这里填入想要打开程序的绝对路径
app.start(path) #启动程序
app.connect(path) #连接程序或者app.connect(process=3308),这里填入的是一个应用程序的进程号,在任务管理器中可以看到
app.kill() #这里是强制杀死程序
百度网盘链接
提取码:xi2l
二、 pyautogui库的介绍和使用
2.1 博客推荐
由于网上对这个工具介绍很多,我这里推荐三个我认为写的很好的博客分享给大家:
pyautogui详解
pyautogui和自动化测试框架的结合使用
pyautogui使用教程
2.2 如何实现测试自动化呢?
①、这个工具可以通过坐标来进行点击,即需要不同的坐标,如果页面元素位置发生改变,则坐标不管用了。
②、通过图片在进行定位,事先在页面截图,在通过在页面上进行查找,如果没有找到则返回None,找到了就返回一个<class ‘pyscreeze.Box’>类型(左上角坐标x,左上角坐标y,长,宽),如果返回的是center中心坐标(x,y),则是一个<class ‘pyscreeze.Point’>类型Point(x=680, y=135),则可以通过该结果来进行判断、断言
③、这个工具还可以使用热键来进行操作,就可以实现键盘的操作,实现自动化,但是由于pyautogui本身对图片识别率较低,便引入了opencv来提升识别率,通过灰度值得调整可以快速准确的识别定位图片
④、但是pyautogui的图片是跟分辨率有关系,所以复用性不高,即在其他电脑上想要使用,要么将所有的电脑的分辨率调成一样;或者将窗口设置成一样大小(即分辨率一样)
⑤、 由于pyautogui是通过图片来进行定位,则需要专门的图片存储来进行管理,则这会加大成本,因此这也是它的局限性。
⑥、由于通过图片定位,这无疑需要花费较多的时间来进行查找,对于一些比较看重时间的项目就不太适合。所以仁者见仁智者见智了。
2.3 常见的使用方法介绍
2.3.1 故障保险方法
import pyautoguipyautogui.PAUSE = 1 #即pyautogui每次调用完程序后等待时间,也可以和time.sleep()结合起来使用
pyautogui.FAILSAFE = True #在程序执行错误时,可以将鼠标移到左上角(0,0),让程序停止下来,避免后续的无用功
2.3.2 获取屏幕的分辨率和鼠标的实时位置
import pyautogui
import timesize = pyautogui.size() #获取屏幕分辨率
time.sleep(1)
position = pyautogui.position() #获取鼠标当前位置
print(f"屏幕的尺寸:{size},当前鼠标的位置:{position}")
2.3.3 模拟鼠标单击(左、右、中)、双击、滚动、移动、拖动方法
2.3.3.1 点击方法
参考源码,发现点击有以下几种方法:①通过x,y坐标②通过坐标序列③,通过图片点击,④,通过图片返回坐标进行点击,⑤,通过像素定位点击,欢迎大家补充!!!
import pyautogui #第一种方法通过x,y坐标点击
import timepyautogui.hotkey("win","d") #热键win+D 最小化pycharm
time.sleep(1)
pyautogui.click() #可以不填参数,即在当前位置进行点击
pyautogui.click(x=100,y=100,clicks=2,duration=0.1,interval=0.2,tween="linear",button="PRIMARY",logScreenshot="gg") #x,y如果是整数,则就是坐标
参数解释
clicks:点击次数,默认是1次,2就是双击
duration:点击持续时间,默认为0.0
interval:点击间隔时间,默认为0.0
tween:鼠标的移动模式,默认是简单的线性吐温,可以不管,如需了解详细信息,请参阅PyTweening模块文档
button:鼠标按键,默认左键,可选(left,middle,right,primary,secondary)
logScreenshot:表示点击时开始截图,这里填入截图名字,默认None,不截图
_pause:不推荐使用“暂停”参数。调用“pyautogui"或者sleep()函数来实现暂停。
#第二种方法
import pyautogui
import timepyautogui.hotkey("win","d")
time.sleep(1)
pyautogui.click(x=(100,100)) #让x=(),序列化x也能进行点击操作,这种只针对x;y不能使用这种方法,会报错。
#第三种方法
pyautogui.click(x="gg.PNG",duration=0.1,clicks=2) #预先截图,点击两次;只针对x
pyautogui.click(1000,600) #在空白处点击一次,防止第二次运行失败
#第四种方法
import pyautogui
import time
import cv2pyautogui.hotkey("win","d")
time.sleep(1)
result = pyautogui.locateOnScreen(image="gg.PNG", grayscale=False, confidence=0.9) #这个函数是将你预先截取的图片在页面进行查找,如果找到了就返回找到位置的(图片左上角坐标x,y,长,宽),没有找到则返回None
print(type(result),result) #<class 'pyscreeze.Box'> Box(left=75, top=5, width=74, height=73)
center= pyautogui.center(result) #这个函数是返回result的中心坐标
print(type(center),center) #<class 'pyscreeze.Point'> Point(x=112, y=41)
pyautogui.click(center) #单击#####第二种获取中心坐标方法
center= pyautogui.locateCenterOnScreen(image ="gg.PNG",grayscale= False,confidence=0.9) #这种方法是和上面两个函数的结合使用
print(type(center),center) #<class 'pyscreeze.Point'> Point(x=112, y=41)
pyautogui.click(center) #单击
参数解释:
image:这里填入图片的路径,绝对路径和相对路径都可以
grayscale:grayscale=True代表去饱和度,可以消除显示器饱和度导致的颜色偏差而导致图片定位失败的问题,可以提升速度
confidence:表示灰度值,值越高定位越准,但可能失败,建议0.8或者0.9
#####第5种方法,通过像素定位来点击
x,y = center #这是上面获取的中心坐标
print(type(x),type(y)) #<class 'numpy.int64'> <class 'numpy.int64'>
posi_pixel = pyautogui.pixel(int(x),int(y))
print(pyautogui.pixel(int(x),int(y))) #这里装换格式
if pyautogui.pixel(int(x),int(y))[0] == 0: #<class 'tuple'>取下标print("找到了")pyautogui.click(center)
#### 也可以手动输入坐标来查找
posi_pixel = pyautogui.pixel(100,100) #返回一个像素组成的元祖,如(255,255,255)
2.3.3.2左击,右击方法
方法和click()方法大同小异,只是少了一个button参数。
import pyautogui
import time
import cv2pyautogui.hotkey("win","d")
time.sleep(1)
pyautogui.leftClick(x=100,y=100,clicks =2) #鼠标左击两次
pyautogui.rightClick(x=100,y=100,clicks =2) #鼠标右击两次
pyautogui.middleClick(x=100,y=100,clicks =2) #鼠标滚轮击两次pyautogui.tripleClick() #这个方法是3次连续点击
2.3.3.3 滚动方法
import pyautoguitime.sleep(1)
pyautogui.scroll(clicks=200,x=100,y=100) #在坐标(100,100)处向上滚动200像素
pyautogui.scroll(clicks=-200,x=100,y=100) #在坐标(100,100)处向下滚动200像素
# 如有指定的需求。(目前仅有Linux支持)水平滚动
pyautogui.hscroll(clicks=100)
# 垂直滚动
pyautogui.vscroll(clicks=-200)
2.3.3.4 鼠标移动方法
具体参数前面都有讲解
import pyautogui
import timepyautogui.moveTo(200,200) #绝对移动,从当前位置移动到指定位置
time.sleep(1)
pyautogui.move(1000,100) #相对移动,在原来的基础上再次移动即(x+1000,y+100)
pyautogui.moveRel(1000,100) #同上
2.3.3.5 鼠标拖动方法
import pyautogui
import timepyautogui.dragTo(100,100) #鼠标绝对拖动
pyautogui.drag(200,100) #鼠标相对推动(x+200,y+100)
pyautogui.dragRel(100,100) #同上
2.3.4 模拟键盘操作
2.3.4.1 键盘按下或按键组合
import pyautogui
import timepyautogui.press(keys="enter",presses=2) #按enter键两次
pyautogui.hotkey("enter","enter") #热键,连续两次按enter
pyautogui.hotkey("ctrl","c")
pyautogui.hotkey("ctrl","v")
2.3.4.2 键盘写入
import pyautogui
import timepyautogui.hotkey("win","d")
time.sleep(1)
pyautogui.click(x="gg.PNG",clicks=2,duration=0.1)
pyautogui.write(["1","2"],interval=1) #可以依次写入,也可以一次性写入
pyautogui.write("12",interval=0.1) #同上
pyautogui.typewrite("12",interval=0.1) #同上
pyautogui.typewrite(["1","2"],interval=1) #同上
2.3.4.3 键盘和鼠标按下和松开,和鼠标拖动异曲同工
import pyautogui
import timepyautogui.mouseDown() #按下
pyautogui.mouseUp() #松开
pyautogui.keyDown() #按键按下
pyautogui.keyUp() #按键松开
time.sleep(3)
三、pyautogui简单实例
3.1 打开百度网页并输入内容,点击回车
具体步骤:截浏览器的图标、截浏览器输入框图标,获得坐标,点击,输入地址,点击回车,代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @time :2022/8/23 9:38
# @Author :南风知我意
# @FileName :examimport pyautogui
import timedef get_position(path,value):center = pyautogui.locateCenterOnScreen(image=path, grayscale=True, confidence=value)return centerdef open_baidu():url = "http://www.baidu.com"pyautogui.hotkey("win","d")time.sleep(1)center = get_position(path="gg.PNG",value=0.9)pyautogui.click(center,clicks=2,duration=0.1)time.sleep(1)center = get_position(path="max.PNG",value=0.9)pyautogui.click(center)time.sleep(1)center = get_position(path="url_input.PNG",value=0.9)pyautogui.click(center,clicks=1)time.sleep(1)pyautogui.write(url,interval=0.1)pyautogui.press("enter",presses=2)time.sleep(1)center = get_position(path="input_content.PNG",value=0.9)pyautogui.click(center)time.sleep(1)pyautogui.write("hhhh",interval=0.1) #这是在百度搜索框输入内容time.sleep(1)pyautogui.press("enter",presses=2) #按了两次回车if __name__ == '__main__':open_baidu()
自动化工具Pyautogui和Pywinauto详细介绍和使用相关推荐
- python自动化工具之pywinauto(三)_自动化工具之三:pywinauto
Python自动化工具:pywinauto 一.pywinauto的安装 (1)安装命令 pip install -U pywinauto/pip3 install -U pywinauto (2)验 ...
- 【抓包工具】Fiddler(详细介绍)
一.Fiddler与其他抓包工具的区别 1.Firebug虽然可以抓包,但是对于分析http请求的详细信息,不够强大.模拟http请求的功能也不够,且firebug常常是需要"无刷新修改&q ...
- python 控制库_python中实现自动化控制pyautogui库使用方法介绍
大家在使用电脑中,有时候需要电脑进行一些繁锁的程序化操作.Python中有一个第三方库,能够帮助大家实现自动化控制电脑完成指定任务.这个库叫pyautogui库.今天,咿哑呀就简单地教大家怎样使用这个 ...
- 【抓包工具】Wireshark(详细介绍与TCP三次握手数据分析)
wireshark(官方下载网站: http://www.wireshark.org/),是用来获取网络数据封包,可以截取各种网络封包,显示网络封包的详细信息,包括http,TCP,UDP,等网络协议 ...
- DocuWare平台——用于文档管理和工作流程自动化的内容服务平台详细介绍(下)
接上篇~~ 三.处理文档.控制工作流程 顺畅的信息流是每个生产过程的基础.自动化任何基于文档的任务(从有效的重新提交文档到复杂的审批工作流程),让您的团队在跨组织和跨部门的工作中畅通无阻. 具有列表的 ...
- Python 自动化工具pyautogui 安装过程详解
Ubuntu 环境上安装pyautogui 的详细步骤如下: 1. 安装pip3 sudo apt-get install python3-pip 2.安装pyautogui pip3 install ...
- DocuWare平台——用于文档管理和工作流程自动化的内容服务平台详细介绍(上)
DocuWare平台--用于文档管理和工作流程自动化的内容服务平台 成功实现办公自动化所需的一切 DocuWare 是一个先进的平台,可让您集中.快速.有效地管理.处理和利用业务信息. 我们的文档管理 ...
- 自动化工具PyAutoGUI :键盘操作
pyautogui.typewrite('Hello world!') # 输入Hello world!字符串 pyautogui.typewrite('Hello world!', interval ...
- 让所有GUI都自动化-PyAutoGUI(GUI自动化工具)
目录 1.前言 2.简介 3.安装 4.常用函数 5.保护措施 6.鼠标函数 7.键盘函数 8.消息弹窗函数 9.截屏函数 10.示例 1.前言 在使用 Selenium 进行自动化测试时,鼠标事件 ...
最新文章
- C++ string与数值的转换
- iconfont图标_除了iconfont,UI设计师还可以使用的免费图标库!
- 二叉树创建及遍历算法(递归及非递归)(转)
- [Swift]LeetCode1146. 快照数组 | Snapshot Array
- c语言格式字符If,C语言所有语句格式 C语言中的的if语句共有多少种格式?
- 苏州宾馆管理也计算机哪个学校好,苏州十大寄宿式中学学校排名榜
- 安全性、监控、调优 的一些思考
- Sql Server 语句集合
- Windows蓝屏代码查询(Bug Check Code)
- H5 游戏主流引擎和编程语言
- i710870h和i710875h有多大差距?哪个好?
- java判断名字是否为张三_现有5个学生{张三,李四,王五,那六,小七}的数组,输入一个姓名,检查姓名是否存在,如果java啊...
- 最早的动态图匹配代表性算法-邻接点树(NNT)
- 前端大屏幕项目大厂解决兼容问题(react)
- Windows小技巧 -- 已连接wifi密码查看
- Python代码的编写运行方式介绍
- 项目技术指标(招标文件)
- Linux 网络编程学习笔记——三、TCP 协议详解
- html内容折叠,HTML+CSS入门 文本折叠详解
- 360全景单张图片HDR处理方法教程
热门文章
- 分布式之gossip共识算法分析
- NVM Node版本管理工具
- C语言 数组元素的遍历
- MySQL数据库常用基本语句及管理
- Arduino和单片机有啥区别?
- Spring + Thymeleaf 方言
- 刷题总结——太空飞行计划(最大权闭合子图用最大流解决)
- el-table表格无数据时,更改其自带的提示‘暂无数据’
- ERROR 1130 (HY000): Host ‘192.168.78.128‘ is not allowed to connect to this MySQL server
- 使用cmake调试“Could NOT find Boost (missing: iostreams program_options system“