桌面軟體/exe程式軟體自動化大寶劍--lackey之初識

快乐的平头哥發表於2024-08-28

  C/S架構端下的軟體在IT發展長河中,漸漸的在大多數從業者已經淡忘。現有的PC端上的軟體

也是在極力的前浪推後浪,更新替代一些老派的語言追尋潮流。

  網際網路的軟體開發就是IOT,HTTPclient ,鮮有 exe的桌面軟體;某也喜歡追新潮學網際網路技

術,自動化就接觸APP WEB API並使用網上生態資源完成一些專案產出。做這行業還從未想到過

C/S產品軟體是否能做自動化,然而好巧也碰到了這個需求。心中一直認為這樣的產品就是傳統行

業才有的,也真是某眼界小了也是某是對這種行業產品的不清晰認知造成的,就感覺有點老古董的

feeling。

  這是第二次接觸C端exe軟體產品,回往過去第一次接觸這種傳統軟體,就覺得當時某在工作

種的plan , think , action ,result 的尷尬和迷失。

  做過網際網路自動化的同學都知道,基於UI層測試自動化的重要點在於 Element 和 Assert的部

分,而操作類的東西都會有對應的框架庫去支援。從瞭解這類產品軟體開始第一想法是,優先套用

網上的一些資源CSDN ,部落格園,GitHub 翻找,Airtest首當其衝的先嚐試起來。

  失望最大就是這款工具,啟動起來後連主程式都沒有捕捉到。

  自動捕捉桌面頂層視窗去獲取程式

  這種也不頂用,本身沒有與程式建立連線。去截圖form登入控制元件讓其執行,也是無法執行的。

百度一些資訊,確有其他人遇到相同問題,也是沒有解決辦法。

  好吧 ,接下就是pywinauto、pywingui 利器下場使用,其源資訊也是非常多的,某

認為這種真的在無其他辦法只有硬敲程式碼了。

pyautogui 工具

  一個純 Python 的 GUI 自動化庫,它可以模擬鍵盤輸入、滑鼠點選和移動、在螢幕上查詢圖

像等操作,比較適合一些簡易辦公操作。

  想要了解更多使用可以百度,也可以看原始碼學習使用。所以某認為這個不是優先實踐,也是

最後無賴的選擇。就是利用介面座標,影像識別去實現。

pywinauto工具

  主要使用者就是Windows GUI 應用程式的測試和自動化

  那麼回到自動化的重點 element定位 和 object 斷言,網上資源提供這兩款inspect.exe

SpyLite.exe 工具去捕捉元素屬性。本身Pywinauto 也是可以根據 主視窗獲取分支元素,做到一

部分控制元件,視窗的定位元素支援。附上一個demo圖

app = Application(backend="uia").connect(process=5624) 

#使用spy++檢擦工具捕捉到主視窗的title
console_dlg = app.window(title ="DRConsole")

# console_dlg.print_control_identifiers() # 列印 主視窗所有資訊

reg = console_dlg.child_window(title="frmRegister") #子視窗標題

透過pywinauto 列印找到的元素輸入框 Edit 屬性

reg.Edit4.type_inpu(text) #輸入文字

  在軟體介面中不是所有的控制元件和視窗有唯一性元素或者能被捕捉到,此時就會很麻煩頭疼。

就如下圖所示

  另外就是spy++工具捕捉到控制元件與視窗,視窗沒有title 或者視窗class_name屬性值不唯一,

控制元件class_name 屬性值不一樣,剩下情況就是啥也捕捉不到。進行到此時,只有座標軸定位

顯示器螢幕左上角(0,0)介面方式推動到控制元件中心位置得出座標。此法確實很low 也著實非

常尷尬。

  最近看到某位同事得壓力測試指令碼,發現這個強大的庫--lackey 。去百度翻找了一下CSDN

部落格園對此庫理解和運用,奈何竟然白票不到有用的東西 扎心德嘞,只能看原始碼了還是比較簡單。

附上地址:https://gitcode.com/gh_mirrors/la/lackey/analysis

1 --》此處便是原始碼

APP -- 同理pywinauto 連線啟動app 獲取視窗應用屬性

Geometry -- 封裝螢幕,介面定位,焦點,操作,收集等方法

inputEmulation -- 滑鼠,鍵盤封裝 同理 pywinauto ,pyautogui

Ocr -- 從Image 識別到 物件,查詢到image存在 ,Matches 匹配

platformManagerWindows -- 螢幕,視窗活躍操作例項封裝,應用在Windows上的

ReginMatching --- 對區域,圖案封裝的一個工具,細分方法 (也是元素定位重點)

SIkuliGui -- 對會話,彈窗的操作封裝

TemplateMatchers -- 引用OpenCV 模板演算法 ,去找匹配工具

2 --》此處便是TEST 測試驗證指令碼

--Test 就是在驗證論證自己封裝寫好的工具類和方法,外加一些識別影像的演算法驗證

  當前在使用Lackey 庫後,根據需要找到比較合適的截圖控制元件就好,應該它是經過一系列處理

找螢幕位置,找區域,找圖案,計算畫素,匹配計算值比較,然後才是後面元素Action.

成果不上影片了,涉及商業用途。後序關於Lackey 庫的使用的功能非常多多,可以解決那些在

桌面軟體實現一些自動化辦公或者自動化測試人員和朋友。

  

  

相關文章