本文转载自:http://www.lemfix.com/topics/420

一、前言

​ 我们柠檬班的小可爱,在学完我们柠檬班自动化的课程之后,就掌握了接口自动化,web自动化,app自动化,这些工作中常用的自动化技能,在工作足以够应对90%以上的自动化需求了。不过近期也有部分小可爱在问PC端自动化怎么去做?对这个技术比较好奇,使用python可以不可以实现PC客户端自动化测试?答案当然是可以的,所以今天在这边专门整理了一遍文章,和大家一起聊聊如何使用python做PC端自动化!

二、环境安装

​ 使用python实现来做PC端自动化,前提是先安装好python,那么还需要用到一个第三方库:pywinauto,在这边我们首先需要安装好这个库,安装命令如下:

pip install pywinauto

三、使用说明

安装好了之后,关于使用说明大家可以参照官方文档上的说明,如下图:

 

上述内容翻译如下:

就是说在我们安装好Pywinauto之后,首先要确定哪种可访问性技术(pywinauto的backend)可以用于我们的应用程序,在windows上受支持的辅助功能技术有两种:

  • Win32 API (backend="win32") 默认backend
  • MS UI Automation (backend="uia")

​ 如果您不能确定程序到底适用于那种backend,可以借助于GUI对象检查工具来做,常用的检查工具有Inspect.ex,Spy++ 等,这个不做过多介绍,大家自行学习和下载,使用很简单,也非常便捷。

四、快速入门

在安装好环境之后,并且确定了应用程序适用的backend,那么接下来我们就可以使用Pywinauto这个模块来对应用程序进行自动化操作了

1、连接到应用程序

这边用window自带的记事本程序作为案例,给大家做讲解

连接应用程序,首先需要用到pywinauto.application.Application()来创建一个应用程序对象,然后再连接到应用程序,有如下两种方法:

  • 方式一:直接通过start方法打开操作的应用程序,
from pywinauto import application
# 方式一:创建应用程序时可以,指定应用程序的合适的backend,start方法中指定启动的应用程序
app = application.Application(backend='uia').start('notepad.exe')
  • 方式二:连接已经打开应用程序,可以通过connect连接到指定的应用程序
from pywinauto import application
# 方式二:查看要打开的程序进程号,通过process指定进程号连接
app = application.Application().connect(process=19035)

运行以上代码,就会自动打开记事本记事本,如下

 

2、窗口选择

打开这个窗口之后,我们要操作该窗口的话,那么就的先选中这个窗口,关于窗口的选择有一下几种方式

# 方式一 :不适用于窗口名为中文的
wind_1 = app.窗口名 # 方式二 :窗口名可以为中文
wind_2 = app["窗口名"] # 案例使用:选择上面打开的计算器程序窗口
wind_calc = app['无标题 - 记事本']

3、控件操作

程序窗口中的每一块内容,都是一个控件,我们要对这个窗口的某一块内容进行操作,就需要选择到对应的控件,

  • 获取所有控件

我们可以通过print_control_identifiers()这个方法,来获取这个窗口下的直接子控件,如下:

app['无标题 - 记事本'].print_control_identifiers()

打印出来的结果如下:

 

上面打印出来的内容分别对应窗口种的以一下部分:

 
  • 选择控件

关于控件选择的方法有好几种,最简单的方法如下:

# 选择控件的方法
wind_calc = app["窗口名"]["控件名"]
# 案例操作:选择编辑窗口
edit = app['无标题 - 记事本']['Edit']
  • 内容输入

在上面选择到编辑窗口之后,我们就可以进行内容输入了,

内容输入的方法:type_key()

# 在编辑栏种输入内容
edit.type_keys("柠檬班")
edit.type_keys("python自动化")
edit.type_keys("musen")

运行结果如下:

 

4、键盘操作

输入完上述内容之后,接下来我们要修改编辑框中的内容,

通过键盘完成以下操作:全选(ctrl+A) 复制(Ctrl+C) 粘贴(Ctrl+V) 回车(Enter) 粘贴(Ctrl+V)

  • pywinauto.keyboard.send_key

    pywinauto模拟操作键盘,需要使用到 pywinauto.keyboard.send_keys这个方法

    # 导入模块
    from pywinauto.keyboard import send_keys # 全选(ctrl+A)
    send_keys("^a") # 复制(ctrl+C)
    send_keys("^c") # 粘贴(ctrl+V)
    send_keys("^v") # 回车键
    send_keys("{VK_RETURN}") # 粘贴(ctrl+V)
    send_keys("^v")

    运行结果如下:

  • 常见的按键操作
    • ##### 字母按键用按键小写字母表示
    • 常用的一些按键
      ESC键:VK_ESCAPE
      回车键:VK_RETURN
      TAB键:VK_TAB
      Shift键:VK_SHIFT
      Ctrl键:VK_CONTROL
      Alt键:VK_MENU
    • 按键修饰符
      # 对于一些常用的按键,可以通过修饰符来表示,使用的时候比较方便
      '+': {VK_SHIFT}
      '^': {VK_CONTROL}
      '%': {VK_MENU} Alt键 # 上面:全选(ctrl+A) 复制(ctrl+C) 粘贴(ctrl+V)就使用的是修饰符^来代表ctrl
    • 更多的键盘操作大家可以参考官网文档

5、鼠标操作

pywinauto操作鼠标的所有方法都封装在pywinauto. mouse这个模块中,使用鼠标之前,首先要导入mouse模块,mouse模块中包含了一系列的鼠标操作事件

  • pywinauto. mouse
    • 鼠标移动:move方法
      • move(coords=(x轴坐标,y轴坐标))
      • 缓慢移动鼠标案例
      for i in range(10):
      x = 10 * i
      y = 10 * i
      time.sleep(0.5)
      # 移动鼠标
      mouse.move(coords=(x, y))
    • 鼠标点击:click
      # button指定左击还是右击,coords指定鼠标点击的位置
      
      # 3.1、鼠标单击
      # 指定位置,鼠标左击
      mouse.click(button='left', coords=(40, 40))
      # 指定位置 鼠标右击
      # mouse.click(button='right', coords=(100, 200))
      # 3.2 鼠标双击
      mouse.double_click(button='left', coords=(140, 40)) # 4 按下鼠标:press
      # 将属性移动到(140,40)坐标处按下
      mouse.press(button='left', coords=(140, 40)) # 5 释放鼠标:repleace
      # 将鼠标移动到(300,40)坐标处释放,
      mouse.release(button='left', coords=(300, 40)) # 6、右键单击指定坐标
      mouse.right_click(coords=(400, 400)) # 7、鼠标中键单击指定坐标(很少用的到)
      mouse.wheel_click(coords=(400, 400)) # 8 滚动鼠标
      # coords:指定鼠标的坐标位置。
      # wheel_dist指定鼠标滚轮滑动的次数,正数往上,负数往下。
      mouse.scroll(coords=(1200,300),wheel_dist=-3)

五、说明

关于pywinauto模块的基本使用就该大家介绍到这里了,对pc端自动化感兴趣的同学可以往这个方向去深入学习。

python 实现 PC 客户端自动化快速入门:pywinauto !的更多相关文章

  1. 聊聊 PC 端自动化最佳方案 - Pywinauto

    1. 前言 大家好,我是安果! 上一篇文章,聊到 PC 端的一种自动化方案:WinAppDriver 聊聊 PC 端自动化最佳方案 - WinAppDriver 有小伙伴后台给我留言,说「 pywin ...

  2. 人生苦短我用Python,本文助你快速入门

    目录 前言 Python基础 注释 变量 数据类型 浮点型 复数类型 字符串 布尔类型 类型转换 输入与输出 运算符 算术运算符 比较运算符 赋值运算符 逻辑运算符 if.while.for 容器 列 ...

  3. 用Python进行实时计算——PyFlink快速入门

    Flink 1.9.0及更高版本支持Python,也就是PyFlink. 在最新版本的Flink 1.10中,PyFlink支持Python用户定义的函数,使您能够在Table API和SQL中注册和 ...

  4. python视频教程:十分钟快速入门python

    想要学习python这门语言,却始终找不到一个全面的Python视频教程,倘若你是真心想学好一门语言,小编建议你亲自动手实践的.下面来看看入门python的学习教程. Python的语言特性 Pyth ...

  5. Python网络爬虫实战(一)快速入门

    本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站的爬虫实战来进行. 我们编写网络爬虫最主要 ...

  6. python网络爬虫实战之快速入门

    本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站的爬虫实战来进行. 我们编写网络爬虫最主要 ...

  7. 【python】pycharm常用配置快速入门。

    俗话说,工欲善其事必先利其器.当我们想从事一门新的语言的时候,最重要的是熟悉其常用的编辑器的配置.刚好这两天在学习python,网上看到一篇比较好的文章,转载过来自己学习一下.感谢:https://s ...

  8. IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问

    IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问 原文:http://docs.identityserver.io/en/release/quickst ...

  9. saltstack自动化运维快速入门

    saltstack自动化运维快速入门 关于saltstack 这个软件是干啥的 我这里就不介绍了 只是简单的说下是干啥的 网上的说法是 它是func的强化版本+ puppet的精简版 关于puppet ...

随机推荐

  1. ARTS-S c++调用pytorch接口

    想跑通第1个参考资料上讲的例子,一定要注意gcc和gperftools的版本.因为LibTorch用了c++17的over-aligned新特性. centos默认的gcc是4.8.5不支持这个新特性 ...

  2. 业级PPTP服务器搭建企

    搭建企业级PPTP服务器   分类: Linux服务篇 undefined 本文收录在企业项目实战系列 一.VPN 介绍 1.介绍 虚拟私人网络(英语:Virtual Private Network, ...

  3. NodeJS2-2环境&调试----引用系统内置模块,引用第三方模块

    引用系统内置模块的方法 08_fs.js // 引用系统内置模块的方法 const fs = require('fs'); const result = fs.readFile('./08_fs.js ...

  4. Docker中Nginx服务器相关配置

    工作中经常需要在服务器上来做一下实验,亲自动手看看效果是否与理论描述的相同.用docker可以很方便的配置所需要的环境,以下内容记录了如何用docker配置一个nginx服务器 下载nginx 从默认 ...

  5. 爬取https://www.parenting.com/baby-names/boys/earl网站top10男女生名字及相关信息

    爬取源代码如下: import requests import bs4 from bs4 import BeautifulSoup import re import pandas as pd impo ...

  6. Java实现微信小程序支付(完整版)

    在开发微信小程序支付的功能前,我们先熟悉下微信小程序支付的业务流程图: 不熟悉流程的建议还是仔细阅读微信官方的开发者文档. 一,准备工作 事先需要申请企业版小程序,并开通“微信支付”(即商户功能).并 ...

  7. 构建 CDN 分发网络架构简析

    构建 CDN 分发网络架构 CDN的基本目的:1.通过本地缓存实现网站的访问速度的提升 CDN的关键点:CNAME在域名解析:split智能分发,引流到最近缓存节点

  8. python安装pymssql等包时出现microsoft visual c++ 14.0 is required问题无需下载visualcppbuildtools的解决办法

    如题,在练习python安装一些包时,出现了microsoft visual c++ 14.0 is required问题.网上有很多资料:一是下载对应的.whl文件,然后pip install安装: ...

  9. Python爬虫实战:爬取腾讯视频的评论

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 易某某 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  10. php yii 查看帮助时会调用具体脚本类的析构函数

    现象 执行 php yii 查看脚本有什么命令的时候,发现会调用我一个类中的析构函数的命令.并且不是一次调用,是3次,截图中有两次,还有一次输出完析构函数所在的类中的命令之后. 分析原因 在析构函数中 ...