lei*_*zeQ 20 testing user-interface ios swift xcode-ui-testing
我刚开始在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()
Run Code Online (Sandbox Code Playgroud)
我可以这样做,因为我的ViewController正在拦截触摸:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
view.endEditing(false)
super.touchesBegan(touches, withEvent: event)
}
Run Code Online (Sandbox Code Playgroud)
我对我的解决方案并不满意,在UI测试期间有没有其他方法可以隐藏键盘?
bbj*_*jay 20
如果您已设置文本字段以在委托方法中重新签名FirstResponder(通过textField.resignFirstResponder()或self.view.endEditing(true))textFieldShouldReturn(),那么
textField.typeText("\n")
Run Code Online (Sandbox Code Playgroud)
会做的.
使用 Swift 4.2,您现在可以使用以下代码片段来完成此任务:
let app = XCUIApplication()
if app.keys.element(boundBy: 0).exists {
app.typeText("\n")
}
Run Code Online (Sandbox Code Playgroud)
小智 5
基于对Joe的博客提出的问题,我遇到了一个问题,即在模拟器上运行几次后,键盘无法使用这段代码隐藏:
XCUIApplication().keyboard.buttons["Hide keyboard"]
Run Code Online (Sandbox Code Playgroud)
所以,我改成了:(谢谢乔)
XCUIApplication().keyboard.buttons["Hide keyboard"]
let firstKey = XCUIApplication().keys.elementBoundByIndex(0)
if firstKey.exists {
app.typeText("\n")
}
Run Code Online (Sandbox Code Playgroud)
我在这里尝试做的是在点击隐藏按钮后检测键盘是否仍然打开,如果它已经打开,我键入一个"\n",在我的情况下也会关闭键盘.
这也很棘手,因为有时模拟器失去了键盘输入的焦点,这可能会使测试失败,但根据我的经验,失败率低于我采取的其他方法.
我希望这可以提供帮助.
我总是使用它来以编程方式在Swift UITesting中隐藏键盘:
XCUIApplication().keyboards.buttons["Hide keyboard"].tap()
Run Code Online (Sandbox Code Playgroud)
XCUIApplication().toolbars.buttons["Done"].tap()
Run Code Online (Sandbox Code Playgroud)
Swift 5 辅助函数
func dismissKeyboardIfPresent() {
if app.keyboards.element(boundBy: 0).exists {
if UIDevice.current.userInterfaceIdiom == .pad {
app.keyboards.buttons["Hide keyboard"].tap()
} else {
app.toolbars.buttons["Done"].tap()
}
}
}
Run Code Online (Sandbox Code Playgroud)
您问题的答案不在于您的测试代码,而在于您的应用程序代码。如果用户无法使用屏幕上的软件键盘输入文本,然后点击按钮,您应该让测试关闭键盘(用户必须这样做,才能点击按钮)或使视图可滚动。
| 归档时间: |
|
| 查看次数: |
11715 次 |
| 最近记录: |