開発者がアプリを最初から自動化に対応できるように設計する方法を促進するコンセプト ― テスターの視点から。
イントロダクション
自動化テスターとして、私は自動化を意図的に阻害するように設計されたと思われるアプリケーションと格闘するのに膨大な時間を費やしてきました。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> (NAIST) と <span> ラベルのない要素があると、テスターがコントロールの目的を理解することがほぼ不可能になり、アクセシビリティツールが正しく機能しなくなります。
開発者がすべきこと:
- セマンティックなHTML要素を使用する:
<button>,<input>,<label>,<form> - ラベルを入力に関連付けるには、
<label for="inputId"> -
aria-labeloraria-labelledby複雑な部品の場合