pywinauto 使用

win32窗體、控件進行各類操做,再也不使用以往錄製-修改代碼的方式。html

例如如下的例子(如下代碼均在英文操做系統上測試經過python

1
2
3
4
5
from pywinauto import application
app = application.Application.start( "notepad.exe" )
app.Notepad.MenuSelect( "Help->About Notepad" )
app.AboutNotepad.OK.Click()    
app.Notepad.MenuSelect( "File->Exit" )    

在以上的例子中,總共只有5行代碼,即可以執行註釋中的各項操做。其最大的亮點出自第三行開始,其變量Notepad沒有定義和聲明,拿來就能夠用,一樣,第四行的AboutNotepad以及它後面的OK都是這樣被調用。web

若是在英文操做系統下,運行以上代碼,能夠清楚的看到軟件工做的所有過程。編程

看到這裏,你們會問,上面說的這些變量是怎麼來的?爲何就能夠被調用呢?windows

這就是pywinauto的特點,它先經過app得到某應用程序的句柄,而後用「模糊匹配」的方式去查找對應的窗口和控件,以上的例子中,因爲寫字板的標題是Untitled – Notepad,因此即可以用標題裏的一部分,也就是Notepad去訪問它,一樣,用Untitled也能夠。app

同時,在寫字板的「關於」窗口中,那個關閉按鈕的標題是「OK」,因此即可以用OK去調用它。測試

講了這麼多,如今具體介紹pywinauto的安裝和使用網站

 

1 安裝google

1.1安裝pythonspa

安裝pywinauto有兩個要求:

1: python的版本不得高於2.6

2:使用python32位版本

所以,建議你們去python官網下載其32位的python2.6並進行安裝。

1.2安裝依賴庫

Pywinauto有兩個依賴庫,即

SendKeys-ctypes

SendKeys

能夠去其對應網站下載、安裝,也能夠從本文的附件中下載,稍後會加上該附件。

說明,以上兩個庫如下pywinauto都有setup.py程序,用戶能夠在DOS命令下,運行python setup.py install進行安裝,安裝成功後,這些庫會出如今python的安裝目錄的Lib\site-packages下。

1.3 安裝pywinauto

只要python符合安裝要求(前面說的32位,低於2.7),且安裝依賴庫,pywinauto的安裝很是容易,此處略過。

python的開發環境(可選)

我使用Eclipse+PyDev插件進行python的開發。

具體的配置方法是

1: 下載PyDev

2: 解壓,將解壓後的兩個文件夾features、plugins拷貝到Eclipse的dropins目錄下

3:啓動Eclipse,點擊菜單windows->Preferences,彈出的窗口左側應該出現PyDev節點

4:點擊PyDev下的Interpreter-Python,點擊New按鈕,找到Python.exe的安裝路徑,而後點擊兩次肯定按鈕便可。

5:此時能夠新建Python工程、模塊,能夠在Eclipse進行Python的開發和調試。

3 Pywinauto使用

3.1 關聯到一個應用,用如下方法:

start_(path)
connect_(handle or processID)

如下是示例代碼 

app = Application()
app.start_(「notepad.exe」)
app.connect_(path = r"c:\windows\system32\notepad.exe") app.connect_(process = 2341) app.connect_(handle = 0x010f0c)

3.2 調用一個窗體

當初始化app後,能夠經過模糊匹配的方式操做該app中的一個窗體,變量名能夠是該窗體標題的部分或所有

dlg = app.window_(title_re = ".*Part of Title.*") dlg = app.PartOfTitle

例如,對一個寫字板app應用中的窗口,在英文操做系統中,其標題是「untitled - Notepad

能夠使用如下兩種方式調用該窗體

app.Untitled
app.Notepad

對於關於窗口,其標題是「About Notepad

能夠使用如下名稱調用該窗體

app.AboutNotepad

3.3 調用一個控件

Pywinauto使用如下順序定位一個控件

1: 控件的標題,即title

2:控件的類名,即friendly class

3:控件的標題加類名,即title + friendly class

對於「關於」窗口的中按鈕,能夠使用如下任意一種方式調用

app.AboutNotepad.OK
app.AboutNotepad.Button1
app.AboutNotepad.OKButton

若是在寫字板中輸入文字,執行退出時會 彈出詢問窗口,對於其中的「不保存按鈕」,其英文標題是Don’t Save,按照上面的規律,能夠使用如下任意一方式調用該按鈕,即

app.Notepad.DontSave 
app.Notepad.DoSave
app.Notepad.DotSave

以上不管DontSaveDoSaveDotSave都是標題Dont’ Save的一部分,pywinauto均可以經過模糊匹配的方式找到該按鈕。

3.4 控件的基本操做

以下:

Control.Click() #點擊
Control.MenuSelect() #菜單選擇
Control.PressMouse / MoveMouse / ReleaseMouse() #按、移動、釋放鼠標
Control.TypeKeys() #鍵入字符

其中TypeKeys()支持組合鍵,例如

Ctrl: ^

Alt: %

Shift: +

如下是其常見屬性的讀取:

ControlID()
FriendlyClassName()
WindowText()
Rectangle()
IsEnabled()
IsVisible()

若是想了解詳細,能夠查看pywinauto的官方文檔,其連接是

http://pywinauto.googlecode.com/hg/pywinauto/docs/controls_overview.html 

在該網頁裏,最上方是全部控件的基本操做和屬性讀取,下面依次是每一個控件獨有的操做,在實際的編程中,若是想知道某個控件的某個操做,能夠經過文檔查詢。

 

其它說明

4.1 PyUnit集成

只要代碼書寫符合PyUnit的要求,能夠很容易的讓pywinauto所測試的win32應用和PyUnit集成。

4.2 Selenium集成 

Selenium支持Python語言,所以,很容易讓pywinautoselenium

在一些測試場景中,須要運行完某個win32應用後,馬上在web應用程序中查看結果,也就是說,一個測試同時要面對win32web兩種應用,能夠用python+pywinauto+selenium組合的方式實現。

4.3 代碼結構

有興趣的網友,還能夠閱讀其源代碼,主要的幾個程序是

Application.py:與app相關   
Findwindows.py:窗體的查找
Timings.py:各類操做的時間間隔設置
win32_controls.py:普通控件的訪問
common_controls.py:TreeView / ListView...等控件的訪問
Menuwrapper.py:菜單的訪問
 
轉http://www.cnblogs.com/gannan/archive/2013/01/08/2851825.html
相關文章
相關標籤/搜索