自動スキャン
既存のXCUITestがアプリに対話する際に、自動的にアクセシビリティの問題を特定します
概要
標準のXCUITestジェスチャーにフックすることで、自動スキャンはテストスイートが操作するすべての画面をキャプチャし、スキャンします。個別のスキャン呼び出し、インポート、またはテストへの修正を追加する必要はありません。
動作の仕組み
- テストバンドルが開始されると、Auto Scanは
axe_config.jsonを読み込み、インタラクションの監視を開始します - サポートされている各インタラクションの後、自動スキャンは現在の画面をキャプチャします
- テストバンドルが終了すると、Auto Scanは結果を処理し、各画面のJSON結果と要約およびHTMLレポートを
AxeDevToolsMobileResults/に保存し、オプションで結果をDeveloper Hubにアップロードします
はじめに
axe_config.jsonを作成します:
{
"axeAutoScanMode": true,
"axeAppBundleId": "com.example.myapp",
"axeMobileApiKey": "<API_KEY>",
"axeProjectId": "<PROJECT_ID>",
"axeHtmlReportPath": "~/my-custom-report-folder"
}- UIテストターゲットバンドルに
axe_config.jsonを追加します(Xcode:Project Navigator > Add Files > チェックして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レポートを生成します。出力ファイルはaxe_config.jsonで定義できるユーザー構成可能な出力ディレクトリに保存されます。axeHtmlReportPathは絶対パスまたは~プレフィックスが付いたパス(例: ~/my-axe-reports)を受け入れます。未設定の場合、デフォルトの出力ディレクトリは~/AxeDevToolsMobileResultsです。
| ファイル | 形式 |
|---|---|
AxeDevToolsMobile_<timestamp>.html |
画面ごとの問題、要素の詳細、影響レベルを含むインタラクティブなHTMLレポート |
AxeDevToolsSummary_<timestamp>.txt |
テキスト概要(コンソール出力と同じ) |
axe-test-data/<APP-ID>-<SCREEN-TITLE>.json |
各スキャンに対して1つの個別JSON結果 |
自動スキャンサポート
ルール
Auto ScanはScreenOrientation、SupportsDynamicType、およびすべての実験的なルールを除いて、Axeルールセット全体を実行します。確認する項目に関する詳細情報はiOSのルール概要で確認してください。
Developer Hub
Auto Scanは自動的に結果をAxe Developer Hubにアップロードします。結果をローカルに保存するのみの場合は、axeUploadResultsをfalseに設定します。
構成リファレンス
プロパティ
| プロパティ | タイプ | 必須 | 詳細 |
|---|---|---|---|
axeAutoScanMode |
ブール値 | 必須 | デフォルトはfalseです。Auto Scanを有効にするには、trueに設定する必要があります。 |
axeAppBundleId |
文字列 | 必須 | テスト対象アプリのバンドルID |
axeUploadResults |
ブール値 | 任意 | デフォルトはtrueです。ローカル結果のみの場合はfalseに設定します。 |
axeMobileApiKey |
文字列 | 任意 | axe.deque.comから提供されるAxe DevTools Mobile APIキーが必要です。axeUploadResults=true |
axeProjectId |
文字列 | 任意 | Developer HubからのプロジェクトIDが必要です。axeUploadResults=true |
axeServerUrl(廃止予定) |
文字列 | 任意 | カスタムバックエンドURL(例: axe.company.com)、オンプレミス/プライベートクラウド専用 |
axeAccountUrl |
文字列 | 任意 | カスタムバックエンドURL(例: axe.company.com)、オンプレミス/プライベートクラウド専用 |
axeHtmlReportPath |
文字列 | 任意 | HTMLレポートと要約用のユーザー構成可能な出力ディレクトリ。デフォルトは~/AxeDevToolsMobileResultsです。 |
axeOfflineLicenseKey |
文字列 | 任意 | オフラインモード専用、axeUploadResults=falseの時に必要です |
ツールを使用してオフラインモードで結果を取得したい場合は、axeMobileApiKeyとaxeProjectIdの代わりにaxeOfflineLicenseKeyの値を設定します。
ベストプラクティス
アニメーションを無効化
アニメーションを無効にすることで、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のFile Inspectorでターゲットメンバーシップを確認します。 - ローカルで結果が見えても、Developer Hubで見えませんか? もし結果ファイルのサイズが20MBを超えると、Developer Hubへのアップロードが失敗しますが、すべての結果はローカルに保存され、ローカルHTMLレポートで表示されます。
- ログを確認してください。 コンソールで
AutoScanメッセージを探します。
次にやるべきことは?
結果はAxe Developer Hubで確認できます。Axe DevTools MobileをあなたのCI/CDパイプラインに統合する方法について学ぶ方法を学んでください。クラウドベースのテストプラットフォームを使用していますか?Axe DevTools Mobileを使用してアクセシビリティの問題を見つけることができます: クラウドプラットフォームと統合する。
テストでより細かい制御が必要な場合は、XCUITestによるターゲットテストを参照してください。
