XCTest 在 UITest 中全新安装应用程序

Posted

技术标签:

【中文标题】XCTest 在 UITest 中全新安装应用程序【英文标题】:XCTest Fresh install app in a UITest 【发布时间】:2017-10-23 21:55:48 【问题描述】:

从 Xcode 9 开始,有一个新的启动参数 -StartFromCleanState 我假设在全新安装后启动应用程序。但是它似乎不起作用,谷歌搜索 -StartFromCleanState 没有产生任何结果,所以没有文档可以关闭。

source

我的目标是使用深层链接启动我的应用。我的测试流程是这样的:

    UITest 从启动应用开始 UITest 打开 safari UITest进入有deeplink链接的网页 UITest 点击链接,应用打开

Step for 通过将应用从后台状态切换到前台状态来打开应用。这意味着 application:didFinishLaunchingWithOptions: 仅在第 1 步被调用一次。

func test_deeplink() 
    programmaticallyTapDeepLink()
    XCUIApplication().launchArguments = ["-StartFromCleanState", "YES"]

理想情况下,我想在应用全新/干净安装时测试深层链接。

我尝试在以编程方式点击深度链接之前/之后设置启动参数,但它似乎没有按我希望的方式工作。

有没有可用的解决方案?

【问题讨论】:

【参考方案1】:

在您指定为源的文档中,作者提供了示例代码:

XCTContext.runActivity(named: "Given I have launched app in clean state")  _ in 
    XCUIApplication().launch()
    XCUIApplication().launchArguments = ["-StartFromCleanState", "YES"]

-StartFromCleanState 不是“新的启动参数”。它是提供给 XCUIApplication().launchArguments 方法的键和值,由被测应用程序 (XCUIApplication) 的开发人员来处理传递的启动参数 (["-StartFromCleanState", "YES"])。

这个堆栈溢出答案有一些例子:

How to access launchEnvironment and launchArguments set in XCUIApplication, running UI tests in XCode?

您可能还想考虑阅读 userDefaults;您可能希望根据以下两种生命周期方法之一中传递的 launchArguments 触发对它们的重置:

发射时间:

application(_:willFinishLaunchingWithOptions:)
application(_:didFinishLaunchingWithOptions:)

有关应用程序生命周期状态和每个状态期间可用的委托方法的更多信息,请参阅此苹果文档:

https://developer.apple.com/documentation/uikit/uiapplicationdelegate

【讨论】:

以上是关于XCTest 在 UITest 中全新安装应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何找出(使用 XCTest UITest)在 tvOS AppleTV 的表格视图中具有焦点的单元格?

UITest 在框架中不起作用

如何创建一个在 XCTest 中定义按钮或文本字段的 swift 文件?

Xcode 9 UITest 不工作

如何确保我的 Xcode UITest 目标仅构建目标应用程序?

带有本地化 app.staticTexts 的 UI 测试 (XCTest)