從測試人員的角度出發,提出了一個理念,即開發者如何從一開始就將應用程式設計得便於自動化測試。
引言
作為一名自動化測試人員,我花了無數個小時與那些似乎故意設計成抗拒自動化的應用程式作鬥爭。脆弱的選擇器稍有UI調整就會失效,元件缺乏可辨識的屬性,複雜的流程隱藏在不明確的狀態背後──這些都是我們每天都會遇到的挫折。
但關鍵在於:大多數這類挑戰都是可以避免的。如果開發人員從一開始就將自動化納入應用程式的設計考量,測試就會變得更快、更可靠,也更容易維護。
這不僅僅是為了讓我們的工作更輕鬆——而是為了更快地交付更高品質的軟體。
本文分享了一些實用建議,每個應用程式開發人員都應該遵循這些建議,以使他們的應用程式「做好自動化準備」。
使元素可識別且穩定
問題:
許多應用程式僅依賴每次建置都會改變的 CSS 類別名稱或產生的 ID。而像 Selenium、Playwright 和 Appium 這樣的自動化框架則依賴定位器(唯一識別碼)來與元素互動。
開發者該怎麼做:
- 新增
data-testid互動元素(按鈕、輸入框、表單、連結)的屬性 - 保持這些 ID 在各個版本之間穩定——像對待公共 API 一樣對待它們。
- 避免僅依賴動態類別名稱或 XPath 位置
真實範例:
// ❌ BAD - Changes frequently
<button className="btn-primary-v2 btn-submit-form">
Submit
</button>
// ✅ GOOD - Stable identifier for testers
<button data-testid="form-submit-button" className="btn-primary-v2">
Submit
</button>
提交
為何如此重要:
當你添加 data-testid測試人員可以使用以下方法可靠地定位元素 page.locator('[data-testid="form-submit-button"]') 在劇作家或 find_element(By.CSS_SELECTOR, '[data-testid="form-submit-button"]') 在 Selenium 中。
使用語義化的HTML和正確的標籤關聯
問題:
通用 <div> 以及 <span> 沒有標籤的元素使得測試人員幾乎不可能理解控制項的用途,輔助功能工具也無法正常運作。
開發者該怎麼做:
- 使用語意化的HTML元素:
<button>,<input>,<label>,<form> - 使用以下方式將標籤與輸入關聯起來
<label for="inputId"> - 使用
aria-labeloraria-labelledby對於複雜部件