Uitextfield Xcode UI测试-使用typeText()方法和自动更正键入文本
我有一个如下的测试:Uitextfield Xcode UI测试-使用typeText()方法和自动更正键入文本,uitextfield,ios9,xctest,xcode-ui-testing,Uitextfield,Ios9,Xctest,Xcode Ui Testing,我有一个如下的测试: let navnTextField = app.textFields["First Name"] let name = "Henrik" navnTextField.tap() navnTextField.typeText("Henrik") XCTAssertEqual(navnTextField.value as? String, name) 问题是,由于系统设置,默认情况下,我的iPhone模拟器具有波兰键盘,并且“Henrik”通过自动更正自动更改为“ha” 简单
let navnTextField = app.textFields["First Name"]
let name = "Henrik"
navnTextField.tap()
navnTextField.typeText("Henrik")
XCTAssertEqual(navnTextField.value as? String, name)
问题是,由于系统设置,默认情况下,我的iPhone模拟器
具有波兰键盘,并且“Henrik”通过自动更正自动更改为“ha”
简单的解决方案是从iOS设置中删除波兰键盘。然而,这个解决方案并不能解决问题,因为iphonesimulator
可以重置,然后测试将再次失败
是否有任何方法可以在测试用例之前设置自动更正,或者以其他方式将文本输入到文本字段 使用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)
你可以查一下
编辑
为了更好的可读性,请改为app.menuItems.elementBoundByIndex(0).tap()
您可以执行
app.menuItems[“粘贴”].tap()
下面是XUIElement上的一个小扩展来完成此操作
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)
- @Apan的实施功不可没
let app = XCUIApplication()
let enterNameTextField = app.otherElements.textFields["Enter Name"]
enterNameTextField.tap()
enterNameTextField.setText(text: "John Doe", application: app)
调整:
self.app?.setText("Lo", on: self.app?.textFields.firstMatch)
目前在Xcode 10上使用Swift 4 您现在可以像这样使用
typeText(String)
让app=xguiapplication()
让usernameTextField=app.textFields[“Username”]
usernameTextField.typeText(“Caseyp”)
doubleTap()如果文本已在此文本字段中,则可能会出现问题,因为ti将选择部分文本只有在点击、doubleTap和粘贴之间插入任意延迟时,此功能才对我有效。我想这可能是一种表演?我的模拟器运行得太慢,跟不上所有的点击?考虑到从Xcode 11开始IDE的状态,这是一个更合适的答案。。。。。
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)