轉 《pywinauto進行win32應用程式的測試》

來源:互聯網
上載者:User

標籤:

http://www.cnblogs.com/gannan/archive/2013/01/08/2851825.html

 

今天整理自己的部落格,發現已經快一年沒有更新了,汗。

今天給大家介紹的是pywinauto,它是用python語言編寫的開源測試載入器,專用於測試win32應用,其官網網址是:http://pypi.python.org/pypi/pywinauto/0.4.0

我之前做win32應用測試時,用過很多大家耳熟成詳的工具,接觸pywinauto之前,對它的瞭解也不多,然而,隨著對它瞭解的增多,發現它藉助了python動態對象的能力,使得代碼即便於書定,也便於閱讀,而且功能非常強大,最重要的一點,就是它以一種比較優雅的方式對win32表單、控制項進行各種操作,不再使用以往錄製-修改代碼的方式。

例如以下的例子(以下代碼均在英文作業系統上測試通過:

?
12345 from pywinauto import applicationapp = application.Application.start("notepad.exe")app.Notepad.MenuSelect("Help->About Notepad")app.AboutNotepad.OK.Click()    app.Notepad.MenuSelect("File->Exit")    

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

如果在英文作業系統下,運行以上代碼,可以清楚的看到軟體工作的全部過程。

看到這裡,大家會問,上面說的這些變數是怎麼來的?為什麼就可以被調用呢?

這就是pywinauto的特色,它先通過app獲得某應用程式的控制代碼,然後用“模糊比對”的方式去尋找對應的視窗和控制項,以上的例子中,由於寫字板的標題是Untitled – Notepad,所以便可以用標題裡的一部分,也就是Notepad去訪問它,同樣,用Untitled也可以。

同時,在寫字板的“關於”視窗中,那個關閉按鈕的標題是“OK”,所以便可以用OK去調用它。

講了這麼多,現在具體介紹pywinauto的安裝和使用

 

1 安裝

1.1安裝python

安裝pywinauto有兩個要求:

1: python的版本不得高於2.6

2:使用python的32位版本

因此,建議大家去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.Untitledapp.Notepad

對於關於視窗,其標題是“About Notepad”

可以使用以下名稱調用該表單

?
app.AboutNotepad

3.3 調用一個控制項

Pywinauto使用以下順序定位一個控制項

1: 控制項的標題,即title

2:控制項的類名,即friendly class

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

對於“關於”視窗的中按鈕,可以使用以下任意一種方式調用

?
app.AboutNotepad.OKapp.AboutNotepad.Button1app.AboutNotepad.OKButton

如果在寫字板中輸入文字,執行退出時會 彈出詢問視窗,對於其中的“不儲存按鈕”,其英文標題是Don’t Save,按照上面的規律,可以使用以下任意一方式調用該按鈕,即

?
app.Notepad.DontSave app.Notepad.DoSaveapp.Notepad.DotSave

以上無論DontSave、DoSave、DotSave都是標題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 其它說明

4.1 和PyUnit整合

只要代碼書寫符合PyUnit的要求,可以很容易的讓pywinauto所測試的win32應用和PyUnit整合。

4.2 和Selenium整合

Selenium支援Python語言,因此,很容易讓pywinauto與selenium。

在一些測試情境中,需要運行完某個win32應用後,立刻在web應用程式中查看結果,也就是說,一個測試同時要面對win32和web兩種應用,可以用python+pywinauto+selenium組合的方式實現。

4.3 代碼結構

有興趣的網友,還可以閱讀其原始碼,主要的幾個程式是

?
Application.py:與app相關   Findwindows.py:表單的尋找Timings.py:各種操作的時間間隔設定win32_controls.py:普通控制項的訪問common_controls.py:TreeView/ListView...等控制項的訪問Menuwrapper.py:菜單的訪問

轉 《pywinauto進行win32應用程式的測試》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.