Gui桌面应用测试,没有比这更简单上手的工具了

有个朋友最近问我有没有推荐 GUI 桌面应用自动化的技术,我只能回答他:
不好意思,这个真有,他是pyautogui 。
主要有三大特征:
◆ 纯纯的 Python, 源码一览无余;
◆ 跨平台,linux, windows, mac 他都能上;
◆ 操作简单,会代码就能上手 。

Gui桌面应用测试,没有比这更简单上手的工具了

文章插图
 
一、WeB自动化文件上传,不要太简单
熟悉web自动化测试的大佬应该都懂,当采用js调用原生控件进行文件上传的时候,最常用的是使用 pywin32 等系统交互库 。
Gui桌面应用测试,没有比这更简单上手的工具了

文章插图
 
当看到pywin32那丑陋的api封装只能爆粗口 。
就为了输入一个文件地址,需要整这么多莫名其妙的代码(看不懂没关系,只需要看代码行数就够了):
Gui桌面应用测试,没有比这更简单上手的工具了

文章插图
 
我们来看看使用 pyautogui 多么简单:
#输入文件名pyautogui.write(r'd:demo.txt')# 回车pyautogui.press('enter', presses=2)二、跨平台的使用和安装
上面的代码在mac,linux和windows上是通用的,只是在mac和linux下需要安装额外的依赖 。
windows安装不需要其他依赖,直接使用了python自带的ctypes模块:
pip install pyautoguimac安装需要PyObjC模块:
pip3 install pyobjc-corepip3 install pyobjcpip3 install pyautoguilinux需要依赖python3-Xlib或者python-xlib(python2):
pip3 install python3-xlibpip3 install pyautoguilinux如果没有安装相关python库可能会报错 。
Debian系发行版(其他发行版自行了解)你可能需要输入:
sudo apt-get install scrotsudo apt-get install python3-tksudo apt-get install python3-dev三、基于坐标和图像的设计哲学
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 randomimport timeimport pyautogui as uix, 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)效果:
Gui桌面应用测试,没有比这更简单上手的工具了

文章插图
 
5、相对移动
ui.move(-500, duration=1)ui.move(yOffset=-400, duration=1)ui.move(500, duration=1)ui.move(yOffset=400, duration=1)相对移动的小游戏:
start = 20add_point = 10duration = 0.5for 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效果:
Gui桌面应用测试,没有比这更简单上手的工具了

文章插图
 
6、点击
ui.click(x=None, y=None, clicks=1, # 点击次数 interval=0.0, # 间隔时间 button='right', # 右键 duration=0.0) # 持续时间通过click进一步封装了leftClick,rightClick,middleClick,doubleClicktripleClick
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') # 滚动到窗口底部效果:
Gui桌面应用测试,没有比这更简单上手的工具了

文章插图
 
键盘操作
1、输入框输入
# 输入yuz, 每个字母时间间隔 0.2 spyautogui.write("yuz",interval=0.2)注意:pyautogui 并不支持输入框自动聚焦,所有输入之前先要点击输入框位置 。


推荐阅读