Xcode UI Testing - 使用typeText()方法和autocorrection键入文本

Apa*_*pan 16 uitextfield xctest ios9 xcode-ui-testing

我有一个如下测试:

let navnTextField = app.textFields["First Name"]
let name = "Henrik"
navnTextField.tap()
navnTextField.typeText("Henrik")
XCTAssertEqual(navnTextField.value as? String, name)
Run Code Online (Sandbox Code Playgroud)

问题是,默认情况下iPhone Simulator,由于系统设置,我有波兰语键盘,"Henrik"会自动更改为"ha".

简单的解决方案是从中删除波兰语键盘iOS Settings.然而,该解决方案没有解决问题,因为iPhone Simulator可以重置然后测试将再次失败.

有没有办法在测试用例之前设置自动更正或以其他方式将文本输入到文本字段.

mik*_*ike 21

这是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()
    }
}
Run Code Online (Sandbox Code Playgroud)

它可以像这样使用

let app = XCUIApplication()
let enterNameTextField =  app.otherElements.textFields["Enter Name"]
enterNameTextField.tap()
enterNameTextField.setText("John Doe", app)
Run Code Online (Sandbox Code Playgroud)
  • 感谢@Apan的实施


Apa*_*pan 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)
Run Code Online (Sandbox Code Playgroud)

您可以检查链接与说明作为GM中安全输入的变通方法

编辑

为了更好的可读性,app.menuItems.elementBoundByIndex(0).tap() 你可以做到app.menuItems["Paste"].tap().


Dan*_*ard 5

当前在Xcode 10上使用Swift 4,您现在可以typeText(String)像这样 使用 let app = XCUIApplication() let usernameTextField = app.textFields["Username"] usernameTextField.typeText("Caseyp")

  • 对于 Xcode 13.3.1,在执行“typeTest”之前,我们必须关注该字段。因此在最后一行之前添加“usernameTextField.tap()”。 (2认同)