開發 Windows 系統工具與桌面應用時,如何在 GitHub Actions CI 管道中確保品質?本系列以真實開源專案為骨幹,揭密無桌面環境下的 E2E 測試挑戰。涵蓋輸入法(IME)狀態攔截、跨架構虛擬化驗證、自動關閉 OOBE 彈窗,到產出操作影片與視窗差異報告,手把手建立 Windows GUI 軟體整合測試管線。
引言 如果你是一位 Web 開發者,你可能早已習慣了現代前端測試的奢華體驗: 使用 Playwright 或 Cypress 撰寫端到端(E2E)整合測試。...
昨天講的四份診斷產物,全都建立在一個沒有講出來的前提上:「它們看到的那張桌面,就是使用者看到的那張。 」而那個前提不會自動成立——它不成立的時候,也不會有任何錯...
昨天確認了執行緒站在對的桌面上。今天的目標很明確: 一支涵蓋整場測試、不中斷、時間感正確的影片,而且在 x64 和 ARM64 上都要能錄。 聽起來像是「找...
錄影告訴你「過程」。今天講另外兩份產物:截圖回答「那一刻」,普查回答「桌面上多了什麼、是誰開的」。 兩者各帶一個教訓,而那兩個教訓是同一件事的兩張臉:Print...
前面三天都在講怎麼產出證據:錄影、截圖、視窗普查。這一天講一件更基本的事——什麼時候該停止推理,去看證據。 因為我很不擅長這件事。這個系列裡我有一連串錯誤結論,...
第二章開始。今天的主線只有一句:UIA 的一次性後代搜尋會停在 HWND 邊界上,而逐層走訪不會。Windows 11 的現代應用普遍有這種邊界,所以這不是特例...
昨天的問題是「找不到」,至少它會誠實地失敗。今天這個更陰險:它找到了,回傳了,測試繼續跑,然後在別的地方以看不懂的方式壞掉。 症狀:1.2 秒回傳的視窗 我在...
昨天的問題是「找到錯的東西」。今天的問題是:你操作了對的東西,函式回傳成功,但那件事還沒發生。 送出,不等於完成 edit.set_value("h...
今天講一個我寫錯過的測試——而它教我的事情,比它修好之後的樣子更有價值。 一個看起來很合理的斷言 Win32 的傳統 EDIT 控制項有個經典行為:用鍵盤 T...
第二章的最後一天。前面四天講的都是「怎麼找到元素」和「找到之後怎麼相信它」。今天講找到之後你能對它做什麼、底層 COM 到底如何向元素索取能力,以及一個關於錯誤...