一、環境安裝
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)
