iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
Software Development

Windows 桌面軟體 CI 實戰:從系統工具開發到 Zero-RDP 自動化測試錄影 系列

開發 Windows 系統工具與桌面應用時,如何在 GitHub Actions CI 管道中確保品質?本系列以真實開源專案為骨幹,揭密無桌面環境下的 E2E 測試挑戰。涵蓋輸入法(IME)狀態攔截、跨架構虛擬化驗證、自動關閉 OOBE 彈窗,到產出操作影片與視窗差異報告,手把手建立 Windows GUI 軟體整合測試管線。

參賽天數 26 天 | 共 26 篇文章 | 0 人訂閱 訂閱系列文 RSS系列文
DAY 1

Day 1:被遺忘在現代 CI 世界之外的 Windows 桌面應用

引言 如果你是一位 Web 開發者,你可能早已習慣了現代前端測試的奢華體驗: 使用 Playwright 或 Cypress 撰寫端到端(E2E)整合測試。...

2026-08-31 ‧ 由 mangokingTW 分享
DAY 2

Day 2:你的視窗不是你的視窗:Session、Window Station、Input Desktop 的三層蛋糕

昨天講的四份診斷產物,全都建立在一個沒有講出來的前提上:「它們看到的那張桌面,就是使用者看到的那張。 」而那個前提不會自動成立——它不成立的時候,也不會有任何錯...

2026-09-01 ‧ 由 mangokingTW 分享
DAY 3

Day 3:測試崩潰永遠在最後一秒:PyAV 串流編碼與 CI 錄影的三道防線

昨天確認了執行緒站在對的桌面上。今天的目標很明確: 一支涵蓋整場測試、不中斷、時間感正確的影片,而且在 x64 和 ARM64 上都要能錄。 聽起來像是「找...

2026-09-02 ‧ 由 mangokingTW 分享
DAY 4

Day 4:「成功回傳」不等於「拿到有用的東西」

錄影告訴你「過程」。今天講另外兩份產物:截圖回答「那一刻」,普查回答「桌面上多了什麼、是誰開的」。 兩者各帶一個教訓,而那兩個教訓是同一件事的兩張臉:Print...

2026-09-03 ‧ 由 mangokingTW 分享
DAY 5

Day 5:證據勝過推論——讓 CI 自證其罪

前面三天都在講怎麼產出證據:錄影、截圖、視窗普查。這一天講一件更基本的事——什麼時候該停止推理,去看證據。 因為我很不擅長這件事。這個系列裡我有一連串錯誤結論,...

2026-09-04 ‧ 由 mangokingTW 分享
DAY 6

Day 6:`FindFirst` 跨不過巢狀 HWND,逐層走訪跨得過去

第二章開始。今天的主線只有一句:UIA 的一次性後代搜尋會停在 HWND 邊界上,而逐層走訪不會。Windows 11 的現代應用普遍有這種邊界,所以這不是特例...

2026-09-05 ‧ 由 mangokingTW 分享
DAY 7

Day 7:對的 PID,錯的 HWND——app 自己的錯誤對話框也在它的處理程序裡

昨天的問題是「找不到」,至少它會誠實地失敗。今天這個更陰險:它找到了,回傳了,測試繼續跑,然後在別的地方以看不懂的方式壞掉。 症狀:1.2 秒回傳的視窗 我在...

2026-09-06 ‧ 由 mangokingTW 分享
DAY 8

Day 8:回傳成功,不代表已經發生——UI 操作是非同步的

昨天的問題是「找到錯的東西」。今天的問題是:你操作了對的東西,函式回傳成功,但那件事還沒發生。 送出,不等於完成 edit.set_value("h...

2026-09-07 ‧ 由 mangokingTW 分享
DAY 9

Day 9:穿透 Content Island——WinUI 3 焦點路由與 Win32 佇列賽跑實錄

今天講一個我寫錯過的測試——而它教我的事情,比它修好之後的樣子更有價值。 一個看起來很合理的斷言 Win32 的傳統 EDIT 控制項有個經典行為:用鍵盤 T...

2026-09-08 ‧ 由 mangokingTW 分享
DAY 10

Day 10:Control Pattern——問一個元素「你能做什麼」

第二章的最後一天。前面四天講的都是「怎麼找到元素」和「找到之後怎麼相信它」。今天講找到之後你能對它做什麼、底層 COM 到底如何向元素索取能力,以及一個關於錯誤...

2026-09-09 ‧ 由 mangokingTW 分享