在新模拟器上 运行 时关闭 iOS 13 键盘教程
Dismiss iOS 13 keyboard tutorial when running on a fresh simulator
我正在使用 Xcode 11 & iOS 13 作为 UI 测试工作流程的一部分,但是当我第一次使用键盘时,会出现以下内容并通过阻止键盘来中断测试:
UI 测试中的调用代码:
app.textFields.element(boundBy: 0).tap()
模拟器显示的内容:
因为这会挡住按键,所以我的测试会失败。不过,下次我运行在同一个模拟器上测试,就可以正常工作了。
我找到了一个解决方案,既适用于遇到上述情况,也适用于不存在的后续运行。
let continueButton = app.buttons["Continue"]
if continueButton.exists {
continueButton.tap()
}
第一行尝试定位标题为"Continue"的按钮,然后在第二行继续验证该按钮是否存在。如果它确实存在,它将 tap()
关闭提示。
CodeBender 的回答很好,引导了正确的路径,但无法编译,因为 continue
是 Swift 中的保留关键字。另外,最好等待一小段时间让键盘出现。
// Sometimes the Apple Keyboard shows some sort of "Swipe" tutorial. Dismiss it!
private func begoneSwipeTutorial(app: XCUIApplication) {
let continueButton = app.buttons["Continue"]
if continueButton.waitForExistence(timeout: 2.0) {
continueButton.tap()
}
}
// Then use like this
func inputTextWhatever(app: XCUIApplication, element: XCUIElement) {
element.tap()
begoneSwipeTutorial(app: app)
// Do whatever you need to do
}
为了避免可能有多个带有 Continue
标签的按钮时发生冲突,我使用了这种方法:
func dismissKeyboardTutorialIfNeeded() {
let predicate = NSPredicate { (evaluatedObject, _) in
return (evaluatedObject as? XCUIElementAttributes)?.identifier == "UIContinuousPathIntroductionView"
}
let keyboardTutorialView = app.windows.otherElements.element(matching: predicate)
if keyboardTutorialView.exists {
keyboardTutorialView.buttons["Continue"].tap()
}
}
当我在 iOS 13-15 上进行测试时,它运行良好,无需额外等待 tuturial 视图存在,但旧设备可能需要它。
我正在使用 Xcode 11 & iOS 13 作为 UI 测试工作流程的一部分,但是当我第一次使用键盘时,会出现以下内容并通过阻止键盘来中断测试:
UI 测试中的调用代码:
app.textFields.element(boundBy: 0).tap()
模拟器显示的内容:
因为这会挡住按键,所以我的测试会失败。不过,下次我运行在同一个模拟器上测试,就可以正常工作了。
我找到了一个解决方案,既适用于遇到上述情况,也适用于不存在的后续运行。
let continueButton = app.buttons["Continue"]
if continueButton.exists {
continueButton.tap()
}
第一行尝试定位标题为"Continue"的按钮,然后在第二行继续验证该按钮是否存在。如果它确实存在,它将 tap()
关闭提示。
CodeBender 的回答很好,引导了正确的路径,但无法编译,因为 continue
是 Swift 中的保留关键字。另外,最好等待一小段时间让键盘出现。
// Sometimes the Apple Keyboard shows some sort of "Swipe" tutorial. Dismiss it!
private func begoneSwipeTutorial(app: XCUIApplication) {
let continueButton = app.buttons["Continue"]
if continueButton.waitForExistence(timeout: 2.0) {
continueButton.tap()
}
}
// Then use like this
func inputTextWhatever(app: XCUIApplication, element: XCUIElement) {
element.tap()
begoneSwipeTutorial(app: app)
// Do whatever you need to do
}
为了避免可能有多个带有 Continue
标签的按钮时发生冲突,我使用了这种方法:
func dismissKeyboardTutorialIfNeeded() {
let predicate = NSPredicate { (evaluatedObject, _) in
return (evaluatedObject as? XCUIElementAttributes)?.identifier == "UIContinuousPathIntroductionView"
}
let keyboardTutorialView = app.windows.otherElements.element(matching: predicate)
if keyboardTutorialView.exists {
keyboardTutorialView.buttons["Continue"].tap()
}
}
当我在 iOS 13-15 上进行测试时,它运行良好,无需额外等待 tuturial 视图存在,但旧设备可能需要它。