在 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 子句来在它第一次弹出时处理它,但我想知道是否有人找到了禁用这些东西的方法用于模拟器测试:

额外奖励积分:这些自动化测试 运行 作为自动化管道的一部分。作为其中的一部分,假设这些测试 运行 是针对一个全新的模拟器集(因此我们不能重复使用现有的模拟器)。具体来说,我们会在每个 运行 之前清除模拟器(使用擦除所有内容和设置)。因此,无论哪种解决方案都需要完全可移植并且需要 0 人工干预。

还有别的吗?

您可以 运行 测试已配置模拟器的克隆(使用 xcrun simctl clone ...

如果你想从头开始创建模拟器,然后在模拟器文件夹中添加一个 git 存储库,根据需要配置它(在你的情况下跳过键盘启动)并使用 git status 知道什么应更改以便在脚本中配置您的模拟器。

详细:

  1. 创建新模拟器
  2. 从其文件夹创建一个新的 git 存储库
  3. 按照您喜欢的方式配置模拟器
  4. 使用 git
  5. 在模拟器中观察变化
  6. 基于这些更改,将步骤添加到您的 CI/CD 运行ner 脚本(之前测试 运行ning)

我认为只测试对话框并在出现时将其关闭应该是最好的方法。

作为初始工具设置的一部分,您还可以启动苹果工具并在擦除和重置操作完成后触发弹出窗口。

例如

  1. xc运行 simctl erase deviceuuid
  2. xcodebuild test-without-building test name:DismissKeyboardTour destination=deviceuuid
  3. xcodebuild test-without-building mytestsuite destination=deviceuuid

我认为您只需要为每个测试套件执行一次 运行(例如所有测试)