2015-11-18 7 views
7

Ich benutze die in Xcode und XCTest integrierte UI Test Case Klasse, um die App UI zu testen. Ich möchte so etwas wie dies testen:Swift UI Testing Zugriffszeichenfolge im TextField

app = XCUIApplication() 
    let textField = app.textFields["Apple"] 
    textField.typeText("text_user_typed_in") 
    XCTAssertEqual(textField.text, "text_user_typed_in") 

Ich habe versucht, die textField.value wie! String Methode; es funktioniert nicht. Ich habe auch versucht, die neue asynchrone Methode mit expectationForPredicate(), und es wird zu einem Timeout führen.

Irgendeine Idee, wie man das macht? Oder eine Validierung dieser Art ist mit UI Test nicht möglich und ich konnte nur Black-Box-Tests schreiben?

+0

Thx @Charles A. für den Hinweis, dass das Problem das TextField nicht existiert. Ich bin verwirrt, weil ich die TypeText-Methode aufrufen und ich kann sehen, dass der Text in das TextField eingegeben wird. – leoluo

Antwort

17

ich diesen Code verwenden und es funktioniert gut:

textField.typeText("value") 
XCTAssertEqual(textField.value as! String, "value") 

Wenn Sie tun etwas ähnliches und es funktioniert nicht, würde ich überprüfen, um sicherzustellen, dass Ihr Textfield Element tatsächlich existiert:

XCTAssertTrue(textField.exists, "Text field doesn't exist") 
textField.typeText("value") 
XCTAssertEqual(textField.value as! String, "value", "Text field value is not correct") 
+0

Ja, du hast Recht. Das TextField existiert nicht. Aber ich verstehe das nicht: Ich rufe den typeText auf textField auf und ich kann sehen, dass der Text in das textField eingegeben wird. – leoluo

+0

Soll ich die Async-Methode verwenden? – leoluo

+0

Ist der anfängliche Text "Apple"? Das Standardverhalten ist wahrscheinlich, dass die Eingabehilfe des Feldes der Inhalt ist, daher schlägt die Abfrage beim zweiten Mal fehl, wenn Sie versuchen, ein Element aufzulösen. –

Verwandte Themen