19

我有一个如下测试:

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可以重置,然后测试将再次失败。

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

4

5 回答 5

28

这是 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 的实施
于 2016-01-07T20:25:56.763 回答
16

有一种解决方法可以使用 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)

您可以检查带有描述的链接作为 GM 中安全输入的解决方法

编辑

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

于 2015-09-22T08:42:37.510 回答
13

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

于 2018-11-15T19:34:13.163 回答
2

对于 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)
于 2018-06-19T10:48:25.177 回答
1

调整:

  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)
于 2018-10-17T08:53:58.817 回答