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

  • 一. 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详细介绍和使用相关推荐

  1. python自动化工具之pywinauto(三)_自动化工具之三:pywinauto

    Python自动化工具:pywinauto 一.pywinauto的安装 (1)安装命令 pip install -U pywinauto/pip3 install -U pywinauto (2)验 ...

  2. 【抓包工具】Fiddler(详细介绍)

    一.Fiddler与其他抓包工具的区别 1.Firebug虽然可以抓包,但是对于分析http请求的详细信息,不够强大.模拟http请求的功能也不够,且firebug常常是需要"无刷新修改&q ...

  3. python 控制库_python中实现自动化控制pyautogui库使用方法介绍

    大家在使用电脑中,有时候需要电脑进行一些繁锁的程序化操作.Python中有一个第三方库,能够帮助大家实现自动化控制电脑完成指定任务.这个库叫pyautogui库.今天,咿哑呀就简单地教大家怎样使用这个 ...

  4. 【抓包工具】Wireshark(详细介绍与TCP三次握手数据分析)

    wireshark(官方下载网站: http://www.wireshark.org/),是用来获取网络数据封包,可以截取各种网络封包,显示网络封包的详细信息,包括http,TCP,UDP,等网络协议 ...

  5. DocuWare平台——用于文档管理和工作流程自动化的内容服务平台详细介绍(下)

    接上篇~~ 三.处理文档.控制工作流程 顺畅的信息流是每个生产过程的基础.自动化任何基于文档的任务(从有效的重新提交文档到复杂的审批工作流程),让您的团队在跨组织和跨部门的工作中畅通无阻. 具有列表的 ...

  6. Python 自动化工具pyautogui 安装过程详解

    Ubuntu 环境上安装pyautogui 的详细步骤如下: 1. 安装pip3 sudo apt-get install python3-pip 2.安装pyautogui pip3 install ...

  7. DocuWare平台——用于文档管理和工作流程自动化的内容服务平台详细介绍(上)

    DocuWare平台--用于文档管理和工作流程自动化的内容服务平台 成功实现办公自动化所需的一切 DocuWare 是一个先进的平台,可让您集中.快速.有效地管理.处理和利用业务信息. 我们的文档管理 ...

  8. 自动化工具PyAutoGUI :键盘操作

    pyautogui.typewrite('Hello world!') # 输入Hello world!字符串 pyautogui.typewrite('Hello world!', interval ...

  9. 让所有GUI都自动化-PyAutoGUI(GUI自动化工具)

    目录 1.前言 2.简介 3.安装 4.常用函数 5.保护措施 6.鼠标函数 7.键盘函数 8.消息弹窗函数 9.截屏函数 ‍10.示例 1.前言 在使用 Selenium 进行自动化测试时,鼠标事件 ...

最新文章

  1. C++ string与数值的转换
  2. iconfont图标_除了iconfont,UI设计师还可以使用的免费图标库!
  3. 二叉树创建及遍历算法(递归及非递归)(转)
  4. [Swift]LeetCode1146. 快照数组 | Snapshot Array
  5. c语言格式字符If,C语言所有语句格式 C语言中的的if语句共有多少种格式?
  6. 苏州宾馆管理也计算机哪个学校好,苏州十大寄宿式中学学校排名榜
  7. 安全性、监控、调优 的一些思考
  8. Sql Server 语句集合
  9. Windows蓝屏代码查询(Bug Check Code)
  10. H5 游戏主流引擎和编程语言
  11. i710870h和i710875h有多大差距?哪个好?
  12. java判断名字是否为张三_现有5个学生{张三,李四,王五,那六,小七}的数组,输入一个姓名,检查姓名是否存在,如果java啊...
  13. 最早的动态图匹配代表性算法-邻接点树(NNT)
  14. 前端大屏幕项目大厂解决兼容问题(react)
  15. Windows小技巧 -- 已连接wifi密码查看
  16. Python代码的编写运行方式介绍
  17. 项目技术指标(招标文件)
  18. Linux 网络编程学习笔记——三、TCP 协议详解
  19. html内容折叠,HTML+CSS入门 文本折叠详解
  20. 360全景单张图片HDR处理方法教程

热门文章

  1. 分布式之gossip共识算法分析
  2. NVM Node版本管理工具
  3. C语言 数组元素的遍历
  4. MySQL数据库常用基本语句及管理
  5. Arduino和单片机有啥区别?
  6. Spring + Thymeleaf 方言
  7. 刷题总结——太空飞行计划(最大权闭合子图用最大流解决)
  8. el-table表格无数据时,更改其自带的提示‘暂无数据’
  9. ERROR 1130 (HY000): Host ‘192.168.78.128‘ is not allowed to connect to this MySQL server
  10. 使用cmake调试“Could NOT find Boost (missing: iostreams program_options system“