You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Xcode UI Testing中如何检测新scene是否成功创建?

多场景创建校验实现方案

XCTest框架中,不管是Mac Catalyst的多窗口还是iPad的多场景,每个活跃的scene都会对应XCUIApplication的windows数组中的一个元素,我们可以通过统计窗口数量、匹配窗口特征来校验新scene是否创建成功。

实现步骤

  • 第一步(前置准备):给你的编辑器场景的根视图添加唯一的可访问性标识,避免统计到系统弹窗、右键菜单等非业务窗口,在你的编辑器根视图控制器的viewDidLoad中添加如下代码:
view.accessibilityIdentifier = "editor_scene_root"
  • 第二步:在测试用例中,先统计触发新建操作前的有效编辑器窗口数量
  • 第三步:触发新建操作后,添加异步等待逻辑,校验有效窗口数量是否符合预期,也可以额外校验新窗口的内容特征

完整测试代码示例

func testNewEditor() throws {
        
    let app = XCUIApplication()
    app.launch()
    
    // 统计初始编辑器窗口数量
    let initialEditorCount = app.windows.containing(.other, identifier: "editor_scene_root").count
    
    #if targetEnvironment(macCatalyst)
    let menuBarsQuery = app.menuBars
    menuBarsQuery.menuBarItems["File"].click()
    menuBarsQuery.menuItems["new_editor"].click()
    #elseif os(iOS) // iPad 平台的新建逻辑示例,可按需补充
    app.toolbars.buttons["new_editor"].tap()
    #endif
    
    // 等待新场景创建,超时时间设为3秒可按需调整
    let predicate = NSPredicate { _, _ in
        app.windows.containing(.other, identifier: "editor_scene_root").count == initialEditorCount + 1
    }
    let expectation = expectation(for: predicate, evaluatedWith: nil)
    let result = XCTWaiter.wait(for: [expectation], timeout: 3)
    
    // 校验结果
    XCTAssertEqual(result, .completed, "新编辑器场景创建失败")
    
    // 可选:额外校验新窗口的内容符合预期,比如新窗口默认标题为"未命名"
    let newWindow = app.windows.element(boundBy: initialEditorCount)
    XCTAssertTrue(newWindow.staticTexts["未命名"].waitForExistence(timeout: 1))
}

补充说明

  • 如果不需要区分窗口类型,也可以直接用app.windows.count来统计,但是不推荐,容易受到系统弹窗、临时浮动窗的干扰导致测试用例不稳定
  • 如果你需要校验新窗口是活跃的前台窗口,可以访问XCUIApplication的keyWindow属性,判断其对应的标识是否为编辑器场景

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:15:01