web-dev-qa-db-ja.com

アクセシビリティによるiOS XCUITestsアクセス要素

ユーザーがaccessibilityLabelまたは識別子によってボタンが存在することを確認するにはどうすればよいですか?

func testExitsButton() {
    XCTAssertTrue(app.windows.containing(.button, identifier: "Button Text").element.exists)
    XCTAssertTrue(app.buttons["Button Text"].exists)
    XCTAssertTrue(app.buttons["test"].exists) <- I want this, instead of accessing the text property I want by specific id, maybe the text property override the accessibilityLabel?
}

enter image description here

12
Godfather

アプリケーションコードでアクセシビリティ識別子を設定し、テストでその識別子を使用してボタンを検索します。

// app code
let button: UIButton!
button.accessibilityIdentifier = "myButton"

// UI test code
func testMyButtonIsDisplayed() {
    let app = XCUIApplication()
    let button = app.buttons["myButton"]
    XCTAssertTrue(button.exists)
}

アクセシビリティ識別子は、ボタン上のテキストとは独立して設定され、アクセシビリティラベルとは独立しています。 UI要素の識別子をアクセシビリティlabelとして配置することは、ベストプラクティスではありません。これは、VoiceOverユーザーがアクセシビリティラベルを読み取って要素を説明するためです。

21
Oletha

重要な注意:スーパービューがアクセス可能に設定されている場合、XCUITestはそのサブビューにアクセスできない場合があります。

前述のように、ストーリーボードを介して、またはプログラムでアクセシビリティを設定することにより、要素にアクセスできます。 XCUITestが要素をどのように見るかを記録するために、カーソルが接頭辞「test」で始まる関数内にあるときに記録ボタンをクリックできます。いくつかのクリーンアップ(コマンドシフトk)と、記録ボタンが利用可能になるまで数分かかることがあります。ストーリーボードからツリーを降ろして、element(boundBy:Int)、children(matching:.textField)などのXCUITest関数を使用することもできます。XCUIApplication()。tables.cells.taining(.button、識別子:「id」)。その後は簡単な部分です。ブール値を返す.existsを使用します。

enter image description here

11
ScottyBlades

追加| 「accessibilityIdentifier」文字列テスト|アクセシビリティラベルではなく、ナビゲーションバーのユーザー定義ランタイム属性

7
Stefan