2017-05-31 1 views
2

C'est ce que j'ai à ce jour et je suis tout simplement essayer d'obtenir le résultat qui est sortie dans une étiquette et de le tester par rapport aux résultats fixés:Comment récupérer des données variables à partir d'une étiquette dans les tests UI

func testExample() { 

    let app = XCUIApplication() 
    let enterRomanNumeralsHereTextField = app.textFields["Enter roman numerals here"] 
    enterRomanNumeralsHereTextField.tap() 
    let convertButton = app.buttons["Convert"] 

    //1 
    enterRomanNumeralsHereTextField.typeText("LL") 
    convertButton.tap() 
    XCTAssertTrue(app.staticTexts.element(matching:.any, identifier: "Roman Numerals").label == "NotValidRomanNumber") 


    //2 
    enterRomanNumeralsHereTextField.typeText("LXXXIX") 
    convertButton.tap() 
    XCTAssertEqual(app.otherElements.containing(.staticText, identifier:"Roman Numerals").element.value as! String, "89") 

    //3 
    enterRomanNumeralsHereTextField.typeText("") 
    enterRomanNumeralsHereTextField.typeText("LXXVIII") 
    convertButton.tap() 
    XCTAssertEqual(app.otherElements.containing(.staticText, identifier:"Roman Numerals").element.value as! String, "") 



    // Use recording to get started writing UI tests. 
    // Use XCTAssert and related functions to verify your tests produce the correct results. 
} 

La première tentative (étiquetée 1) me donne une erreur de construction disant «ne peut pas appeler la valeur du type non fonctionnel XCUIElement La deuxième tentative se produit mais le test échoue car même si l'étiquette produit effectivement la bonne valeur, le test lit l'étiquette comme vide qui nous amène à ma troisième tentative qui passe le test parce que je l'ai comparé à une étiquette vierge, ce qui est ce que son affichage

Donc, comme je l'ai dit plus haut, je me demandais comment extraire exactement la valeur de l'étiquette qui est le résultat d'un "calcul" ou d'un appui sur un bouton.

Répondre

6

Malheureusement lorsqu'un UILabel est accessible dans un UITest value propriété du XCUIElement n'est pas définie avec la propriété text du UILabel. C'est toujours vide.

XCUIElement possède également une propriété label que vous pouvez utiliser à des fins spécifiques. Vous devez seulement vous assurer que vous ne définissez pas le accessibilityLabel sur votre UILabel. Utilisez accessibilityIdentifier à la place:

Dans votre application:

label.accessibilityIdentifier = "Roman Numerals" 

Dans votre UITest:

XCTAssertEqual(app.staticTexts.element(matching:.any, identifier: "Roman Numerals").label, "89") 
+0

J'ai eu vraiment beaucoup de mal avec elle. Merci. – andrei

+0

@joem Comment avez-vous découvert la propriété à utiliser? – tomkaith13

+0

@ tomkaith13 J'ai regardé'XCUIElementAttributes 'auquel 'XCUIElement' se conforme. Ce protocole définit les attributs exposés pour tous les éléments de l'interface utilisateur. Ensuite, j'ai regardé les valeurs de ces attributs au cas où vous interrogez un'UILabel '. – joern