基於 Eclipse 的應用廣泛普及,GUI 自動化測試需求隨之而來。SWTBot 是年輕且強大的開源專案(已納入 Eclipse 基金會孵化),專注簡化 SWT 與 Eclipse RCP 應用的 GUI 測試,平台獨立、功能完善,已成功應用於多個產品測試。本文詳述環境建置、首個測試案例、架構設計、核心 API 與實戰技巧。
https://download.eclipse.org/technology/swtbot/galileo/dev-build/update-site/

MANIFEST.MF 依賴頁籤添加 SWTBot 相關外掛@RunWith(SWTBotJunit4ClassRunner.class)
@RunWith(SWTBotJunit4ClassRunner.class)
public class AddUpdateSiteTest {
private static SWTWorkbenchBot bot;
@BeforeClass
public static void setUp() throws Exception {
bot = new SWTWorkbenchBot();
bot.viewByTitle("Welcome").close();
}
@Test
public void testAddUpdateSite() throws Exception {
bot.menu("Help").menu("Install New Software...").click();
SWTBotShell shell = bot.shell("Install");
shell.activate();
bot.button("Add...").click();
SWTBotShell shell1 = bot.shell("Add Site");
shell1.activate();
bot.textWithLabel("Name:").setText("SWT development tools");
bot.textWithLabel("Location:").setText("https://www.eclipse.org/swt/updates/3.5");
SWTBotAssert.assertEnabled(bot.button("OK")); // 驗證按鈕狀態
bot.button("Cancel").click(); // 取消以便重複執行
bot.button("Cancel").click();
}
@AfterClass
public static void tearDown() throws Exception {
bot.sleep(5000);
}
}
關鍵點:必須使用 SWTBotJunit4ClassRunner,因 SWTBot 測試事件會阻塞,若與 UI 同執行緒會導致測試卡死。

SWTBot 類提供各種方法取得目標控制項代理類(Widgets)。查找器依條件定位控制項,匹配器支援強大表達式(基於 Hamcrest 庫)。

Widget 子類 → SWTBot 代理類繼承 AbstractSWTBotControl 子類 → SWTBot 代理類繼承 AbstractSWTBotControl抽象類實作通用測試方法:模擬滑鼠動作、檢查控制項狀態等。

SWTBot 在 SWTBotAssert 提供 GUI 專用斷言,支援常規驗證、正則表達式驗證等。並提供快照功能:測試失敗時自動截圖儲存,直觀定位問題。

傳統方式需自行處理執行緒超時/等待,易產生維護問題。SWTBot 透過 ICondition 介面與實作類,提供完善的等待條件機制(如控制項顯示、文字變更、啟用狀態等)。若內建不足,可呼叫 Conditions 工廠類自訂條件。

SWTWorkbenchBot 起始,透過 Bot 方法尋找目標控制項bot.button("text")、bot.textWithLabel("Label:")、bot.menu("menu").menu("submenu") 等
修改 SWTBotPreferences 靜態參數或設定環境變數,調整腳本回放間隔。
Ctrl+Shift 啟動,滑鼠指向控制項顯示詳細資訊註:SWTBot 2.0 移除了錄製器,若極度依賴錄製需回退 1.3 版。但手寫腳本在程式碼復用、可維護性上更優。
SWTBot 擁有強大測試功能、優異的程式碼可維護性與可讀性,是測試 SWT、Eclipse 外掛與 RCP 應用的優秀選擇。掌握其架構與核心 API,即能建立穩健的自動化測試套件。