Ich habe einen Test wie folgt:
let navnTextField = app.textFields["First Name"]
let name = "Henrik"
navnTextField.tap()
navnTextField.typeText("Henrik")
XCTAssertEqual(navnTextField.value as? String, name)
Das Problem ist, dass mein iPhone Simulator
aufgrund der Systemeinstellungen standardmäßig eine polnische Tastatur besitzt und "Henrik" automatisch durch "Autokorrektur" in "ha" geändert wird.
Eine einfache Lösung besteht darin, die polnische Tastatur aus dem iOS Settings
zu entfernen. Diese Lösung löst das Problem jedoch nicht, da iPhone Simulator
zurückgesetzt werden kann und der Test erneut fehlschlägt.
Gibt es eine Möglichkeit, die Autokorrektur vor dem Testfall oder eine andere Möglichkeit zur Eingabe von Text in ein Textfeld vorzunehmen.
Es gibt eine Problemumgehung, um UIPasteboard zur Eingabe von Eingabetext zu verwenden:
let navnTextField = app.textFields["First name"]
navnTextField.tap()
UIPasteboard.generalPasteboard().string = "Henrik"
navnTextField.doubleTap()
app.menuItems.elementBoundByIndex(0).tap()
XCTAssertEqual(navnTextField.value as? String, name)
Sie können link mit description als Workaround für die sichere Eingabe in GM überprüfen.
Bearbeiten
Zur besseren Lesbarkeit können Sie stattdessen app.menuItems.elementBoundByIndex(0).tap()
app.menuItems["Paste"].tap()
ausführen.
Hier ist eine kleine Erweiterung von XCUIElement, um dies zu erreichen
extension XCUIElement {
// The following is a workaround for inputting text in the
//simulator when the keyboard is hidden
func setText(text: String, application: XCUIApplication) {
UIPasteboard.generalPasteboard().string = text
doubleTap()
application.menuItems["Paste"].tap()
}
}
Es kann so verwendet werden
let app = XCUIApplication()
let enterNameTextField = app.otherElements.textFields["Enter Name"]
enterNameTextField.tap()
enterNameTextField.setText("John Doe", app)
Momentan verwenden Sie Swift 4 für Xcode 10 Sie können jetzt typeText(String)
wie folgt verwenden
let app = XCUIApplication()
let usernameTextField = app.textFields["Username"]
usernameTextField.typeText("Caseyp")
Tweaked:
code:
extension XCUIApplication {
// The following is a workaround for inputting text in the
//simulator when the keyboard is hidden
func setText(_ text: String, on element: XCUIElement?) {
if let element = element {
UIPasteboard.general.string = text
element.doubleTap()
self.menuItems["Select All"].tap()
self.menuItems["Paste"].tap()
}
}
}
Laufen mit:
self.app?.setText("Lo", on: self.app?.textFields.firstMatch)
Verwenden Sie für Swift v3 den neuen sintax (Antwort von @mike):
extension XCUIElement {
func setText(text: String?, application: XCUIApplication) {
tap()
UIPasteboard.general.string = text
doubleTap()
application.menuItems.element(boundBy: 0).tap()
}
}
und benutze es:
let app = XCUIApplication()
let enterNameTextField = app.otherElements.textFields["Enter Name"]
enterNameTextField.tap()
enterNameTextField.setText(text: "John Doe", application: app)