在 XCUItest 中处理 "New Functionality" 飞出 iOS 更新
Handling "New Functionality" fly outs in XCUItest for iOS updates
我有一组 XCUI 测试,可以在我的应用程序中使用一些功能。目前,我有以下功能可以调出键盘,输入一些内容,然后点击 "Search"(在这种情况下相当于 Enter。
func clickSearchOnKeyboard(_ app: XCUIApplication) {
XCTAssert(app.staticTexts["Search"].waitForExistence(timeout: 10))
app.textFields["SearchItemView.SearchTextFieldID"].clearAndEnterText(testData.productData.valid.styleColor)
XCUIApplication().buttons["Search"].tap()
}
但是,将模拟器更新到 iOS 13 后,此测试将失败,因为现在当第一次拉起键盘时,我们会看到一个 "What's New" 飞出窗口,解释新的滑动功能。
我想我可以在我的测试代码中添加一个 If
子句来在它第一次弹出时处理它,但我想知道是否有人找到了禁用这些东西的方法用于模拟器测试:
Init()
方法中的某些内容会禁用 "What's New" 类型的弹出窗口?
- 一些聪明的功能,总能拦截这个事件并点击"Continue"?
额外奖励积分:这些自动化测试 运行 作为自动化管道的一部分。作为其中的一部分,假设这些测试 运行 是针对一个全新的模拟器集(因此我们不能重复使用现有的模拟器)。具体来说,我们会在每个 运行 之前清除模拟器(使用擦除所有内容和设置)。因此,无论哪种解决方案都需要完全可移植并且需要 0 人工干预。
还有别的吗?
您可以 运行 测试已配置模拟器的克隆(使用 xcrun simctl clone ...
)
如果你想从头开始创建模拟器,然后在模拟器文件夹中添加一个 git 存储库,根据需要配置它(在你的情况下跳过键盘启动)并使用 git status
知道什么应更改以便在脚本中配置您的模拟器。
详细:
- 创建新模拟器
- 从其文件夹创建一个新的 git 存储库
- 按照您喜欢的方式配置模拟器
- 使用 git
在模拟器中观察变化
- 基于这些更改,将步骤添加到您的 CI/CD 运行ner 脚本(之前测试 运行ning)
我认为只测试对话框并在出现时将其关闭应该是最好的方法。
作为初始工具设置的一部分,您还可以启动苹果工具并在擦除和重置操作完成后触发弹出窗口。
例如
- xc运行 simctl erase deviceuuid
- xcodebuild test-without-building test name:DismissKeyboardTour destination=deviceuuid
- xcodebuild test-without-building mytestsuite destination=deviceuuid
我认为您只需要为每个测试套件执行一次 运行(例如所有测试)
我有一组 XCUI 测试,可以在我的应用程序中使用一些功能。目前,我有以下功能可以调出键盘,输入一些内容,然后点击 "Search"(在这种情况下相当于 Enter。
func clickSearchOnKeyboard(_ app: XCUIApplication) {
XCTAssert(app.staticTexts["Search"].waitForExistence(timeout: 10))
app.textFields["SearchItemView.SearchTextFieldID"].clearAndEnterText(testData.productData.valid.styleColor)
XCUIApplication().buttons["Search"].tap()
}
但是,将模拟器更新到 iOS 13 后,此测试将失败,因为现在当第一次拉起键盘时,我们会看到一个 "What's New" 飞出窗口,解释新的滑动功能。
我想我可以在我的测试代码中添加一个 If
子句来在它第一次弹出时处理它,但我想知道是否有人找到了禁用这些东西的方法用于模拟器测试:
Init()
方法中的某些内容会禁用 "What's New" 类型的弹出窗口?- 一些聪明的功能,总能拦截这个事件并点击"Continue"?
额外奖励积分:这些自动化测试 运行 作为自动化管道的一部分。作为其中的一部分,假设这些测试 运行 是针对一个全新的模拟器集(因此我们不能重复使用现有的模拟器)。具体来说,我们会在每个 运行 之前清除模拟器(使用擦除所有内容和设置)。因此,无论哪种解决方案都需要完全可移植并且需要 0 人工干预。
还有别的吗?
您可以 运行 测试已配置模拟器的克隆(使用 xcrun simctl clone ...
)
如果你想从头开始创建模拟器,然后在模拟器文件夹中添加一个 git 存储库,根据需要配置它(在你的情况下跳过键盘启动)并使用 git status
知道什么应更改以便在脚本中配置您的模拟器。
详细:
- 创建新模拟器
- 从其文件夹创建一个新的 git 存储库
- 按照您喜欢的方式配置模拟器
- 使用 git 在模拟器中观察变化
- 基于这些更改,将步骤添加到您的 CI/CD 运行ner 脚本(之前测试 运行ning)
我认为只测试对话框并在出现时将其关闭应该是最好的方法。
作为初始工具设置的一部分,您还可以启动苹果工具并在擦除和重置操作完成后触发弹出窗口。
例如
- xc运行 simctl erase deviceuuid
- xcodebuild test-without-building test name:DismissKeyboardTour destination=deviceuuid
- xcodebuild test-without-building mytestsuite destination=deviceuuid
我认为您只需要为每个测试套件执行一次 运行(例如所有测试)