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

如何在UI自动化测试中为iOS扩展添加启动参数与环境变量

问题描述

现有一套UIAutomation测试脚本,用于测试搭载Share Extension(分享扩展)的应用,需要在测试时向该分享扩展传入launchArguments与launchEnvironment属性,但始终未找到可行的实现方案。
调试扩展内的ProcessInfo时,设置的自定义参数值并未生效,此前先后尝试过两种参数设置方式:
第一种设置方式:

XCUIApplication(bundleIdentifier:"com.my.app").launchArguments = ["TEST"]
XCUIApplication(bundleIdentifier:"com.my.app").launchEnvironment = ["TEST":"TEST"]

第二种设置方式:

XCUIApplication().launchArguments = ["TEST"]
XCUIApplication().launchEnvironment = ["TEST":"TEST"]

补充说明:通过bundle identifier查找进程时,可准确定位到目标扩展进程,需要找到正确的配置方法让传入扩展的启动参数与环境变量生效。

解决方案

两种设置方式不生效的核心原因是:Share Extension是独立于主应用运行的单独进程,上述两种写法的操作对象都是主应用进程,配置自然不会同步到扩展进程上。
正确配置步骤如下:

  • 初始化XCUIApplication实例时,传入的bundle identifier必须填写分享扩展自身的bundle ID,而非主应用的bundle ID。例如分享扩展的bundle ID为com.my.app.shareext,就使用该值初始化实例。
  • 不要手动调用扩展对应XCUIApplication实例的launch()方法。分享扩展由系统在触发分享动作时自动启动,只需要在扩展被唤起前,提前给对应实例设置好launchArguments和launchEnvironment即可,系统启动扩展时会自动注入预设的参数。

正确代码示例:

// 初始化时绑定分享扩展的bundle ID,不要填主App的
let shareExtension = XCUIApplication(bundleIdentifier: "com.my.app.shareext")
// 提前配置启动参数和环境变量
shareExtension.launchArguments = ["TEST"]
shareExtension.launchEnvironment = ["TEST": "TEST"]

// 后续正常执行测试流程:触发主App的分享动作、选择对应分享扩展即可
// 扩展启动后,就可以通过ProcessInfo.processInfo.arguments、ProcessInfo.processInfo.environment读取到设置的参数

配置注意事项:

  • 参数配置必须在分享扩展被系统唤起之前完成,如果扩展已经处于运行状态,配置不会生效,需要先终止扩展进程再重新触发分享动作唤起扩展。
  • 主应用和分享扩展的参数配置完全独立,如果测试流程中需要同时操作两个进程,分别初始化对应bundle ID的XCUIApplication实例单独配置即可。
  • 无参构造的XCUIApplication()实例默认绑定当前测试Target关联的主应用进程,无法用来给扩展进程配置参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:51:28