我刚开始在XCode 7中进行UI测试并遇到了这个问题:
我需要在文本字段中输入文本然后单击按钮.不幸的是,这个按钮隐藏在键盘后面,在将文本输入文本字段时出现.XCode正在尝试滚动以使其可见但我的视图不可滚动因此失败.
我目前的解决方案是:
let textField = app.textFields["placeholder"] textField.tap() textField.typeText("my text") app.childrenMatchingType(.Window).elementBoundByIndex(0).tap() // hide keyboard app.buttons["hidden button"].tap()
我可以这样做,因为我的ViewController正在拦截触摸:
override func touchesBegan(touches: Set, withEvent event: UIEvent?) { view.endEditing(false) super.touchesBegan(touches, withEvent: event) }
我对我的解决方案并不满意,在UI测试期间有没有其他方法可以隐藏键盘?
如果您已设置文本字段以在委托方法中重新签名FirstResponder(通过textField.resignFirstResponder()
或self.view.endEditing(true)
)textFieldShouldReturn()
,那么
textField.typeText("\n")
会做的.
基于对Joe的博客提出的问题,我遇到了一个问题,即在模拟器上运行几次后,键盘无法使用这段代码隐藏:
XCUIApplication().keyboard.buttons["Hide keyboard"]
所以,我改成了:(谢谢乔)
XCUIApplication().keyboard.buttons["Hide keyboard"] let firstKey = XCUIApplication().keys.elementBoundByIndex(0) if firstKey.exists { app.typeText("\n") }
我在这里尝试做的是在点击隐藏按钮后检测键盘是否仍然打开,如果它已经打开,我键入一个"\n",在我的情况下也会关闭键盘.
这也很棘手,因为有时模拟器失去了键盘输入的焦点,这可能会使测试失败,但根据我的经验,失败率低于我采取的其他方法.
我希望这可以提供帮助.
我总是使用它来以编程方式在Swift UITesting中隐藏键盘:
XCUIApplication().keyboards.buttons["Hide keyboard"].tap()