pywinauto處理UI自動化


之前一個項目的特殊性, 以及一些操作權限上的問題,不能使用現有工具進行UI自動化。 在一些資深tester建議下決定采用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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM