3 Pywinauto使用
連接為
http://pywinauto.github.io/
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
|
以上無論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:菜單的訪問