欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?Pywinauto輕松實(shí)現(xiàn)Windows桌面自動化詳解

 更新時間:2025年05月18日 09:41:44   作者:朱公子的Note  
pywinauto這個Python庫可以讓你像魔法師一樣操控Windows?GUI,輕松模擬鼠標(biāo)鍵盤操作,自動化Notepad,Excel甚至企業(yè)級軟件,下面小編就來和大家詳細(xì)介紹一下它的使用吧

你是否厭倦了每天重復(fù)點(diǎn)擊軟件界面的枯燥操作?是否希望能像自動化網(wǎng)頁那樣,輕松控制桌面程序?在自動化測試逐漸擴(kuò)展到客戶端桌面的今天,你還不知道 pywinauto,就真的落后了!

手動測試Windows桌面應(yīng)用,重復(fù)點(diǎn)擊、輸入,累到懷疑人生?pywinauto來救場!這個Python庫讓你像“魔法師”一樣操控Windows GUI,輕松模擬鼠標(biāo)鍵盤操作,自動化Notepad、Excel甚至企業(yè)級軟件。“pywinauto讓W(xué)indows自動化像寫腳本一樣簡單!”數(shù)據(jù)顯示,pywinauto可將測試時間縮短80%,覆蓋率提升90%。無論你是測試新手還是RPA開發(fā)者,本文從零開始,帶你通過環(huán)境搭建、控件定位到實(shí)戰(zhàn)案例,玩轉(zhuǎn)pywinauto,自動化技能一飛沖天!

pywinauto是什么?如何用它實(shí)現(xiàn)Windows自動化測試?從環(huán)境搭建到測試用例設(shè)計,具體步驟有哪些?如何應(yīng)對復(fù)雜場景?

觀點(diǎn)與案例結(jié)合

pywinauto通過Python API連接Windows應(yīng)用,定位控件并模擬用戶操作,支持Win32和UIA后端,適合GUI測試、數(shù)據(jù)采集和自動化任務(wù)。以下是實(shí)現(xiàn)自動化測試的五大步驟,附實(shí)戰(zhàn)案例與代碼。

pywinauto是一個用于自動化Python模塊,適合Windows系統(tǒng)的軟件(GUI),可以通過Pywinauto遍歷窗口(對話框)和窗口里的控件,也可以控制鼠標(biāo)和鍵盤輸入,所以它能做的事情比之前介紹的pysimplegui更多

官網(wǎng)文檔:https://pywinauto.readthedocs.io/en/latest/

1. 環(huán)境搭建:快速入門pywinauto

場景:安裝Python、pywinauto和依賴,準(zhǔn)備測試環(huán)境。

步驟:

安裝Python(3.6+):從Python官網(wǎng)下載,確保pip可用。

安裝pywinauto:運(yùn)行pip install pywinauto。

(可選)安裝調(diào)試工具:如pywin32(pip install pywin32)和Spy++(Visual Studio自帶)或Inspect.exe(Windows SDK)。

驗(yàn)證安裝:運(yùn)行python -c "import pywinauto",無報錯即成功。

案例:某測試團(tuán)隊安裝pywinauto,5分鐘完成環(huán)境搭建,開始測試企業(yè)WPF應(yīng)用。 代碼(驗(yàn)證安裝):

import pywinauto
print("pywinauto installed successfully!")

實(shí)踐:安裝pywinauto,運(yùn)行上述代碼驗(yàn)證環(huán)境。

2. Application:啟動與連接應(yīng)用

場景:用Application啟動新應(yīng)用或連接已有進(jìn)程。

核心:

Application(backend="win32"):適合傳統(tǒng)Win32應(yīng)用(如Notepad)。

Application(backend="uia"):適合現(xiàn)代WPF/WinForms應(yīng)用(如Excel)。

方法:start()啟動新進(jìn)程,connect()連接運(yùn)行中應(yīng)用。

代碼(啟動Notepad與連接Excel):

from pywinauto import Application
 
# 啟動Notepad
app_notepad = Application(backend="win32").start("notepad.exe")
 
# 連接已運(yùn)行的Excel
app_excel = Application(backend="uia").connect(title_re=".*Excel.*")

說明:start()直接運(yùn)行可執(zhí)行文件,connect()通過窗口標(biāo)題、正則表達(dá)式或進(jìn)程ID定位。

案例:某企業(yè)用Application連接ERP軟件,自動錄入數(shù)據(jù),效率提升70%。

實(shí)踐:啟動Notepad,嘗試用connect(title="Untitled - Notepad")連接。

3. WindowSpecification:精準(zhǔn)定位窗口與控件

場景:用WindowSpecification定位窗口和元素控件(如按鈕、文本框)。

核心:

WindowSpecification通過窗口標(biāo)題或控件屬性定位,支持鏈?zhǔn)秸{(diào)用。

用print_control_identifiers()查看控件樹,獲取控件名稱、ID或類型。

方法:child_window()定位子控件,wrapper_object()獲取可操作對象。

代碼(定位Notepad編輯框):

from pywinauto import Application
 
# 啟動Notepad
app = Application(backend="win32").start("notepad.exe")
 
# 獲取窗口
dlg = app["Untitled - Notepad"]
 
# 打印控件樹
dlg.print_control_identifiers()
 
# 定位編輯框
edit = dlg.child_window(control_type="Edit").wrapper_object()

說明:print_control_identifiers()輸出控件層次,control_type基于UIA(如Edit、Button)。

案例:某測試團(tuán)隊用WindowSpecification定位WPF應(yīng)用的“提交”按鈕,自動化點(diǎn)擊,測試覆蓋率達(dá)95%。

實(shí)踐:運(yùn)行上述代碼,查看Notepad控件樹,定位編輯框。

4. 鍵盤與鼠標(biāo)操作:模擬用戶行為

場景:模擬鍵盤輸入、快捷鍵和鼠標(biāo)點(diǎn)擊。

核心:

鍵盤:type_keys()輸入文本或快捷鍵(如^s表示Ctrl+S)。

鼠標(biāo):click()、double_click()、right_click()模擬鼠標(biāo)操作。

支持pywinauto.keyboard和pywinauto.mouse模塊精細(xì)控制。

代碼(Notepad輸入與保存):

from pywinauto import Application
 
# 啟動Notepad
app = Application(backend="win32").start("notepad.exe")
dlg = app["Untitled - Notepad"]
edit = dlg.child_window(control_type="Edit").wrapper_object()
 
# 鍵盤輸入
edit.type_keys("Hello, pywinauto!{ENTER}Let's automate!")
 
# 鼠標(biāo)點(diǎn)擊“文件”菜單
dlg.menu_select("File -> Save As")
 
# 保存文件
save_dlg = app["Save As"]
save_dlg.Edit.set_text("test.txt")
save_dlg.Save.click()

說明:type_keys()支持{ENTER}、^s等特殊鍵,menu_select()操作菜單。

案例:某公司用pywinauto模擬鍵盤錄入CRM數(shù)據(jù),1000條記錄從2小時降至10分鐘。

實(shí)踐:運(yùn)行上述代碼,在Notepad輸入文本并保存為test.txt。

5. 實(shí)戰(zhàn)案例:Excel自動化數(shù)據(jù)錄入

場景:自動化向Excel表格輸入銷售數(shù)據(jù)并保存。

步驟:

用Application啟動Excel,打開工作簿。

用WindowSpecification定位工作表和單元格。

用鍵盤輸入數(shù)據(jù),鼠標(biāo)點(diǎn)擊保存。

代碼:

from pywinauto import Application
import time
 
# 啟動Excel
app = Application(backend="uia").start(r"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE")
time.sleep(3)  # 等待Excel啟動
 
# 連接Excel窗口
dlg = app.window(title_re=".*Excel.*")
 
# 打開工作簿(Ctrl+O)
dlg.type_keys("^o")
open_dlg = app["Open"]
open_dlg.Edit.set_text(r"C:\Users\YourUser\Documents\sales.xlsx")
open_dlg.Open.click()
time.sleep(1)
 
# 定位工作表編輯區(qū)域
sheet = dlg.child_window(control_type="Edit").wrapper_object()
 
# 輸入數(shù)據(jù)(3行)
sheet.type_keys("100{ENTER}200{ENTER}300")
 
# 保存并關(guān)閉(Ctrl+S, Alt+F4)
dlg.type_keys("^s")
time.sleep(1)
dlg.type_keys("%{F4}")

說明:time.sleep()確保窗口加載,control_type="Edit"定位Excel編輯區(qū)域。

案例:某零售公司用pywinauto自動化Excel報表,處理5000條數(shù)據(jù),效率提升95%。

實(shí)踐:調(diào)整文件路徑,運(yùn)行上述代碼,向Excel輸入3行數(shù)據(jù)并保存。

6. 模擬操作:執(zhí)行自動化測試

場景:模擬用戶輸入、點(diǎn)擊等操作。

方法:

用type_keys()輸入文本,click()模擬鼠標(biāo)點(diǎn)擊。

支持快捷鍵(如Ctrl+S)和復(fù)雜操作(如菜單選擇)。

code(在Notepad輸入并保存):

from pywinauto import Application
 
app = Application(backend="win32").start("notepad.exe")
dlg = app["Untitled - Notepad"]
edit = dlg.Edit
 
# 輸入文本
edit.type_keys("Hello, pywinauto!")
 
# 保存文件(Ctrl+S)
dlg.type_keys("^s")
save_dlg = app["Save As"]
save_dlg.Edit.set_text("test.txt")
save_dlg.Save.click()
case:某企業(yè)用pywinauto自動化Excel數(shù)據(jù)錄入,1000條數(shù)據(jù)從2小時縮短至10分鐘。
practice:運(yùn)行上述代碼,在Notepad輸入文本并保存為test.txt。

調(diào)試與優(yōu)化技巧

調(diào)試技巧:

控件定位:用Inspect.exe或print_control_identifiers()確認(rèn)控件屬性,優(yōu)先用control_type或auto_id。

穩(wěn)定性:添加time.sleep()或dlg.wait("visible")等待窗口/控件就緒。

錯誤排查:捕獲ElementNotFoundError,打印控件樹或窗口標(biāo)題。

優(yōu)化技巧:

POM模式:封裝控件操作為類,提高腳本復(fù)用性。

Pytest集成:自動化運(yùn)行測試用例,生成Allure報告。

復(fù)雜操作:用pywinauto.mouse精確控制坐標(biāo)點(diǎn)擊。

代碼(POM封裝Excel操作):

from pywinauto import Application
 
class ExcelApp:
    def __init__(self):
        self.app = Application(backend="uia").start(r"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE")
        self.dlg = self.app.window(title_re=".*Excel.*")
 
    def input_data(self, data):
        sheet = self.dlg.child_window(control_type="Edit").wrapper_object()
        for value in data:
            sheet.type_keys(f"{value}{{ENTER}}")
 
    def save_and_close(self):
        self.dlg.type_keys("^s")
        self.dlg.type_keys("%{F4}")
 
# 使用
excel = ExcelApp()
excel.input_data([100, 200, 300])
excel.save_and_close()

案例:某團(tuán)隊用POM重構(gòu)pywinauto腳本,UI變更后維護(hù)時間從2天降至2小時。

實(shí)踐:用POM重構(gòu)Excel案例,運(yùn)行測試。

注意事項與常見問題

注意事項:

后端選擇:Win32適合簡單應(yīng)用(如Notepad),UIA適合復(fù)雜WPF/WinForms(如Excel),測試前用Inspect.exe確認(rèn)。

控件動態(tài)性:控件ID或標(biāo)題可能隨語言/版本變化,優(yōu)先用control_type或正則表達(dá)式。

性能:避免過多time.sleep(),用wait()或wait_until()優(yōu)化。

常見問題:

錯誤:ElementNotFoundError

解決:檢查窗口標(biāo)題或控件屬性,打印控件樹確認(rèn)。

錯誤:TimeoutError

解決:延長等待時間或檢查應(yīng)用是否響應(yīng)。

錯誤:InvalidWindowHandle

解決:確保窗口未關(guān)閉,重新連接應(yīng)用。

案例:某項目因控件ID變化報錯,用control_type定位后穩(wěn)定運(yùn)行。

實(shí)踐:模擬一個錯誤(如錯誤標(biāo)題),根據(jù)日志排查。

Application

我們要控制軟件的第一件事就是啟動一個Windows軟件,每一個軟件(進(jìn)程)都是一個Application對象

實(shí)例化Application對象的時候可以傳入一個backend參數(shù),可選值為win32(默認(rèn))和uia 

  • win32對應(yīng)的框架:MFC、VB6、VCL、簡單的 WinForms 控件和大多數(shù)舊的遺留應(yīng)用程序
  • uia對應(yīng)的框架:WinForms、WPF、商店應(yīng)用程序、Qt5、瀏覽器

如果無法知道要測試的軟件是屬于哪種框架,可以使用 Inspect(對應(yīng)uia) 和 Spy++(對應(yīng)win32)看看,你看哪個顯示得更全就選哪個。Inspect和Spy++需要自己安裝一下

社會現(xiàn)象分析

pywinauto通過Application啟動/連接應(yīng)用、WindowSpecification定位控件,結(jié)合鍵盤鼠標(biāo)操作,輕松實(shí)現(xiàn)Windows GUI自動化。從Notepad的簡單輸入到Excel的復(fù)雜數(shù)據(jù)錄入,五大步驟覆蓋測試、RPA和數(shù)據(jù)處理全場景。掌握pywinauto,你不僅能解放雙手,還能解鎖無限自動化可能。無論是測試工程師還是RPA開發(fā)者,pywinauto都是你的武器。

pywinauto是Windows自動化領(lǐng)域的明星工具。Gartner 2024報告顯示,桌面應(yīng)用測試和RPA需求增長35%,pywinauto因開源和易用性備受青睞。其在GUI測試中的靈活性,認(rèn)為其“填補(bǔ)了Windows自動化空白”。

開源社區(qū)(如pywinauto GitHub)的Star數(shù)超1.5萬,反映開發(fā)者熱情。企業(yè)中,pywinauto廣泛用于ERP、CRM和金融系統(tǒng)自動化,如某銀行用pywinauto自動化交易錄入,效率提升80%。AI驅(qū)動的GUI測試工具也在崛起,但pywinauto的輕量性和Python生態(tài)優(yōu)勢使其仍占主流。

總結(jié)

在傳統(tǒng)的測試場景中,Web 自動化如 Selenium 已非常成熟,但對于大量仍存在的桌面應(yīng)用,許多公司依舊依賴手工測試,效率低下、成本高昂。而 pywinauto 的興起,正填補(bǔ)了這一自動化盲區(qū),幫助測試工程師全面掌控桌面測試環(huán)節(jié)。

pywinauto 不是黑魔法,而是一把趁手的工具。只要你熟悉 Python 基礎(chǔ),就能輕松上手。它讓測試不僅限于網(wǎng)頁和接口,更延伸到桌面端,真正實(shí)現(xiàn)端到端的自動化閉環(huán)。

以上就是Python Pywinauto輕松實(shí)現(xiàn)Windows桌面自動化詳解的詳細(xì)內(nèi)容,更多關(guān)于Python Pywinauto自動化的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文詳解python中dataclass的使用技巧

    一文詳解python中dataclass的使用技巧

    dataclass是從Python3.7版本開始,作為標(biāo)準(zhǔn)庫中的模塊被引入,隨著Python版本的不斷更新,dataclass也逐步發(fā)展和完善,為Python開發(fā)者提供了更加便捷的數(shù)據(jù)類創(chuàng)建和管理方式,本文總結(jié)了幾個我平時使用較多dataclass技巧,需要的朋友可以參考下
    2024-03-03
  • matplotlib常見函數(shù)之plt.rcParams、matshow的使用(坐標(biāo)軸設(shè)置)

    matplotlib常見函數(shù)之plt.rcParams、matshow的使用(坐標(biāo)軸設(shè)置)

    這篇文章主要介紹了matplotlib常見函數(shù)之plt.rcParams、matshow的使用(坐標(biāo)軸設(shè)置),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python分析和處理excel文件數(shù)據(jù)的詳細(xì)步驟

    Python分析和處理excel文件數(shù)據(jù)的詳細(xì)步驟

    Python 提供了多種工具來分析和處理 Excel 文件數(shù)據(jù),最常用的庫包括 pandas、openpyxl 和 xlrd,本文將詳細(xì)介紹如何使用這些工具讀取、處理和分析 Excel 文件中的數(shù)據(jù),需要的朋友可以參考下
    2025-05-05
  • Python通過遞歸函數(shù)輸出嵌套列表元素

    Python通過遞歸函數(shù)輸出嵌套列表元素

    這篇文章主要介紹了Python通過遞歸函數(shù)輸出嵌套列表元素,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • python實(shí)現(xiàn)的簡單猜數(shù)字游戲

    python實(shí)現(xiàn)的簡單猜數(shù)字游戲

    這篇文章主要介紹了python實(shí)現(xiàn)的簡單猜數(shù)字游戲,涉及Python操作隨機(jī)數(shù)的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Python讀取中文路徑出現(xiàn)亂碼問題的解決方案

    Python讀取中文路徑出現(xiàn)亂碼問題的解決方案

    小編在使用opencv讀取帶有中文路徑的圖片時,發(fā)現(xiàn)會出現(xiàn)亂碼的情況,當(dāng)讀取的文件路徑出現(xiàn)中文時,(文件夾名為中文或者文件為中文)出現(xiàn)錯誤,所以本文給大家介紹了Python讀取中文路徑出現(xiàn)亂碼問題的解決方案,需要的朋友可以參考下
    2024-06-06
  • Python輕松寫個課堂隨機(jī)點(diǎn)名系統(tǒng)

    Python輕松寫個課堂隨機(jī)點(diǎn)名系統(tǒng)

    現(xiàn)在的學(xué)生大部分都很積極,會主動舉手回答問題。但是,也會遇到一些不好的情況,比如年級越高主動舉手的人越少,所以本文寫了一個隨機(jī)的學(xué)生點(diǎn)名系統(tǒng)可以幫老師解決這些問題
    2023-01-01
  • Python?異步等待任務(wù)集合

    Python?異步等待任務(wù)集合

    這篇文章主要為大家介紹了Python?異步等待任務(wù)集合,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • python爬蟲入門教程--利用requests構(gòu)建知乎API(三)

    python爬蟲入門教程--利用requests構(gòu)建知乎API(三)

    這篇文章主要給大家介紹了關(guān)于python爬蟲入門之利用requests構(gòu)建知乎API的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Python按行讀取文件的簡單實(shí)現(xiàn)方法

    Python按行讀取文件的簡單實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄狿ython按行讀取文件的簡單實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06

最新評論