自動スキャン
既存のXCUITestがアプリに対話する際に、自動的にアクセシビリティの問題を特定します
概要
標準のXCUITestジェスチャーにフックすることで、自動スキャンはテストスイートが操作するすべての画面をキャプチャし、スキャンします。個別のスキャン呼び出し、インポート、またはテストへの修正を追加する必要はありません。
動作の仕組み
- テストバンドルが開始されると、自動スキャンがロードされ、
axe_config.jsonインタラクションの観察を開始します - サポートされている各インタラクションの後、自動スキャンは現在の画面をキャプチャします
- テストバンドルが終了すると、自動スキャンは結果を処理し、各画面についてJSONの結果を保存し、要約とHTMLレポートを
AxeDevToolsMobileResults/に保存し、オプションで結果をDeveloper Hubにアップロードします
はじめに
- 作成
axe_config.json:
{
"axeAutoScanMode": true,
"axeAppBundleId": "com.example.myapp",
"axeMobileApiKey": "<API_KEY>",
"axeProjectId": "<PROJECT_ID>"
}- 追加
axe_config.jsonをXcodeのUIテストターゲットバンドルに追加します(プロジェクトナビゲーター > ファイルを追加 > UIテストターゲットをチェック) - 追加
axe_config.jsonを.gitignore - テストを通常通りに実行
コード例
以下のスニペットは、Auto Scan固有のコードを含まない標準のXCUITestです:
import XCTest
class MyAppUITests: XCTestCase {
let app = XCUIApplication()
override func setUpWithError() throws {
app.launch() // triggers initial capture
}
func testSettings() throws {
app.buttons["Settings"].tap() // triggers capture
}
}結果の解釈
コンソール概要
テストスイートが終了すると、次のようなコンソール概要が出力されます:
---- Axe DevTools Mobile Accessibility Summary ----
Scan 1:
Screen: HomeScreen
Issues: 3
Issues by rule:
- ColorContrast: 2
- TouchTargetSize: 1
Scan 2:
Screen: SettingsScreen
Issues: 0
Total Scans: 2
❌ Total Issues: 3
----------------------------------------------------クリーンな実行では、 Axe Clean - 0 Issues Found 🎉 がコンソールに表示されます。
出力ファイル
Auto Scanは各テスト実行の終了時に異なるファイルをいくつか生成します。これにはスクリーンショット、ビュー階層データ、詳細な問題情報を含む自己完結型HTMLレポートが含まれます。すべてのファイルは AxeDevToolsResults ディレクトリに保存されます。
| ファイル | 形式 |
|---|---|
AxeDevToolsSummary_<epoch>.txt |
テキスト概要(コンソール出力と同じ) |
AxeDevToolsReport_<epoch>.html |
各画面ごとの問題、要素の詳細、影響レベル、ビュー階層を含むインタラクティブHTMLレポート |
<bundleId-screenTitle>.json |
各スキャンに対して1つの個別JSON結果 |
自動スキャンサポート
ルール
自動スキャンは、 ScreenOrientation、 SupportsDynamicType、およびすべての実験ルールを除いて、完全なAxeルールセットを実行します。詳細については、 iOSのルール概要を参照してください。
Developer Hub
自動スキャンは結果をAxe Developer Hubに自動的にアップロードします。結果をローカルにのみ保存したい場合は、 axeUploadResults を falseに設定してください。
構成リファレンス
プロパティ
| プロパティ | タイプ | 必須 | 詳細 |
|---|---|---|---|
axeAutoScanMode |
ブール値 | 必須 | 既定では false。 自動スキャンを有効にするには true に設定する必要があります。 |
axeAppBundleId |
文字列 | 必須 | テスト対象アプリのバンドルID |
axeUploadResults |
ブール値 | 任意 | 既定では true。 ローカル結果のみを取得するには false に設定してください。 |
axeMobileApiKey |
文字列 | 任意 | axe.deque.com からの Axe DevTools Mobile API キー axe.deque.com は axeUploadResults=true |
axeProjectId |
文字列 | 任意 | 開発者ハブからの プロジェクト ID が必要です。 axeUploadResults=true |
axeServerUrl |
文字列 | 任意 | オンプレ/プライベートクラウドのみのカスタムバックエンド URL |
axeOfflineLicenseKey |
文字列 | 任意 | 次の場合にのみ必要: オフラインモード、 axeUploadResults=false |
弊社のツールを使用していて、オフラインモードで結果を取得したい場合、 axeOfflineLicenseKey を axeMobileApiKey の代わりに設定します。 axeProjectId。
ベストプラクティス
アニメーションを無効化
アニメーションを無効にすることで、Auto Scan から最も正確で包括的な結果を得ることができます。これにより、画面がキャプチャ時に完全に描画されることを確保します。
以下の 2 つの要素が必要です:
テストのセットアップ:
override func setUpWithError() throws {
let app = XCUIApplication()
app.launchArguments.append("-DisableAnimations")
app.launch()
}アプリの起動パス(AppDelegate または @main):
if ProcessInfo.processInfo.arguments.contains("-DisableAnimations") {
UIView.setAnimationsEnabled(false)
}起動引数はフラグをアプリのプロセスに渡します。アプリ側のチェックがそれに作用します。どちらも単独では機能しません。
注意: UIView.setAnimationsEnabled(false) SwiftUI ネイティブのアニメーションはカバーされていません(withAnimation {})。SwiftUI アプリは追加の処理が必要な場合があります。
トラブルシューティング
- 結果がない? UI テストターゲットバンドルに含まれていることを確認してください。
axe_config.jsonターゲットメンバーシップを確認 ターゲットメンバーシップ XCodeのファイルインスペクタで。 - ローカルで結果が見えても、Developer Hubで見えませんか? Developer Hubへのアップロードは、結果ファイルのどれかひとつでもサイズが20MBを超えると失敗しますが、すべての結果はローカルに保存され、ローカルHTMLレポートで表示されます。
- ログを確認してください。 コンソール内の
AutoScanメッセージを探します。
次にやるべきことは?
結果は Axe Developer Hubで表示できます。 Axe DevTools MobileをあなたのCI/CDパイプラインに統合する方法について学ぶ。クラウドベースのテスティングプラットフォームを使用中ですか?アクセシビリティの問題を検出するためにAxe DevTools Mobileを使用することができます: クラウドプラットフォームと統合する。
テストでより詳細な制御が必要な場合は、 XCUITestによるターゲットテストを参照してください。
