自動化工具pywinauto初接觸

大家經常有一些重複操作電腦的動作,例如對某軟件進行測試的時候,而完全藉助人工操作會比較費時費力,實際上大家可以藉助一些自動化測試軟件進行自動操作。而軟件自動化測試工具形形色色,諸如KylinTop、UFT、SilkTest等商業軟件,也有Selenium、UIAutomation、Robot Framework以及pywinauto等開源工具。這些軟件各有優劣,讀者不可能也完全沒有必要去了解並學習所有的測試工具,可以自行查找資料進行比對,選擇適合自己需求的軟件進行開發定製。在瞭解主流工具的基礎上,選擇一款用起來得心應手的工具軟件進行詳細瞭解和使用即可,所謂熟能生巧,用得多了自然也就越來越熟練了。

本文先以pywinauto爲例進行簡單介紹,也可以參考此處官方文檔(https://pywinauto.readthedocs.io/en/latest/contents.html)進行詳細瞭解,也可以在http://pywinauto.github.io/ 瞭解更多信息。

Pywinauto模塊安裝:pip install pywinauto,其中pip也可以根據實際情況換爲pip2或pip3。

針對記事本的簡單操作:

from pywinauto.application import  Application
app=Application().start('notepad.exe')
app.無標題記事本.print_control_identifiers()
app.UntitledNotepad.menu_select('幫助(&H)->關於記事本(&A)')
app.關於記事本.print_control_identifiers()
app.關於記事本.確定.click()
# app.AboutNotepad.type_keys("{DOWN}")
# # app.UntitledNotepad.確定.click()
app.UntitledNotepad.Edit.type_keys("pywinauto works!\n\r",with_spaces=True)
app.UntitledNotepad.type_keys("{ENTER}")
app.UntitledNotepad.type_keys("%FS")
app.另存爲.print_control_identifiers()
app.另存爲.Edit1.type_keys("test.txt{ENTER}",with_spaces=True)
app.另存爲.保存.click()

可能有很多網友直接複製粘貼上面的程序代碼並運行時會報錯,實際上這與所使用的操作系統配置有關,如果打開記事本之後顯示的不是中文字符,而是英文甚至其他語言,那麼本程序自然無法正確運行。例如官方的例子:

from pywinauto.application import Application
# Run a target application
app = Application().start("notepad.exe")
# Select a menu item
app.UntitledNotepad.menu_select("Help->About Notepad")
# Click on a button
app.AboutNotepad.OK.click()
# Type a text string
app.UntitledNotepad.Edit.type_keys("pywinauto Works!", with_spaces = True)

顯然是操作系統語言設置不同,導致記事本notepad.exe的顯示文字不同。

要做到自動化,需要能夠選定定位到要操作的元素。目前相關的定位元素攻擊包括:spy++(win32),Inspect(uia),UI Spy等,當然在http://pywinauto.github.io/ 可以看到包括了Swapy,可以簡單生成pywinauto代碼。但是從網站信息來看,目前該軟件已經不再被維護,將由py_inspect代替。但是目前查詢py_inspect的相關資料很少,僅僅在https://github.com/dm-vodopyanov/py_inspect找到一個同名的。而且核心內容只有一個py文件。不知道是否是官方計劃取代swapy的版本。感興趣的讀者,建議使用inspect軟件,筆者提供該軟件的一個百度網盤,敬請在本文末尾尋找下載鏈接。

關於定位元素工具的使用,本文不再展開,讀者可以自行搜索,或者參考這篇大作:https://cloud.tencent.com/developer/article/1515369

總而言之,利用pywinauto可以做很多重複性的工作,讓用戶從重複動作中解放出來。筆者就使用pywinauto實現了微信自動發送指定消息內容給某個特定微信好友,有意歡迎聯繫討論。

更多技術文章,歡迎關注筆者公衆號:datatop1,或者掃描二維碼:

附件:定位元素工具包:https://download.csdn.net/download/booklijian/12354110  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章