一、环境安装

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. Ajax和跨域请求

    Ajax 一.概述 Web 程序最初的目的就是将信息(数据)放到公共的服务器,让所有网络用户都可以通过浏览器访问. 在次之前,我们可以通过以下几种方式让浏览器发出对服务端的请求,获取服务端的数据: 地 ...

  2. vue-render渲染

    在页面中基本的渲染页面 这里的p标签会显示 <div id="app"> <p>33333</p> <login></logi ...

  3. Python【day 17】面向对象-成员

    类的变量分成2种: 1.成员变量 概念:在构造方法中的变量,前面带有self 作用:可以在类中不同的方法间使用 2.类变量-静态变量 概念:在类中,构造方法和普通方法之外,定义的变量 作用: 1.调用 ...

  4. PHP mysqli_rollback MySQLi 函数

    定义和用法 mysqli_rollback - 回退当前事务 语法: mysqli_rollback ( mysqli $link ) 参数 参数 必需的 描述 link 是 由mysqli_conn ...

  5. Unity API学习笔记(1)

    首先创建测试项目: 这里我选择了2D,其实都可以,之后可以在项目中修改. 修改方法: 进入正题. 首先看一下官方提供的>手册和>脚本API文档. 创建C#脚本文件并打开: 默认的脚本文件为 ...

  6. 从高版本的 SQL Server 向低版本的 SQL Server 转移数据

    1.在源数据库上右键任务,选择生成脚本- 2.在生成脚本的高级选项中,根据数据库的内容,选择相应的选项,主要是红框圈出的部分,最后选择仅架构(若数据库的数据量不大,可以直接导出 架构和数据,在新数据库 ...

  7. 3.JavaCC 语法描述文件的格式解析

      JavaCC的语法描述文件格式如下所示: options { JavaCC的选项 } PARSER_BEGIN(解析器类名) package 包名; import 库名; public class ...

  8. Hive性能调优(二)----数据倾斜

    Hive在分布式运行的时候最害怕的是数据倾斜,这是由于分布式系统的特性决定的,因为分布式系统之所以很快是由于作业平均分配给了不同的节点,不同节点同心协力,从而达到更快处理完作业的目的. Hive中数据 ...

  9. BayaiM__SQLLDR_linux_shell高级版

    BayaiM__SQLLDR_linux_shell高级版   备注:1.因公司在职,商业机密,顾IP地方加了"*"号,你可以任意写一个数字做IP做就好.2.不要瞎BB,哥自己写的 ...

  10. MySQL执行SQL脚本问题 :错误代码2006、1153

    今天用mysql执行了一个60M的SQL脚本遇到了一些错误,经由网上查询如下: 1.#2006 - MySQL server has gone away 出现该错误代码原因如下: 1.应用程序长时间的 ...