0


自动化工具Pyautogui和Pywinauto详细介绍和使用

自动化测试工具介绍和使用

在PC端应用程序自动化测试工具有三种,即对于C/S架构来说:Pyautogui、Pywinauto和Pywin32,其中对于浏览器B/S架构来说还可以使用selenium来进行web端的自动化(这个以后在写),因为Pywin32我用的比较少,下面着重介绍其他软件。

一. Pywinauto库的介绍

pywinauto 模块主要用于应用控制(打开、关闭应用等)窗口控制(最大化、最小化窗口等),也可以等位到控件,并对控件进行操作,如点击、编辑等。具体使用方法如下:

#对于首次使用这个包的用户,需要安装包,安装命令如下:#在cmd里面输入:pip isntall pywinautofrom 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 pyautogui

pyautogui.PAUSE =1#即pyautogui每次调用完程序后等待时间,也可以和time.sleep()结合起来使用
pyautogui.FAILSAFE =True#在程序执行错误时,可以将鼠标移到左上角(0,0),让程序停止下来,避免后续的无用功

2.3.2 获取屏幕的分辨率和鼠标的实时位置

import pyautogui
import time

size = 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 time

pyautogui.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 time

pyautogui.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 cv2

pyautogui.hotkey("win","d")
time.sleep(1)
result = pyautogui.locateOnScreen(image="gg.PNG", grayscale=False, confidence=0.9)#这个函数是将你预先截取的图片在页面进行查找,如果找到了就返回找到位置的(图片左上角坐标x,y,长,宽),没有找到则返回Noneprint(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 cv2

pyautogui.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 pyautogui

time.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 time

pyautogui.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 time

pyautogui.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 time

pyautogui.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 time

pyautogui.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 time

pyautogui.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 time

defget_position(path,value):
    center = pyautogui.locateCenterOnScreen(image=path, grayscale=True, confidence=value)return center

defopen_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()

本文转载自: https://blog.csdn.net/xiaomao1993/article/details/126474898
版权归原作者 南风知我意。。 所有, 如有侵权,请联系我们删除。

“自动化工具Pyautogui和Pywinauto详细介绍和使用”的评论:

还没有评论