2017-05-28 2 views
2

Je me suis récemment heurté à une situation où je devais être capable de vérifier l'état activé/désactivé actuel (pas si elle est activée pour l'interaction utilisateur) d'un UISwitch dans un compartiment existant de XCUITests, et non un XCTest à un état prédéterminé. J'avais ajouté la restauration de l'état de l'application à une ancienne application existante et cela interférait maintenant avec un certain nombre de cas de test existants entre les exécutions qui attendaient les UISwitches dans des états par défaut particuliers. Contrairement à XCTest, dans XCUITest, vous n'avez pas directement accès à l'état UISwitch.Depuis un XCUITest, comment puis-je vérifier l'état activé/désactivé d'un UISwitch?

Comment cet état est-il déterminé en Objective-C pour un XCUITest?

Répondre

4

A défaut de trouver cela partout évident je suis tombé sur ce blog pour une situation similaire pour la langue Swift. Avec cette information j'ai testé et vérifié deux approches pour résoudre mon problème.

1) Affirmer si l'état est activé ou désactivé

XCUIElement *mySwitch = app.switches[@"My Switch Storyboard Accessibility Label"]; 
// cast .value to (NSString *) and test for @"0" if off state 
XCTAssertEqualObjects((NSString *)mySwitch.value, @"0", @"Switch should be off by default."); // use @"1" to test for on state 

2) Pour tester si l'état du commutateur est allumé ou éteint puis basculer son état

XCUIElement *mySwitch = app.switches[@"My Switch Storyboard Accessibility Label"]; 
// cast .value to (NSString *) and test for @"0" if off state 
if (![(NSString *)mySwitch.value isEqualToString:@"0"]) 
     [mySwitch tap]; // tap if off if it is on 

En utilisant l'approche (2), j'ai été en mesure de forcer un état par défaut pour tous les UISwitches entre les exécutions de test et d'éviter l'interférence de restauration d'état.