開發 Windows 系統工具與桌面應用時,如何在 GitHub Actions CI 管道中確保品質?本系列以真實開源專案為骨幹,揭密無桌面環境下的 E2E 測試挑戰。涵蓋輸入法(IME)狀態攔截、跨架構虛擬化驗證、自動關閉 OOBE 彈窗,到產出操作影片與視窗差異報告,手把手建立 Windows GUI 軟體整合測試管線。
第五章開始。前面二十天講的每一個坑,都是我在自己的測試裡踩到的——而自己的測試有一個結構性的問題: 一個為了測函式庫而寫的應用程式,只能證明函式庫跟自己一致。...
Notepad++ 的編輯區是 Scintilla——一個被大量第三方編輯器內嵌的控制項。它在 UIA 樹裡長這樣: <Pane class='Scint...
WinMerge 是四個標的裡最「乾淨」的一個:純 Win32、零外部相依、秒級啟動。它的工具列也很好測——44 個按鈕都有名字,而名字就是 tooltip:...
這一天的內容是我在這整個系列裡錯得最徹底的一次,而且錯了三次。所以寫法會跟其他天不一樣:照時間順序,把每一個錯誤結論留在原位。 標的是 DB Browser f...
回到 UIA 的複雜控制項。今天兩件事:表格相關的四個 pattern 分工不是望文生義的,以及你找不到第 150 列,是因為它真的不存在。 四個 patte...
第五章倒數第二天。兩個主題:API 回答了、回答得很有禮貌,而那個答案是空的,以及一個要走好幾步才能到的目標,失敗訊息該怎麼寫。 現象:支援那個 patter...
第五章最後一天。前面六天都在證明「這個函式庫驅動得動別人的 app」,今天要回答更難的那個問題: 它抓得到 bug 嗎? 不是抓我自己寫的測試 app 的 b...
最後一章。前面 27 天講的是「為什麼會壞」,這三天講「所以檔案要怎麼寫」。 今天把整個 ci.yml 逐段拆開——每一段都對應到前面某一天的問題。 完整工作...
workflow 寫好了、測試也綠了。今天講剩下的一半:當它紅的時候,你要怎麼知道發生什麼事,以及幾個會讓你得到錯誤結論的陷阱。 陷阱一:判斷「CI 跑完了沒...
三十天前,這個系列的第一篇拋出了一個現實問題:為什麼在現代軟體工程中,Windows 桌面應用的自動化測試幾乎被遺忘在 CI 之外? 長年以來,桌面開發團隊普遍...