Test si un élément est visible avec XCode 7 UITest

je veux vérifier si un élément est visible ou non en fonction de ses .hidden propriété mais je ne trouve pas de façon valide de faire cela en utilisant le nouveau test Xcode 7 UI.

j'ai essayé avec myelement.exists et myelement.hittable mais ils ne semblent pas fonctionner comme je l'espérais. Je suppose qu'ils travaillent en conjonction avec le hidden propriété. Un élément caché ne devrait pas exister et n'est pas hittable... mais ce n'est pas le comportement actuel (je peux comprendre l' exists comportement... mais un élément masqué ne doit pas être hittable IMO).

y a-t-il une autre façon de vérifier la valeur "cachée" de la propriété?

25
demandé sur MatterGoal 2015-10-21 00:28:00

6 réponses

à partir de Xcode 7.1 Beta 3, L'essai de L'interface utilisateur ne permet pas actuellement de valider la visibilité d'un élément. Je suggère de classer un radar pour attirer L'attention nécessaire sur Apple.

Xcode 7.1 a corrigé ce problème. hittable vérifie pour voir si l'élément est correct.

26
répondu Joe Masilotti 2015-10-27 10:37:52

1) je teste l'interface utilisateur avec swift dans Xcode 7.3 et j'utilise les deux .hittable and .existe pour tester si une étiquette est cachée ou non et ils fonctionnent tous les deux. Je teste les Termes "vrai" et "faux" pour m'assurer que l'un ou l'autre est d'accord avec le résultat.

j'ai une étiquette dont le texte statique est "Track Info" et doit être caché quand app est chargé, puis plus tard j'appuie sur un bouton pour afficher l'étiquette, Et voici le résultat après que l'étiquette est affichée.

// test échoue

let trackInfoLabel = app.staticTexts["Track info"]
XCTAssertEqual(trackInfoLabel.exists, true)

XCTAssertEqual(trackInfoLabel.hittable, true)

// tests réussis

XCTAssertEqual(trackInfoLabel.exists, false)
XCTAssertEqual(trackInfoLabel.hittable, false)

// tests réussis

let trackInfoLabel = app.staticTexts["Track Info"]
XCTAssertEqual(trackInfoLabel.exists, true)

XCTAssertEqual(trackInfoLabel.hittable, true)

// échec au test

XCTAssertEqual(trackInfoLabel.exists, false)
XCTAssertEqual(trackInfoLabel.hittable, false)

letter on quand j'appuie sur le bouton pour cacher l'étiquette, Tous les résultats tournent à l'opposé. Cela confirme que les deux propriétés (hittable et exists) fonctionnent pour label.paramètre masqué.

2) une autre façon de savoir si un élément est caché, c'est l'élément.cadre.taille.largeur == 0 || élément.cadre.taille.Hauteur = = 0

8
répondu Ohmy 2016-05-09 19:13:44

Xculielement.hittable fonctionne pour moi ( dans mon cas de test particulier où je vérifie plusieurs éléments UIButton pour la visibilité) - tout à fait sûr que ce n'est pas une bonne façon de le faire si

3
répondu Andrew Z 2015-10-27 07:29:34

le code suivant a fonctionné pour moi. A la fin du test, vous pouvez passer le code comme suit:

while ([app.staticTexts matchingIdentifier:@"accesibilityId"].count > 0) {
        sleep(1);
    }
2
répondu alex1704 2015-12-23 04:20:48

ma solution est d'ajouter accessibilityIdentifier dynamicly

func someMethod() {
    label.isHidden = true
    label. accessibilityIdentifier = "isHidden"
}

func someOtherMethod {
    label.isHidden = false
    label. accessibilityIdentifier = "isVisible"
}

et le plus In uit vous pouvez l'utiliser comme

if app.staticTexts["MyLabel"].identifier == "isHidden" {
    dosomething()
}
1
répondu Randja 2018-03-13 10:12:35

je suis d'accord hittable ne fonctionne pas toujours pour les boutons (Swift 2.0, XCode 7.2)

je viens de découvrir que si le bouton est visible, vous pouvez le trouver seulement parmi les boutons, tandis que si le bouton est caché, vous pouvez trouver son étiquette dans staticTexts ainsi!

XCTAssertFalse(app.buttons["Log out"].exists && app.staticTexts["Log out"].exists) // This button is visible (hidden = false)
XCTAssert(app.buttons["Log in"].exists && app.staticTexts["Log in"].exists) // This one is hidden

Hacky, mais travaille pour buttons. Apple devrait juste présenter .hidden ou .visible.hittable et .exists

0
répondu da-na 2016-03-02 21:21:50