一、环境安装

1.命令行安装方法

pip install pywinauto==0.6.7

2.手动安装方法

安装包下载链接:
pyWin32: python调用windows api的库
https://sourceforge.net/projects/pywin32/files/pywin32/Build 220/

comtypes: COM接口的调度https://github.com/enthought/comtypes/releases

six: 用来兼容Python2和Python3的库
https://pypi.org/project/six/

Pillow:可选,用来做屏幕截图的
https://pypi.org/project/Pillow/2.7.0/

Pywinauto:PC端自动化工具
https://github.com/pywinauto/pywinauto/releases

解压缩后执行 python setup.py install
注:建议使用第一种命令行安装,方便。

3.环境检查

命令行中打开python解释器,运行以下代码,windows自带的记事本会被启动,若无报错,则证明pywinauto已安装成功。

1
2
from pywinauto.application import Application
app = Application(backend="uia").start("notepad.exe")

二、封装函数

# -*- coding: utf-8 -*-
import time,os
from pywinauto import application '''
安装程序中,键盘快捷键对应码表如下:
SHIFT +
CTRL ^
ALT %
空格键 {SPACE}
BACKSPACE {BACKSPACE}、{BS} or {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or DELETE {DELETE} or {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER} or ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} or {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
+ {ADD}
- {SUBTRACT}
* {MULTIPLY}
/ {DIVIDE}
''' class Tool_Installer_Error(Exception): """Application has not been connected to a process yet""" pass # pragma: no cover class Tool_Installer(object):
'''
控件中有一个极其重要的方法wrapper_object()
如:object_func = dlg['Button1'].wrapper_object()
print(dir(object_func)) #打印控件所有可用的方法
'''
def __init__(self):
self.app_master = None
self.app_window = None
self.app_dlg = None def app_start(self,app_full_path,timeout=0.5):
print('start application')
if not os.path.exists(app_full_path):
raise Tool_Installer_Error("%s does not exists" %(app_full_path))
self.app_master = application.Application().start(app_full_path)
time.sleep(timeout) def app_connect(self,title_re,class_name,backend='win32',timeout=0.5):
print('get application')
self.app_window = application.Application(backend=backend).connect(title_re=title_re, class_name=class_name,timeout=timeout) def app_get_dlg(self,title):
print('get dialog on application')
self.app_dlg = self.app_window.window(title=title) #安装robot发现title_re参数失效 def app_get_all_widget(self):
print('get all widget on dialog')
widgets = self.app_dlg.print_control_identifiers()
return widgets def app_wait_button_active(self,widget_name):
print('wait for button active')
while not self.app_dlg[widget_name].is_enabled():
time.sleep(3) def app_widget_click(self,widget_name,timeout=5):
print('click button on %s' %(widget_name))
# 智能等待窗口部件出现,超时时间为5S
self.app_dlg[widget_name].wait(wait_for="visible", timeout=timeout)
self.app_dlg[widget_name].click() def app_widget_send_key(self,widget_name,key,timeout=5):
print('send %s on %s' %(key,widget_name))
# 智能等待窗口部件出现,超时时间为5S
self.app_dlg[widget_name].wait(wait_for="visible", timeout=timeout)
self.app_dlg[widget_name].type_keys(key) def app_widget_get_text(self,widget_name):
object_func = self.app_dlg[widget_name].wrapper_object()
return object_func.window_text() if __name__ == '__main__':
#安装robotframework
robot_file_path = r'D:\software\robotframework-2.8.7.win32.exe'
robot = Tool_Installer()
app_master = robot.app_start(robot_file_path)
robot.app_connect('Setup','#32770')
robot.app_get_dlg('Setup')
robot.app_widget_send_key(widget_name='Button2',key='%N')
robot.app_widget_send_key(widget_name='Button3',key='%N')
robot.app_widget_send_key(widget_name='Button2',key='%N')
print(time.time())
print(robot.app_dlg.exists())
print(time.time())
robot.app_widget_send_key(widget_name='Button2',key='{ENTER}',timeout=60)

  

pywinauto教程2的更多相关文章

  1. pywinauto教程

    转:pywinauto教程https://blog.csdn.net/weixin_40161673/article/details/83246861 ** 一.环境安装**1.命令行安装方法pip ...

  2. 【转】pywinauto教程

    一.环境安装 1.命令行安装方法 pip install pywinauto==0.6.7 2.手动安装方法 安装包下载链接:pyWin32: python调用windows api的库https:/ ...

  3. 在中文windows下使用pywinauto进行窗口操作

    这两天开始接触pywinauto,听说百度的自动化QA也用这个模块,于是来了兴趣,但网上的教程很少,而且基本上都是拿官方的notepad来说,首先中文菜单的支持是问题,其次各种操作也没有写清楚,阅读官 ...

  4. 原创-使用pywinauto进行dotnet的winform程序控制(一)

    pywinauto自动化控制win32的ui的程序,网上有好多的教程.但是操作dotnet写的winform教程,就少之又少.今天我就来分享我的pywinauto操作dotnet的winform的研究 ...

  5. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  6. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  7. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  8. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  9. Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境

    一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...

随机推荐

  1. 多网卡做team

    简明的说,就是把多个物理网卡绑定成一个逻辑上的网卡,以增加带宽,或者实现主备功能,增加硬件冗余,以实现更高的系统稳定性,目前主要有bond和team两种做法,而bond主要是针对双网卡的情况来说,而t ...

  2. 如何查看laravel门脸类包含方法的源码

    以Route门脸类为例,我们定义路由时使用的就是Route门脸类,例如我们在web.php中定义的路由 use Illuminate\Support\Facades\Route; Route::get ...

  3. OpenGL入门1.5:矩阵与变换

    每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 前言 在阅读本篇博客之前,你必须对向量和矩阵有基本的认识,并且能熟练进行向量和矩阵的运算 我们已经知道了如何创建一个物体.着色.加 ...

  4. 创建WPF项目

    参考: https://www.cnblogs.com/yhcao/p/6237611.html https://mahapps.com/guides/reporting-issues.html ht ...

  5. MySQL学习——数据类型

    MySQL学习——数据类型 摘要:本文主要学习了MySQL数据库的数据类型. 整数类型 MySQL主要提供的整数类型有tinyint.smallint.mediumint.int.bigint,其属性 ...

  6. git clone和git pull的区别

    1.需不需要本地文件夹是仓库 git clone是将整个工程复制下来所以,不需要本地是仓库(没有.git文件夹)   git clone git pull需要先初始化本地文件夹文一个仓库   git ...

  7. python中time、datetime模块的使用

    目录 python中time.datetime模块的使用 1.前言 2.time模块 1.时间格式转换图 2.常用方法 3.datetime模块 python中time.datetime模块的使用 1 ...

  8. CocoPods原理

    CocoaPods 的原理是将所有的依赖库都放到另一个名为Pods的项目中, 然而让住项目依赖Pods项目, 这样,源码管理工作任务从主项目移到了Pods项目中. 1.Pods项目最终会编译成一个名为 ...

  9. 透过systemctl管理mysqld服务

    1. 背景 CentOS 7.x 之前的版本,系统启动时,第一支呼叫的程序是 init ,然后 init 去唤起所有的系统所需要的服务,无论是本地服务还是网络服务.所有的服务启动脚本都放置于 /etc ...

  10. docker容器跨服务器的迁移的方法

    docker的备份方式有export和save两种. export是当前的状态,针对的是容器,docker save 是针对镜像images. export 找出要备份容器的ID ? 1 2 3 [r ...