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
Asked
Active
Viewed 1.1k times
3 Answers
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
-
-
2here is my codeoverride `func setUp() { super.setUp() NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardDidShow", name: UIKeyboardDidShowNotification, object: XCUIApplication()) }` – user2823793 Jan 11 '16 at 15:38
-
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
-
could you modify your answer above to read `private func...` instead of `private fund...`" – Professor Tom Jan 08 '21 at 19:26
-