pywinauto 使用


Pywinauto是基於Python開發的,用於自動化測試的腳本模塊,主要操作於Windows標准圖形界面。它可以允許你很容易的發送鼠標、鍵盤動作給Windows的對話框和控件。 
其中,最主要功能為對windows標准控件的一系列動作可編程處理。包括對窗口的指定、鼠標或鍵盤操作、獲得控件屬性等等。程序的開始為對所需應用的啟 動或連接。獲得程序連接后,pywinauto通過窗口的名稱、類名、是否可見等屬性尋找匹配的窗口,進而通過類似方法尋找用戶所需的控件,並獲得相應的 句柄。之后,用戶可通過易理解的編程方式對指定控件進行相關操作的編程,包括鼠標點擊、鍵盤輸入、判斷控件間關系、獲取控件屬性等。

官方網站:https://pywinauto.readthedocs.io/en/latest/contents.html

 

pywinauto使用

首先,導入這個模塊

from pywinauto.application import Application
  • 1

(一) 判斷程序的backend

注意,首先需要判斷你要進行的程序是用什么語言寫的,在實例化的時候會有區別,主要是判斷backend是什么。 
這里寫圖片描述 
 
那么如何判斷程序的backend是’win32’還是’uia’呢?官方文檔中推薦使用spy++和inspect來檢查。有人專門整理了一下,放在github上了https://github.com/blackrosezy/gui-inspect-tool。 
spy++咱們之前講過。接下來將將如何使用inspect來判斷backend的類別。

Switch Inspect.exe into UIA mode (using MS UI Automation). If it can show more controls and their properties than Spy++, probably the "uia" backend is your choice.
  • 1

將inspect左上角的下拉列表中切換到“UI Automation”,然后鼠標點一下你需要測試的程序窗體,inspect就會顯示相關信息。 
下圖為點擊window文件夾的結果,inspect中顯示了相關的信息,如下圖所示。說明backend為uia。 
這里寫圖片描述

再來看點擊 屏幕錄像專家程序的結果 
這里寫圖片描述
inspect中顯示拒絕訪問,說明屏幕錄像專家程序的backend應該是win32。

(二)確定自動化入口點

這里主要是限制自動化控制進程的范圍。如一個程序有多個實例,自動化控制一個實例,而保證其他實例(進程)不受影響。 
主要有兩種對象可以建立這種入口點——Application() , Desktop(). 
Application的作用范圍是一個進程,如一般的桌面應用程序都為此類。 
Desktop的作用范圍可以跨進程。主要用於像win10的計算器這樣包含多個進程的程序。這種目前比較少見。使用方法見entry-points-for-automation

(三)連接到進程

建立好入口后,我們需要連接到進程中。這里有兩種方法: 
- 重新開啟一個進程。使用Application對象的start()方法

start(self, cmd_line, timeout=app_start_timeout)  # instance method:
  • 1

這里的cmd_line參數就是你使用命令行啟動程序的命令語句。所以可以很方便的實現帶輸入參數的程序啟動。 
啟動屏幕錄像專家,可以使用如下代碼:

app = Application().start(r"D:\Program Files (x86)\tlxsoft\屏幕錄像專家 共享版 V2017\屏錄專家.exe")
  • 1
  • 連接到已有的進程。使用Application對象的connect()方法。這個方法對已有進程的綁定非常靈活。 
    1.使用進程ID (PID)進行綁定。
app = Application().connect(process=19188)
  • 1

進程的PID可以在任務管理器中查看。 
這里寫圖片描述

2.使用窗口句柄綁定

app = Application().connect(handle=0x00230DB6)
  • 1

窗口句柄可以在Spy++中查看 
這里寫圖片描述

3.使用程序路徑綁定

app = Application().connect(path=r"D:\Program Files (x86)\tlxsoft\屏幕錄像專家 共享版 V2017\屏錄專家.exe")

4.使用標題、類型等匹配

app = Application().connect(title_re="屏幕錄像專家.*", class_name="TMainForm")

第1、2種方法通用性不強,每次運行ID和窗口句柄都可能不一樣。第3種方法最直接簡單(j建議使用),而第4種方法靈活性最強。

(四) 選擇菜單項

個人感覺pywinauto最方便的地方之一就是能夠很輕易的操作菜單,而且對於多級菜單毫無壓力。 
這里寫圖片描述

下面介紹兩種方法來操作它: 
- 使用menu_select()函數進行選擇 
要從屏幕錄像專家程序的菜單選中轉換工具->EXE/LXE轉成MP4。只需要在python中加入如下語句:

dlg_spec = app.window(title='屏幕錄像專家 V2017')
dlg_spec.menu_select(r"轉換工具->EXE/LXE轉成MP4")
  • 使用快捷鍵進行選擇 
    可以看到,菜單的每個選項都對應着快捷鍵,可以使用組合的快捷鍵直接訪問我們需要的選項。 
    使用type_keys()函數,這里需要的快捷鍵是Alt+T+P:
dlg_spec = app.window(title='屏幕錄像專家 V2017')
dlg_spec.type_keys('%TP')

對於一些特殊符號的快捷鍵,對應的碼表如下:

SHIFT                            +      
CTRL                             ^      
ALT                               %
空格鍵                            {SPACE}

BACKSPACE                        {BACKSPACE}、{BS}   or   {BKSP}      
BREAK                            {BREAK}      
CAPS   LOCK                      {CAPSLOCK}      
DEL   or   DELETE                {DELETE}   or   {DEL}      
DOWN   ARROW                     {DOWN}      
END                              {END}      
ENTER                            {ENTER}   or   ~      
ESC                              {ESC}      
HELP                             {HELP}      
HOME                             {HOME}      
INS   or   INSERT                {INSERT}   or   {INS}      
LEFT   ARROW                     {LEFT}      
NUM   LOCK                       {NUMLOCK}      
PAGE   DOWN                      {PGDN}      
PAGE   UP                        {PGUP}      
PRINT   SCREEN                   {PRTSC}      
RIGHT   ARROW                    {RIGHT}      
SCROLL   LOCK                    {SCROLLLOCK}      
TAB                              {TAB}      
UP   ARROW                       {UP}     
+                                {ADD}      
-                                {SUBTRACT}      
*                                {MULTIPLY}      
/                                {DIVIDE}
F1                               {F1} 
F2                               {F2} 
F3                               {F3} 
.....
F15                             {F15} 
F16                             {F16} 
  • 束后,EXE轉MP4的插件窗口就彈出來了。

from:https://blog.csdn.net/shawpan/article/details/78170117


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM