我得到了如下测试:
let navnTextField = app.textFields["First Name"]
let name = "Henrik"
navnTextField.tap()
navnTextField.typeText("Henrik")
XCTAssertEqual(navnTextField.value as? String, name)
问题是默认情况下我的iPhone Simulator
因为系统设置和" Henrik"而得到了波兰语键盘。自动更改为" ha"通过自动更正。
简单的解决方案是从iOS Settings
删除波兰语键盘。但是,此解决方案无法解决问题,因为iPhone Simulator
可以重置,然后测试将再次失败。
有没有办法在测试用例之前设置自动更正或以其他方式将文本输入到文本字段。
答案 0 :(得分:20)
这是XCUIElement上的一个小扩展,用于完成此任务
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()
}
}
可以像这样使用
let app = XCUIApplication()
let enterNameTextField = app.otherElements.textFields["Enter Name"]
enterNameTextField.tap()
enterNameTextField.setText("John Doe", app)
答案 1 :(得分:12)
使用UIPasteboard提供输入文本有一种解决方法:
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)
您可以查看link with description as a workaround for secure input in GM
修改强>
为了更好的可读性而不是app.menuItems.elementBoundByIndex(0).tap()
你可以做app.menuItems["Paste"].tap()
。
答案 2 :(得分:2)
当前在Xcode 10上使用Swift 4
您现在可以像这样使用typeText(String)
let app = XCUIApplication()
let usernameTextField = app.textFields["Username"]
usernameTextField.typeText("Caseyp")
答案 3 :(得分:0)
对于swift v3,需要使用新的sintax(由@mike回答):
extension XCUIElement {
func setText(text: String?, application: XCUIApplication) {
tap()
UIPasteboard.general.string = text
doubleTap()
application.menuItems.element(boundBy: 0).tap()
}
}
并使用它:
let app = XCUIApplication()
let enterNameTextField = app.otherElements.textFields["Enter Name"]
enterNameTextField.tap()
enterNameTextField.setText(text: "John Doe", application: app)
答案 4 :(得分:0)
已调整:
代码:
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()
}
}
}
运行方式:
self.app?.setText("Lo", on: self.app?.textFields.firstMatch)