今天整理自己的博客,發(fā)現(xiàn)已經(jīng)快一年沒(méi)有更新了,汗。
今天給大家介紹的是 pywinauto ,它是用 python 語(yǔ)言編寫的開源測(cè)試工具,專用于測(cè)試 win32 應(yīng)用,其 官網(wǎng)網(wǎng)址是: http://pypi.python.org/pypi/pywinauto/0.4.0
我之前做 win32 應(yīng)用測(cè)試時(shí),用過(guò)很多大家耳熟成詳?shù)墓ぞ撸佑| pywinauto 之前,對(duì)它的了解也不多,然而,隨著對(duì)它了解的增多,發(fā)現(xiàn)它借助了 python 動(dòng)態(tài)對(duì)象的能力,使得代碼即便于書定,也便于閱讀,而且功能非常強(qiáng)大,最重要的一點(diǎn),就是它以一種比較優(yōu)雅的方式對(duì) win32 窗體、控件進(jìn)行各種操作,不再使用以往錄制 - 修改代碼的方式。
例如以下的例子 ( 以下代碼均在英文操作系統(tǒng)上測(cè)試通過(guò) :
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行代碼,便可以執(zhí)行注釋中的各項(xiàng)操作。其最大的亮點(diǎn)出自第三行開始,其變量 Notepad 沒(méi)有定義和聲明,拿來(lái)就可以用,同樣,第四行的 AboutNotepad 以及它后面的 OK 都是這樣被調(diào)用。
如果在英文操作系統(tǒng)下,運(yùn)行以上代碼,可以清楚的看到軟件工作的全部過(guò)程。
看到這里,大家會(huì)問(wèn),上面說(shuō)的這些變量是怎么來(lái)的?為什么就可以被調(diào)用呢?
這就是 pywinauto 的特色,它先通過(guò) app 獲得某應(yīng)用程序的句柄,然后用“模糊匹配”的方式去查找對(duì)應(yīng)的窗口和控件,以上的例子中,由于寫字板的標(biāo)題是 Untitled? –?Notepad ,所以便可以用標(biāo)題里的一部分,也就是 Notepad 去訪問(wèn)它,同樣,用 Untitled 也可以。
同時(shí),在寫字板的“關(guān)于”窗口中,那個(gè)關(guān)閉按鈕的標(biāo)題是“ OK ”,所以便可以用 OK 去調(diào)用它。
講了這么多,現(xiàn)在具體介紹 pywinauto 的安裝和使用
?
1 安裝
1.1 安裝 python
安裝 pywinauto 有兩個(gè)要求:
1 :? python 的版本不得高于 2.6
2 :使用 python 的 32 位版本
因此,建議大家去 python 官網(wǎng)下載其 32 位的 python2.6 并進(jìn)行安裝。
1.2 安裝依賴庫(kù)
Pywinauto 有兩個(gè)依賴庫(kù),即
SendKeys-ctypes
SendKeys
可以去其對(duì)應(yīng)網(wǎng)站下載、安裝,也可以從本文的附件中下載,稍后會(huì)加上該附件。
說(shuō)明,以上兩個(gè)庫(kù)以下pywinauto 都有 setup.py 程序,用戶可以在 DOS 命令下,運(yùn)行 python?setup.py?install 進(jìn)行 安裝,安裝成功后,這些庫(kù)會(huì)出現(xiàn)在python 的安裝目錄的 Lib\ site-packages下。
1.3? 安裝 pywinauto
只要 python 符合安裝要求(前面說(shuō)的 32 位,低于 2.7 ),且安裝依賴庫(kù), pywinauto 的安裝非常容易,此處略過(guò)。
2? python 的開發(fā)環(huán)境(可選)
我使用 Eclipse+PyDev 插件進(jìn)行 python 的開發(fā)。
具體的配置方法是
1:? 下載 PyDev
2:? 解壓,將解壓后的兩個(gè)文件夾 features、plugins拷貝到Eclipse 的 dropins目錄下
3 :?jiǎn)?dòng) Eclipse ,點(diǎn)擊菜單 windows->Preferences,彈出的窗口左側(cè)應(yīng)該出現(xiàn)PyDev 節(jié)點(diǎn)
4 :點(diǎn)擊 PyDev 下的 Interpreter-Python ,點(diǎn)擊 New 按鈕,找到 Python.exe 的安裝路徑,然后點(diǎn)擊兩次確定按鈕即可。
5 :此時(shí)可以新建 Python 工程、模塊,可以在 Eclipse 進(jìn)行 Python 的開發(fā)和調(diào)試。
3 Pywinauto 使用
3.1? 關(guān)聯(lián)到一個(gè)應(yīng)用,用以下方法:
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? 調(diào)用一個(gè)窗體
當(dāng)初始化 app 后,可以通過(guò)模糊匹配的方式操作該 app 中的一個(gè)窗體,變量名可以是該窗體標(biāo)題的部分或全部
dlg = app.window_(title_re =
"
.*Part of Title.*
"
)
dlg
= app.PartOfTitle
例如,對(duì)一個(gè)寫字板app 應(yīng)用中的窗口,在英文操作系統(tǒng)中,其標(biāo)題是 “ untitled?-?Notepad ”
可以使用以下兩種方式調(diào)用該窗體
app.Untitled
app.Notepad
對(duì)于關(guān)于窗口,其標(biāo)題是“ About?Notepad ”
可以使用以下名稱調(diào)用該窗體
app.AboutNotepad
3.3?調(diào)用一個(gè)控件
Pywinauto 使用以下順序定位一個(gè)控件
1:? 控件的標(biāo)題,即 title
2 :控件的類名,即 friendly?class
3 :控件的標(biāo)題加類名,即 title?+?friendly?class
對(duì)于“關(guān)于”窗口的中按鈕,可以使用以下任意一種方式調(diào)用
app.AboutNotepad.OK
app.AboutNotepad.Button1
app.AboutNotepad.OKButton
如果在寫字板中輸入文字,執(zhí)行退出時(shí)會(huì)?彈出詢問(wèn)窗口,對(duì)于其中的“不保存按鈕”,其英文標(biāo)題是 Don ’t?Save ,按照上面的規(guī)律,可以使用以下任意一方式調(diào)用該按鈕,即
app.Notepad.DontSave
app.Notepad.DoSave
app.Notepad.DotSave
以上無(wú)論DontSave 、 DoSave 、 DotSave 都是標(biāo)題 Dont ’?Save 的一部分, pywinauto 都可以通過(guò)模糊匹配的方式找到該按鈕。
3.4? 控件的基本操作
如下:
Control.Click() #點(diǎn)擊
Control.MenuSelect() #菜單選擇
Control.PressMouse/MoveMouse/ReleaseMouse() #按、移動(dòng)、釋放鼠標(biāo)
Control.TypeKeys() #鍵入字符
其中 TypeKeys() 支持組合鍵,例如
Ctrl:?^
Alt:?%
Shift:?+
以下是其常見(jiàn)屬性的讀取 :
ControlID()
FriendlyClassName()
WindowText()
Rectangle()
IsEnabled()
IsVisible()
如果想了解詳細(xì),可以查看 pywinauto 的官方文檔,其鏈接是
http://pywinauto.googlecode.com/hg/pywinauto/docs/controls_overview.html ?
在該網(wǎng)頁(yè)里,最上方是所有控件的基本操作和屬性讀取,下面依次是每個(gè)控件獨(dú)有的操作,在實(shí)際的編程中,如果想知道某個(gè)控件的某個(gè)操作,可以通過(guò)文檔查詢。
?
4? 其它說(shuō)明
4.1? 和 PyUnit 集成
只要代碼書寫符合 PyUnit 的要求,可以很容易的讓 pywinauto 所測(cè)試的 win32 應(yīng)用和 PyUnit 集成。
4.2? 和 Selenium 集成 ?
Selenium 支持 Python 語(yǔ)言,因此,很容易讓 pywinauto 與 selenium 。
在一些測(cè)試場(chǎng)景中,需要運(yùn)行完某個(gè) win32 應(yīng)用后,立刻在 web 應(yīng)用程序中查看結(jié)果,也就是說(shuō),一個(gè)測(cè)試同時(shí)要面對(duì) win32 和 web 兩種應(yīng)用,可以用 python+pywinauto+selenium 組合的方式實(shí)現(xiàn)。
4.3? 代碼結(jié)構(gòu)
有興趣的網(wǎng)友,還可以閱讀其源代碼,主要的幾個(gè)程序是
Application.py:與app相關(guān)
Findwindows.py:窗體的查找
Timings.py:各種操作的時(shí)間間隔設(shè)置
win32_controls.py:普通控件的訪問(wèn)
common_controls.py:TreeView/ListView...等控件的訪問(wèn)
Menuwrapper.py:菜單的訪問(wèn)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

