17

I am writing a UI text in swift under the new Xcode 7 UI test framework. the requirement is to test whether the system keyboard is shown in an app. can someone give me a clue on how to do that? thanks

user2823793
  • 203
  • 1
  • 2
  • 5
  • BTW, when I was trying to look for the accessibility in the debug mode of the keyboard, I can't not see it in the app. so I guess that since it is a system keyboard, so we can not see it – user2823793 Jan 08 '16 at 19:45

3 Answers3

32

Try this check:

let app = XCUIApplication()
XCTAssert(app.keyboards.count > 0, "The keyboard is not shown")

Or check for specific keyboard keys like:

let app = XCUIApplication()
XCTAssert(app.keyboards.buttons["Next:"].exists, "The keyboard has no Next button")

You can also control interactions on the keyboard:

let app = XCUIApplication()
app.keyboards.buttons["Next:"].tap()
Joris Timmerman
  • 1,482
  • 14
  • 25
1

Add two observers

NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardVisible:", name: UIKeyboardDidShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardHidden:", name: UIKeyboardDidHideNotification, object: nil)

func keyboardVisible(notif: NSNotification) {
    print("keyboardVisible")
}

func keyboardHidden(notif: NSNotification) {
    print("keyboardHidden")
}

Whenever the keyboard is visible keyboardVisible will be called and whenever the keyboard is hidden keyboardHidden will be called.

Rashwan L
  • 38,237
  • 7
  • 103
  • 107
0

I found the keyboard count check didnt work on one of my apps (it returned a count of 1 even when the keyboard was hidden), so amended it slightly:

private func isKeyboardShown() -> Bool {
    return XCUIApplication().keyboards.keys.count > 0
}
Charlie S
  • 4,366
  • 6
  • 59
  • 97