Il est possible que vous demandiez comment accéder à l'état de l'application à partir d'un test d'interface utilisateur ou simplement en testant l'interface utilisateur.
Je pense que c'est une question assez intéressante, donc je vais répondre parce que c'est quelque chose que je ne connais pas beaucoup et qui, je l'espère, invitera d'autres personnes à intervenir et à corriger.
Contexte: Une magie de base 8 Ball projet
Je mis en place un projet de base avec un contrôleur de vue qui contient deux vues: une étiquette et un bouton. En appuyant sur le bouton Mises à jour du texte de l'étiquette avec un message aléatoire:
import UIKit
struct EightBall {
static let messages = ["Yes", "No", "It's not certain"]
var newMessage: String {
let randomIndex = Int(arc4random_uniform(UInt32(EightBall.messages.count)))
return EightBall.messages[randomIndex]
}
}
class ViewController: UIViewController {
let ball = EightBall()
@IBOutlet weak var messageLabel: UILabel!
@IBAction func shakeBall(_ sender: Any) {
messageLabel.text = ball.newMessage
}
}
Un test UI de base
Voici un test de l'interface utilisateur commentée montrant comment automatiser tapant sur le bouton, et saisir la valeur de l'étiquette, et puis en vérifiant que la valeur de l'étiquette est un message valide.
import XCTest
class MagicUITests: XCTestCase {
// This method is called before the invocation of each test method in the class.
override func setUp() {
super.setUp()
// In UI tests it is usually best to stop immediately when a failure occurs.
continueAfterFailure = true
// UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
XCUIApplication().launch()
}
func testValidMessage() {
// Grab reference to the application
let app = XCUIApplication()
// #1
// Grab reference to the label with the accesability identifier 'MessageLabel'
let messagelabelStaticText = app.staticTexts["MessageLabel"]
// Tap the button with the text 'Shake'
app.buttons["Shake"].tap()
// get the text of the label
let messageLabelText = messagelabelStaticText.label
// #2
// check if the text in the label matches one of the allowed messages
let isValidMessage = EightBall.messages.contains(messageLabelText)
// test will fail if the message is not valid
XCTAssert(isValidMessage)
}
}
A # 1 L'approche que j'utilise pour obtenir l'étiquette est d'accéder aux étiquettes accessibilityIdentifier
propriété. Pour ce projet, je suis entré dans ce scénario, mais si vous définissez vos points de vue dans le code, vous pouvez directement définir la propriété accessibilityIdentifier
vous-même. L'autre chose qui prête à confusion ici est que pour avoir accès aux éléments de la vue, vous ne naviguez pas dans la hiérarchie des vues, mais un proxy de la hiérarchie, c'est pourquoi la syntaxe pour obtenir un label est l'impair 'staticTexts »(Les références au bas du message expliquent cela plus en détail).
Pour # 2 Je suis inspectant la structure définie dans mon projet. Dans un test unitaire, vous pouvez accéder à cette importation @testable import ProjectName
mais malheureusement, cette approche ne fonctionne pas pour le test de l'interface utilisateur. Au lieu de cela, vous devrez vous assurer que tout fichier source auquel vous souhaitez accéder à partir du test de l'interface utilisateur est inclus en tant que cible.Vous pouvez le faire dans Xcode de ce panneau en vérifiant le nom de votre test de l'interface utilisateur:
Plus de références de test de l'interface utilisateur:
Copie possible de [Comment vérifier si un élément est dans un tableau] (http://stackoverflow.com/questions/24102024/how -to-check-if-an-element-is-in-an-array) –
assert vrai sur la méthode contains un tableau peut-être? – DatForis
Meta conseil déplacé d'une réponse: Bienvenue dans Stack Overflow! Vous obtenez quelques downvotes parce que les gens voient la question comme «comment puis-je vérifier si un tableau contient une valeur» qui a déjà été posée plusieurs fois. La prochaine question que vous posez jette un coup d'oeil rapide sur ["comment poser une bonne question"] (https://stackoverflow.com/help/how-to-ask) pour s'assurer que ce n'est pas mal interprété. – halfer