如何检测键盘是不是显示在 Xcode UI 测试中

Posted

技术标签:

【中文标题】如何检测键盘是不是显示在 Xcode UI 测试中【英文标题】:how to Detect if Keyboard is shown in Xcode UI test如何检测键盘是否显示在 Xcode UI 测试中 【发布时间】:2016-01-08 19:43:31 【问题描述】:

我正在新的 Xcode 7 UI 测试框架下快速编写 UI 文本。 要求是测试系统键盘是否显示在应用程序中。 有人可以告诉我如何做到这一点吗?谢谢

【问题讨论】:

顺便说一句,当我试图在键盘的调试模式下寻找可访问性时,我在应用程序中看不到它。所以我猜是因为它是系统键盘,所以我们看不到它 【参考方案1】:

试试这个检查:

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

或检查特定的键盘键,例如:

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

您还可以控制键盘上的交互:

let app = XCUIApplication()
app.keyboards.buttons["Next:"].tap()

【讨论】:

【参考方案2】:

添加两个观察者

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")

只要键盘可见keyboardVisible就会被调用,只要键盘隐藏keyboardHidden就会被调用。

【讨论】:

我在UI测试代码中添加了这个,但是不起作用 这是我的代码覆盖func setUp() super.setUp() NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardDidShow", name: UIKeyboardDidShowNotification, object: XCUIApplication()) 【参考方案3】:

我发现键盘计数检查在我的一个应用程序上不起作用(即使键盘被隐藏,它也返回计数 1),所以稍微修改一下:

private func isKeyboardShown() -> Bool 
    return XCUIApplication().keyboards.keys.count > 0

【讨论】:

您能否将上面的答案修改为private func... 而不是private fund..."

以上是关于如何检测键盘是不是显示在 Xcode UI 测试中的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Swift UI 测试 - 模拟器硬件键盘

创建 UITextView 时,如何在实时视图中显示的 Swift Playgrounds(在 Xcode 上)的 UI 中隐藏键盘?

我的 XCode UI 测试如何检测到屏幕发生了变化?

以编程方式设置 Xcode 模拟器、键盘和 Touch ID 设置,用于 UI 测试

使用登录系统进行 Xcode UI 测试

如何使用 Xcode 7 UI 测试检查表格视图中的单元格是不是可见?