web-dev-qa-db-fra.com

Élément d'accès iOS XCUITests par accessibilité

Comment puis-je affirmer qu'un bouton existe par son étiquette d'accessibilité ou son identifiant?

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

Définissez une accessibilité identifiant dans votre code d'application, puis recherchez le bouton en utilisant cet identifiant dans vos tests.

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

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

L'identifiant d'accessibilité est défini indépendamment du texte sur le bouton et est également indépendant de l'étiquette d'accessibilité. Il n'est pas recommandé de mettre des identifiants pour les éléments d'interface utilisateur comme accessibilité étiquette, car l'étiquette d'accessibilité est lue aux utilisateurs de VoiceOver pour leur expliquer l'élément.

21
Oletha

REMARQUE IMPORTANTE : Si une vue d'ensemble est définie sur accessible, XCUITest peut ne pas être en mesure d'accéder à ses sous-vues.

Vous pouvez accéder à l'élément en définissant son accessibilité via le storyboard ou par programme comme indiqué ci-dessus. Vous pouvez cliquer sur le bouton d'enregistrement lorsque votre curseur se trouve dans une fonction qui commence par le préfixe "test" afin d'enregistrer comment XCUITest voit un élément. Parfois, il faut quelques nettoyages (décalage de commande k) et quelques minutes pour que le bouton d'enregistrement soit disponible. Vous pouvez également descendre votre arbre du storyboard et utiliser les fonctions XCUITest telles que l'élément (boundBy: Int), les enfants (correspondant: .textField), vous pouvez également les enchaîner: XCUIApplication (). Tables.cells.containing (.button, identifiant: "id"). Après c'est la partie facile, utilisez .exists qui retourne un booléen.

enter image description here

11
ScottyBlades

ajouter | Test de chaîne "accessibilityIdentifier" | dans les attributs d'exécution définis par l'utilisateur dans la barre de navigation, plutôt que dans l'étiquette d'accessibilité

7
Stefan