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é?
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.
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
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
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);
}
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()
}
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