Swift UI Testing Строка доступа в TextField
Я использую класс тестового примера UI, интегрированный в Xcode и XCTest для тестирования пользовательского интерфейса приложения. Я хочу проверить что-то вроде этого:
app = XCUIApplication()
let textField = app.textFields["Apple"]
textField.typeText("text_user_typed_in")
XCTAssertEqual(textField.text, "text_user_typed_in")
Я пробовал textField.value как! String; это не работает.
Я также попытался использовать новый метод async с expectationForPredicate(), и это приведет к таймауту.
Есть идеи, как это сделать?
Или проверка этого типа невозможна при тестировании пользовательского интерфейса, и я могу только писать тесты с "черным ящиком"?
Ответы
Ответ 1
Я использую этот код, и он отлично работает:
textField.typeText("value")
XCTAssertEqual(textField.value as! String, "value")
Если вы делаете что-то подобное, и оно не работает, я бы проверил, чтобы убедиться, что ваш элемент textField действительно существует:
XCTAssertTrue(textField.exists, "Text field doesn't exist")
textField.typeText("value")
XCTAssertEqual(textField.value as! String, "value", "Text field value is not correct")
Ответ 2
Swhift 4.2. Вам нужно очистить существующее значение в textField и вставить новое значение.
let app = XCUIApplication()
let textField = app.textFields["yourTextFieldValue"]
textField.tap()
textField.clearText(andReplaceWith: "VALUE")
XCTAssertEqual(textField.value as! String, "VALUE", "Text field value is not correct")
где clearText
- это метод расширения XCUIElement
:
extension XCUIElement {
func clearText(andReplaceWith newText:String? = nil) {
tap()
press(forDuration: 1.0)
var select = XCUIApplication().menuItems["Select All"]
if !select.exists {
select = XCUIApplication().menuItems["Select"]
}
//For empty fields there will be no "Select All", so we need to check
if select.waitForExistence(timeout: 0.5), select.exists {
select.tap()
typeText(String(XCUIKeyboardKey.delete.rawValue))
} else {
tap()
}
if let newVal = newText {
typeText(newVal)
}
}
}
Ответ 3
следующее работает в Xcode 10.3, работающем на macOS 10.14.3, для приложения iOS, работающего на iOS 12.4:
XCTAssert( app.textFields["testTextField"].exists, "test text field does not exist" )
let tf = app.textFields["testTextField"]
tf.tap() // must give text field keyboard focus!
tf.typeText("Hello!")
XCTAssert( tf.exists, "tf exists" ) // text field still exists
XCTAssertEqual( tf.value as! String, "Hello!", "text field has proper value" )