python基於pywinauto實現PC客戶端自動化


一、前言

我們檸檬班的小可愛,在學完我們檸檬班自動化的課程之后,就掌握了接口自動化,web自動化,app自動化,這些工作中常用的自動化技能,在工作足以夠應對90%以上的自動化需求了。不過近期也有部分小可愛在問PC端自動化怎么去做?對這個技術比較好奇,使用python可以不可以實現PC客戶端自動化測試?答案當然是可以的,所以今天在這邊專門整理了一遍文章,和大家一起聊聊如何使用python做PC端自動化!

二、環境安裝

使用python實現來做PC端自動化,前提是先安裝好python,那么還需要用到一個第三方庫:pywinauto,在這邊我們首先需要安裝好這個庫,安裝命令如下:

pip install pywinauto

三、使用說明

安裝好了之后,關於使用說明大家可以參照官方文檔上的說明,如下圖:

上述內容翻譯如下:

就是說在我們安裝好Pywinauto之后,首先要確定哪種可訪問性技術(pywinauto的backend)可以用於我們的應用程序,在windows上受支持的輔助功能技術有兩種:

  • Win32 API (backend="win32") 默認backend

  • MS UI Automation (backend="uia")

如果您不能確定程序到底適用於那種backend,可以借助於GUI對象檢查工具來做,常用的檢查工具有Inspect.exSpy++ 等,這個不做過多介紹,大家自行學習和下載,使用很簡單,也非常便捷。

四、快速入門

在安裝好環境之后,並且確定了應用程序適用的backend,那么接下來我們就可以使用Pywinauto這個模塊來對應用程序進行自動化操作了

1、連接到應用程序

這邊以window自帶的計算器程序作為案例,給大家做講解

連接應用程序,首先需要用到pywinauto.application.Application()來創建一個應用程序對象,然后再連接到應用程序,有如下兩種方法:

  • 方式一:直接通過start方法打開操作的應用程序,

from pywinauto import application
# 方式一:創建應用程序時可以,指定應用程序的合適的backend,start方法中指定啟動的應用程序
app = application.Application(backend='uia').start('notepad.exe')

 

  • 方式二:連接已經打開應用程序,可以通過connect連接到指定的應用程序

from pywinauto import application
# 方式二:查看要打開的程序進程號,通過process指定進程號連接
app = application.Application().connect(process=19035)

 

運行以上代碼,就會自動打開記事本記事本,如下

2、窗口選擇

打開這個窗口之后,我們要操作該窗口的話,那么就的先選中這個窗口,關於窗口的選擇有一下幾種方式

# 方式一 :不適用於窗口名為中文的
wind_1 = app.窗口名  
​
# 方式二 :窗口名可以為中文 
wind_2 = app["窗口名"]
​
# 案例使用:選擇上面打開的計算器程序窗口
wind_calc = app['無標題 - 記事本']

 

3、控件操作

程序窗口中的內容,把它稱之為控件,我們要對這個窗口的內容進行操作,就需要選擇到對應的控件,

  • 獲取所有控件

我們可以通過print_control_identifiers()這個方法,來獲取這個窗口下的直接子控件,如下:

app['無標題 - 記事本'].print_control_identifiers()

 

打印出來的結果如下:

上面打印出來的內容分別對應窗口種的以一下部分:

  • 選擇控件

關於控件選擇的方法有好幾種,最簡單的方法如下:

# 選擇控件的方法
wind_calc = app["窗口名"]["控件名"]
# 案例操作:選擇編輯窗口
edit = app['無標題 - 記事本']['Edit']
​

 

  • 內容輸入

在上面選擇到編輯窗口之后,我們就可以進行內容輸入了,

內容輸入的方法:type_key()

# 在編輯欄種輸入內容
edit.type_keys("檸檬班")
edit.type_keys("python自動化")
edit.type_keys("musen")

 

運行結果如下:

4、鍵盤操作

輸入完上述內容之后,接下來我們要修改編輯框中的內容,

通過鍵盤完成以下操作:全選(ctrl+A) 復制(ctrl+C) 粘貼(ctrl+V)

  • pywinauto.keyboard.send_key

    pywinauto模擬操作鍵盤,需要使用到 pywinauto.keyboard.send_keys這個方法

    # 導入模塊
    from pywinauto.keyboard import send_keys
    ​
    # 全選(ctrl+A)   
    send_keys("^a")
    ​
    # 復制(ctrl+C) 
    send_keys("^c")
    ​
    # 粘貼(ctrl+V)
    send_keys("^v")
    ​
    # 回車鍵
    send_keys("{VK_RETURN}")
    ​
    # 粘貼(ctrl+V)
    send_keys("^v")
    ​ 
  • 常見的按鍵操作
    • 字母按鍵用按鍵小寫字母表示
    • 常用的一些按鍵
      ESC鍵:VK_ESCAPE 
      回車鍵:VK_RETURN 
      TAB鍵:VK_TAB 
      Shift鍵:VK_SHIFT 
      Ctrl鍵:VK_CONTROL
      Alt鍵:VK_MENU
    • 按鍵修飾符
    • # 對於一些常用的按鍵,可以通過修飾符來表示,使用的時候比較方便
      '+': {VK_SHIFT}
      '^': {VK_CONTROL}
      '%': {VK_MENU} Alt鍵
          
      # 上面:全選(ctrl+A)   復制(ctrl+C)   粘貼(ctrl+V)就使用的是修飾符^來代表ctrl
    • 更多的鍵盤操作大家可以參考官網文檔

5、鼠標操作

  • pywinauto. mouse

    pywinauto操作鼠標,需要導入mouse模塊,mouse模塊中設置了一系列的鼠標操作事件

    • 鼠標移動:move方法
      • move(coords=(x軸坐標,y軸坐標))

      • 緩慢移動鼠標案例

      for i in range(10):
           x = 10 * i
           y = 10 * i
           time.sleep(0.5)
           # 移動鼠標
           mouse.move(coords=(x, y))
    • 鼠標點擊:click
      # button指定左擊還是右擊,coords指定鼠標點擊的位置
      # 3.1、鼠標單擊
      # 指定位置,鼠標左擊
      mouse.click(button='left', coords=(40, 40))
      # 指定位置  鼠標右擊
      # mouse.click(button='right', coords=(100, 200))
      # 3.2 鼠標雙擊
      mouse.double_click(button='left', coords=(140, 40))
      ​
      ​
      # 4 按下鼠標:press
      # 將屬性移動到(140,40)坐標處按下
      mouse.press(button='left', coords=(140, 40))
      ​
      # 5 釋放鼠標:repleace
      # 將鼠標移動到(300,40)坐標處釋放,
      mouse.release(button='left', coords=(300, 40))
      ​
      # 6、右鍵單擊指定坐標
      mouse.right_click(coords=(400, 400))
      ​
      # 7、鼠標中鍵單擊指定坐標(很少用的到)
      mouse.wheel_click(coords=(400, 400))
      ​
      # 8 滾動鼠標
      # coords:指定鼠標的坐標位置。
      # wheel_dist指定鼠標滾輪滑動的次數,正數往上,負數往下。
      mouse.scroll(coords=(1200,300),wheel_dist=-3)

五、說明

關於pywinauto模塊的基本使用就該大家介紹到這里了,對pc端自動化感興趣的同學可以往這個方向去深入學習。

ps:關於pc端自動化的視頻教程可以私聊獲取

 


免責聲明!

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



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