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

这篇具有很好参考价值的文章主要介绍了让所有GUI都自动化-PyAutoGUI(GUI自动化工具)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、前言

2、简介

3、安装

4、常用函数

5、保护措施

6、鼠标函数

7、键盘函数

8、消息弹窗函数

9、截屏函数

‍10、示例


1、前言

在使用 Selenium 进行自动化测试时,鼠标事件可以用 ActionChains 类,键盘事件可以用 Keys 类。本篇将介绍一款自动化工具-PyAutoGUI,除了可以满足鼠标、键盘事件操作外,还可以进行消息弹窗、截屏等操作。

2、简介

PyAutoGUI 是一个纯 Python 的 GUI 自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,macOS,Linux),并在 Python 2 和 3 上运行。

PyAutoGUI 可以模拟鼠标的移动、点击、拖拽,键盘按键输入、按住操作,以及鼠标+键盘的热键同时按住等操作,可以说手能动的都可以。

PyAutoGUI 有几个特点:

1、移动鼠标并单击其他应用程序的窗口。

2、向应用程序发送点击输入(例如,填写表格)。

3、截取屏幕截图,并给出一个图像(例如,一个按钮或复选框),然后在屏幕上找到它。

4、找到应用程序的窗口,然后移动、调整大小、最大化、最小化或关闭它(目前仅限 Windows)。

5、显示警报和消息框。

Github地址:

https://github.com/asweigart/pyautogui

3、安装

1、Windows 环境下

PyAutoGUI 没有任何依赖,因为它用 Python 的 ctypes 模块,所以不需要 pywin32。

pip3 install pyautogui

2、macOS 环境下

PyAutoGUI 需要 PyObjC 运行 AppKit 和 Quartz 模块。

sudo pip3 install pyobjc-core
sudo pip3 install pyobjc
sudo pip3 install pyautogui

3、Linux 环境下

PyAutoGUI 需要 python-xlib(Python 2)、python3-Xlib(Python 3)

sudo pip3 install python3-xlib
sudo apt-get scrot
sudo apt-get install python-tk
sudo apt-get install python3-dev
sudo pip3 install pyautogui

4、常用函数

position():返回整数元组 (x, y),分别表示鼠标光标所在位置的 XY 轴坐标。

size():返回显示器的尺寸整数元组 (x, y)。

onScreen():要检查 XY 坐标是否在屏幕上,需要用此函数来检验,如果在屏幕上返回 True,否则返回 False。

1、获取当前鼠标的坐标

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
print(pyautogui.position())

运行结果:

pyautogui,软件测试,自动化测试,自动化,python,运维

2、获取当前屏幕的分辨率(宽度和高度)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
print(pyautogui.size())

运行结果:

pyautogui,软件测试,自动化测试,自动化,python,运维

3、判断坐标是否在屏幕上

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
x, y = 500, 600
print(pyautogui.onScreen(x, y))

运行结果:

pyautogui,软件测试,自动化测试,自动化,python,运维

5、保护措施

PAUSE 方法可以进行增加延迟时间,例如 3.5 秒。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
pyautogui.PAUSE = 3.5

6、鼠标函数

屏幕位置使用 X 和 Y 轴的笛卡尔坐标系。

原点 (0,0) 在左上角,分别向右、向下增大。

如果屏幕像素是 1920*1080,那么右下角的坐标是 (1919, 1079)。

moveTo():函数会把鼠标光标移动到指定的 XY 轴坐标处。如果传入 None 值,则表示使用当前光标的对象轴坐标值。

moveRel():如果你想让光标以当前位置为原点,进行相对移动,就用此函数。

dragTo() 和 dragRel():函数与 moveTo() 和 moveRel() 函数类似。另外,他们有一个 button 参数可以设置成 left,middle 和 right 三个键。

click():函数模拟单击鼠标左键一次的行为。参数可以设置,其中,button 属性可以设置成 left,middle 和 right。

doubleClick(),tripleClick() 和 rightClick():函数来实现双击、三击和右击操作。

mouseDown() 和 mouseUp():函数可以实现鼠标按下和鼠标松开的操作。两者参数相同,有 x,y 和 button。

scroll():函数控制鼠标滚轮的滚动,amount_to_scroll 参数表示滚动的格数。正数则页面向上滚动,负数则向下滚动。

1、鼠标移动

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
num_seconds = 1.2
# 用num_seconds秒的时间把光标移动到(x, y)位置
pyautogui.moveTo(x, y, duration=num_seconds)
# 用num_seconds秒的时间把光标的
# X轴(水平)坐标移动xOffset,
# Y轴(竖直)坐标向下移动yOffset。
xOffset, yOffset = 50, 100
pyautogui.moveRel(xOffset, yOffset, duration=num_seconds)

2、鼠标移动(缓动/渐变)- 改变光标移动过程的速度和方向。通常鼠标是匀速直线运动的。

# 开始很慢,不断加速
pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad)
# 开始很快,不断减速
pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad)
# 开始和结束都快,中间比较慢
pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad)
# 一步一徘徊前进
pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce)
# 徘徊幅度更大,甚至超过起点和终点
pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic)

3、鼠标拖拽

# 按住鼠标左键,把鼠标拖拽到(100, 200)位置
pyautogui.dragTo(100, 200, button='left')
# 按住鼠标左键,用2秒钟把鼠标拖拽到(300, 400)位置
pyautogui.dragTo(300, 400, 2, button='left')
# 按住鼠标右键,用2秒钟把鼠标拖拽到(30,0)位置
pyautogui.dragTo(30, 0, 2, button='right')

4、鼠标点击

# 先移动到(100, 200)再单击
pyautogui.click(x=100, y=200, duration=2)
# 右键
pyautogui.click(button='right')
# 双击左键
pyautogui.click(clicks=2)
# 两次单击之间停留0.25秒
pyautogui.click(clicks=2, interval=0.25)
# 三击右键
pyautogui.click(button='right', clicks=2, interval=0.25)

5、鼠标按下和鼠标松开

# 鼠标左键按下再松开
pyautogui.mouseDown(); pyautogui.mouseUp()
# 按下鼠标右键
pyautogui.mouseDown(button='right')
# 移动到(100, 200)位置,然后松开鼠标右键
pyautogui.mouseUp(button='right', x=100, y=200)

6、鼠标滚动

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

7、键盘函数

typewrite():函数可以实现字符输入。要在两次输入间增加时间间隔,可以用 interval 参数。此函数只能用于单个字符键,不能按 SHITF 和 F1 这些功能键。

KEYBOARD_KEYS:获取按键名称。

press():函数把 pyautogui.KEYBOARD_KEYS 里面按键对应的字符串输入进去。

hotkey():函数来绑定若干键盘热键。像 Ctrl-S 或 Ctrl-Shift-1 都可以用此函数来实现。

1、键盘输入

# 输入Hello world!
pyautogui.typewrite('Hello world!')
# 每次输入间隔0.25秒,输入Hello world!
pyautogui.typewrite('Hello world!', interval=0.25)
# 多个键也可以
pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'], interval=0.5)

2、按键名称

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
print(pyautogui.KEYBOARD_KEYS)

运行结果:

pyautogui,软件测试,自动化测试,自动化,python,运维

3、键盘按键

# ENTER键
pyautogui.press('enter')
# F1键
pyautogui.press('f1')
# 左方向键
pyautogui.press('left')
# 用数组把一组键传入
pyautogui.press(['left', 'left', 'left'])

press() 函数其实是 keyDown() 和 keyUp() 函数的包装,模拟的按下然后松开两个动作。这两个函数可以单独调用。

例如,按下 shift 键的同时按3次左方向键。每个按键的按下和松开也可以单独调用。

# 按下`shift`键
pyautogui.keyDown('shift')
pyautogui.press('left')
pyautogui.press('left')
pyautogui.press('left')
# 松开`shift`键
pyautogui.keyUp('shift')

4、键盘热键

pyautogui.hotkey('ctrl', 'a') # 全选
pyautogui.hotkey('ctrl', 'c') # 复制
pyautogui.hotkey('ctrl', 'v') # 粘贴

8、消息弹窗函数

如果你需要消息弹窗,通过单击 OK 暂停程序,或者向用户显示一些信息,消息弹窗函数就会有类似JavaScript 的功能。

alert():函数显示一个简单的带文字和 OK 按钮的消息弹窗。用户点击后返回 button 的文字。

confirm():函数显示一个简单的带文字、OK 和 Cancel 按钮的消息弹窗,用户点击后返回被点击 button 的文字,支持自定义数字、文字的列表。

prompt():函数可以输入的消息弹窗,带 OK 和 Cancel 按钮。用户点击 OK 按钮返回输入的文字,点击 Cancel 按钮返回 None。

password():函数样式同 prompt(),用于输入密码,消息用 * 表示。带 OK 和 Cancel 按钮。用户点击 OK 按钮返回输入的文字,点击 Cancel 按钮返回 None。

1、alert() 函数

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
pyautogui.alert(text='点击OK按钮', title='alert()函数', button='OK')

运行结果:

pyautogui,软件测试,自动化测试,自动化,python,运维

2、confirm() 函数

(1)OK 和 Cancel 按钮的消息弹窗

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
pyautogui.confirm(text='点击OK或Cancel按钮', title='confirm()函数', buttons=['OK', 'Cancel'])

运行结果:

pyautogui,软件测试,自动化测试,自动化,python,运维

(2)10 个按键 0-9 的消息弹窗

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
pyautogui.confirm(text='点击0到9按钮', title='confirm()函数', buttons=range(10))

运行结果:

pyautogui,软件测试,自动化测试,自动化,python,运维

3、prompt() 函数

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
pyautogui.prompt(text='输入消息弹窗', title='prompt()函数', default='用户点击OK')

运行结果:

pyautogui,软件测试,自动化测试,自动化,python,运维

4、password() 函数

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
pyautogui.password(text='输入消息弹窗', title='password()函数', default='用户点击OK', mask='*')

运行结果:

pyautogui,软件测试,自动化测试,自动化,python,运维

9、截屏函数

PyAutoGUI 用 Pillow/PIL 库实现图片相关的识别和操作。

在 Linux 里面,你必须执行 sudo apt-get install scrot 来使用截屏特性。

1、截屏

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import pyautogui
# 返回一个Pillow/PIL的Image对象
pyautogui.screenshot()
pyautogui.screenshot('Desktop.png')

运行结果:

pyautogui,软件测试,自动化测试,自动化,python,运维

如果你不需要截取整个屏幕,还有一个可选的 region 参数。你可以把截取区域的左上角 XY 坐标值和宽度、高度传入截取。

im = pyautogui.screenshot(region=(0,0,300,400))

2、如果你有一个图片文件想在上面做点击操作,你可以用 locateOnScreen() 函数来定位。

# 返回(最左x坐标,最顶y坐标,宽度,高度)
pyautogui.locateOnScreen('pyautogui/looks.png')

3、locateAllOnScreen() 函数会寻找所有相似图片,返回一个生成器。

for i in pyautogui.locateAllOnScreen('pyautogui/looks.png'):
    print(i)
list(pyautogui.locateAllOnScreen('pyautogui/looks.png'))

4、locateCenterOnScreen() 函数会返回图片在屏幕上的中心 XY 轴坐标值。

pyautogui.locateCenterOnScreen('pyautogui/looks.png')

‍10、示例

使用 Selenium 打开 Chrome 浏览器,访问百度首页,输入关键字进行查询,之后向下滚动后再进行截屏的一系列操作。

由于 PyAutoGUI 不支持中文输入,这里使用 pyperclip 库,采用“复制粘贴”的方式来输入中文。

注:由于作者是 macOS 环境下运行,ctrl+v 粘贴则是 command+v。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试

import time
import pyperclip
import pyautogui
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestMyTest():
    def setup_method(self):
        self.driver = webdriver.Chrome()
        self.pyautogui = pyautogui
        self.pyperclip = pyperclip

    def teardown_method(self):
        self.driver.quit()

    def test_myTest(self):
        self.driver.get("https://www.baidu.com/")
        time.sleep(2)
        self.pyautogui.typewrite('pyautogui', interval=0.25)
        time.sleep(2)
        self.pyperclip.copy("自动化测试")
        time.sleep(2)
        self.pyautogui.hotkey('command', 'v')
        time.sleep(2)
        self.driver.find_element(By.ID, "su").click()
        time.sleep(2)
        self.pyautogui.scroll(-10)
        time.sleep(2)
        self.pyautogui.screenshot('Desktop.png')

精彩推荐

面试笔试系列

思维导图系列

Linux常用命令壁纸

接口Requests系列

测试框架pytest系列

Jmeter快速上手之接口测试

自动化测试框架结构图

移动安全框架(MobSF)

pyautogui,软件测试,自动化测试,自动化,python,运维文章来源地址https://www.toymoban.com/news/detail-676257.html

到了这里,关于让所有GUI都自动化-PyAutoGUI(GUI自动化工具)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 自动化详解(pyautogui)

    2.1.1 定位 2.1.2 移动 2.1.3 拖动 2.1.4 滚动 2.1.5 点击 2.2.1 输入 2.2.2 按键 注:暂不支持中文 键盘字符串 说明 enter 回车键 tab TAB 键 space 空格键 up、down、left、right 方向键 ctrl Ctrl 键 … … 2.2.3 快捷键 2.3.1 截图 2.3.2 分辨率 2.4.1 提示框 2.4.2 选择框 2.4.3 密码输入 2.4.4 普通输入

    2024年02月08日
    浏览(56)
  • python自动化神器:pyautogui

    详情可访问:pyautogui官网地址,关注本专栏,学习自动发消息给对象 pyautogui是一个Python模块,可以模拟用户在屏幕上的鼠标和键盘操作。它可以自动化鼠标和键盘输入,可以用于各种自动化任务,例如GUI测试、自动化数据输入、自动化游戏玩法等。pyautogui提供了一组函数来控

    2024年02月13日
    浏览(63)
  • python 自动化模块 - pyautogui初探

    在画图软件中使用 pyautogui 拖动鼠标,画一个螺旋式的正方形 - (源码在下面) PyAutoGUI允许Python脚本控制鼠标和键盘,以自动化与其他应用程序的交互。API的设计非常简单,适用于Windows、macOS和Linux。功能如下: 移动鼠标并在其他应用程序的窗口中单击。 向应用程序发送按键(

    2024年01月20日
    浏览(46)
  • pyautogui微信小程序自动化操作

    一个很简单的脚本,用途是实现微信小程序或其他软件的自动化操作,如果是长期固定需求,可以考虑把脚本内置到常用软件的环境中,比如MAYA,当我每天打开MAYA时就可以实现每天自动在小程序上疫情打卡 主要使用pyautogui和opencv模块,opencv用于图像识别,pyautogui用于键鼠操

    2024年02月11日
    浏览(41)
  • python自动化办公--pyautogui控制鼠标和键盘操作

    在公司某些工作场景下,需要大量重复的工作,重复的工作完全可以通过python软件的自动化实现,省时省力。本文分享python自动化办公的利器之一--pyautogui,通过pyautogui可以轻松控制鼠标和键盘操作。 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和

    2024年02月16日
    浏览(42)
  • PyAutoGUI Python 库,可以用于自动化鼠标和键盘的输入

    PyAutoGUI 是一个 Python 库,可以用于自动化鼠标和键盘的输入。它可以模拟人类的鼠标和键盘操作,例如单击、双击、拖动、按键、释放键等。PyAutoGUI 还提供了一些其他功能,例如屏幕截图和图像识别等。 以下是几个 PyAutoGUI 的典型案例和代码: 这些示例只是 PyAutoGUI 的一小部

    2024年02月10日
    浏览(50)
  • python+pyautogui—PC端自动化(二)键盘鼠标及对话框操作

    目录 鼠标操作 获取鼠标所在位置坐标 获取鼠标所在位置的RGB值 鼠标点击 鼠标按下和释放 鼠标移动 鼠标拖拽 滚轮滚动 键盘操作 输入英文字符 普通按键操作press 按下与抬起 组合键hotkey 持续按键hold 弹出对话框 alert confirm prompt password 获取鼠标所在位置坐标 获取鼠标所在位

    2024年02月12日
    浏览(36)
  • python selenium框架解决ip代理框不能自动化登录,解决pyautogui开不了多线程问题

    有时候我们使用python自动化框架的时候,打开一个网页的时候,它会出现出线这一种登录框,我们f12检查不了,用开发者工具强制检查里面没有任何属性. 那这时候我们就可以用到python第三方库:pyautogui PyAutoGUI:是一个Python库,可用于自动化GUI(图形用户界面)程序的任务。它可以让

    2024年02月07日
    浏览(62)
  • Windows GUI自动化控制工具之python uiAutomation

    对 Windows GUI进行自动化控制的工具有很多,比如pywinauto、pyautogui、pywin32、Autoit、airtest、UIAutomation等,UI Automation API是微软提供的自动化框架,可在支持 Windows Presentation Foundation (WPF) 的所有操作系统上使用,支持的应用类型更多。本文介绍封装了UI Automation API的Python uiautomatio

    2024年02月13日
    浏览(26)
  • GUI自动化测试工具Sikulix的安装和使用

    从程序内部控制对小白来说太难了,所以使用一下自动化测试的工具直接控制按钮达到我的目的 官网:http://www.sikulix.com/ 下载对应系统的.jar 需要使用java,没有的话安装一下 然后在sikulix的下载目录下执行 安装成功后就会弹出软件的窗口 上图左边是写程序的地方,右边是日

    2023年04月26日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包