画面の一部をスキャンする
Not for use with personal data
特定のコンポーネントや機能のアクセシビリティをテストしたい場合は、画面全体ではなく、その要素やビューに対してターゲットを絞ったスキャンを実行できます。
run(onElement: ) メソッドを使用する
単一の要素やビューは、run(onElement: ) メソッドを使ってスキャンすることができます。このメソッドは、任意の XCUIElement をパラメータとして受け取ります。XCUIApplication(アプリ全体)からボタン、ラベル、テキストフィールドなどの特定の要素、その他の UI 要素のすべてを受け入れることができます。
特定の要素を見つけるには、XCTestクエリを使用します。詳細はAppleのドキュメントでご確認ください:
スキャンを実行する前に、スキャン対象の要素が存在し、画面上に表示されていることを確認することをお勧めします。これにより、フレームワークが要素を見つけて適切な結果を返せるようになります。スキャン時に要素が画面上に見つからない場合、不完全な結果が返信される可能性があります。
例
以下に「メニュー」というタイトルのボタンを探し、その存在を確認してスキャンを実行するテストの例を示します。これは基本的なクエリの例ですが、子要素や子孫要素を含むより複雑なクエリも可能です。
var axe: AxeDevTools?
var app = XCUIApplication()
override func setUpWithError() throws {
// log in to AxeDevTools
axe = try? AxeDevTools.startScanSession(apiKey: "<DEQUE_APIKEY>",
projectId: "<DEVHUB_PROJECT_ID>")
// launch app and prevent tests from continuing if element is not found
app.launch()
continueAfterFailure = true
}
func testAccessibility() throws {
// finds a button with the title or accessibilityIdentifier "Menu"
// .firstMatch ensures that the test doesn't fail if multiple matching elements exist
let buttonToTest = app.buttons["Menu"].firstMatch
XCTAssert(buttonToTest.isHittable, "Button 'Menu' does not exist on the screen.")
let result = try axe.run(onElement: buttonToTest)
try axe.postResult(result)
}部分的な画面スキャンで実行可能なルールは?
すべてのルールは、ユーザーが明示的に無視する場合を除き、部分的な画面スキャンで実行されます。しかし、ScreenTitle と InScrollView のルールは、合格または不合格の判断に必要なすべての情報が部分的な画面スキャンに含まれていない場合、NeedsReview を返すことがあります。
