pywinauto處理UI自動化
Python的pywinauto模塊來處理Windows控件的UI操作。
1. 首先搭建pywinauto環境。
1). 可以參考vncdotool - A command line VNC client 安裝python2.7.5, Twisted 和PIL。
2). 安裝elementtree(elementtree-1.2.7-20070827-preview.win32.exe) 和ctypes(ctypes-1.0.2.win32-py2.5-AMD64.msi)。
3). 安裝已經下載好的pywinauto(pywinauto-0.4.2)
> cd to xxx:\pywinauto-0.4.2
> python setup.py install
目前最新的版本已經是0.5.1了。 可以參考:https://pypi.python.org/pypi/pywinauto
4). 測試下是否安裝成功
> from pywinauto import application
> app = application.Application().start_("notepad")
> app.notepad.TypeKeys("%FX")
這段代碼可以打開notepad‘並將notepad通過使用用快捷鍵關閉。
2. 首先還需要一個工具: Swapy-ob 來獲取控件屬性
Swapy-ob 是一個可以獲得控件原生的 Python 代碼的工具。
3. 一些控件的基本操作
TreeView
Click()
Select()
ListView
Check()
UnCheck()
Select()
Note: ListView sometimes supports not good, especially do the action from lead to test machine.
Button
Click()
PressButton()
Edit
SetEditText()
SetText()
Window
Wait()
WaitNot()
Listbox / Combobox
Select()
Checkbox / Radio button
Check()
UnCheck()
MenuItem
MenuItem.Select()
MenuItem.Click()
Others
Close()
DoubleClick()
For more info: http://pywinauto.googlecode.com/hg/pywinauto/docs/controls_overview.html#all-controls
4.關聯一個instance
start_() – The application is not running and need to start it
connect_() – The application is already running.
For example:
app = Application()
app.start_(“c:\windows\system32\notepad.exe”)
app.connect_(title_re = ".*Notepad", class_name ="Notepad")
5. 調用一個窗口
a_window = app.window_(title = "Page Setup", class_name = "#32770")
也可以用handle方式來處理:
w_handle = pywinauto.findwindows.find_windows(title=u‘Active Directory Users and Computers‘, class_name=‘MMCMainFrame‘)[0]
aduc_window = pwa_app.window_(handle=w_handle)
aduc_window.print_control_identifiers() //打印當前窗口的所有控件和屬性。
6. TypeKeys()快捷鍵
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}
7. Example for create AD user
pwa_aduc.window_(title=u‘New Object - User‘, class_name=‘#32770‘).Wait(‘exists‘, timeout=30, retry_interval=1)
u_window = pwa_aduc.window_(title=u‘New Object - User‘, class_name=‘#32770‘)
u_window[‘First name:Edit‘].Wait(‘enable‘, timeout=30, retry_interval=1)
u_window[‘First name:Edit‘].TypeKeys(User)
u_window[‘User logon name:Edit0‘].TypeKeys(User)
u_window[‘Next‘].Wait(‘enable‘, timeout=30, retry_interval=1)
u_window[‘Next‘].Click(button=‘left‘, double=False)
u_window[‘Password:Edit‘].Wait(‘exists‘, timeout=30, retry_interval=1)
u_window[‘Password:Edit‘].TypeKeys(Password)
u_window[‘Confirm password:Edit‘].TypeKeys(Password)
u_window[‘User must change password at next logon‘].UnCheck()
u_window[‘Next‘].Wait(‘enable‘, timeout=30, retry_interval=1)
u_window[‘Next‘].Click(button=‘left‘, double=False)
u_window[‘Finish‘].Click(button=‘left‘, double=False)
8. 當然因為Selenium 支持 Python, 所以可以用python+pywinauto+selenium組合的方式實現Windows和Web UI的處理。
Helpful link:
http://pywinauto.github.io/
http://pywinauto.googlecode.com/hg/pywinauto/docs/contents.html
https://code.google.com/p/swapy/
pywinauto處理UI自動化