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

时间:2015-09-22 08:26:59

标签: 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 Simulator因为系统设置和" Henrik"而得到了波兰语键盘。自动更改为" ha"通过自动更正。

简单的解决方案是从iOS Settings删除波兰语键盘。但是,此解决方案无法解决问题,因为iPhone Simulator可以重置,然后测试将再次失败。

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

5 个答案:

答案 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)
  • 来自@Apan的实施

答案 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)

已调整:

  1. 正在扩展应用程序,这对我来说更有意义
  2. 清空现有字段的内容

代码:

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)