使用 Cucumberish 在 XCUITest 设置中重置应用程序

Posted

技术标签:

【中文标题】使用 Cucumberish 在 XCUITest 设置中重置应用程序【英文标题】:Resetting app in XCUITest setup with Cucumberish 【发布时间】:2018-08-29 13:22:17 【问题描述】:

我正在尝试为我公司目前开发的 ios 应用程序开始使用 XCUITests。另外,我正在使用 Cucumberish 来组织测试并使用我们已经存在的功能文件。

我们的应用程序要求用户在使用任何功能之前首先登录,所以我想在每个测试场景之间重置应用程序状态以再次执行登录(Xcode 重新安装应用程序,但用户数据仍然存在,应用程序将永远登录第一次测试后)。我一直在尝试很多不同的方法来实现这一点,但到目前为止都没有运气。

自动化 Springboard 以重新安装应用程序不起作用(数据未删除),我无法使用“@testable import”调用应用程序中定义的类(因此我可以以编程方式清除数据),那里似乎不是一种在测试之间调用 shell 命令来硬重置模拟器的方法。

我有选择吗?或者我是否必须在每个测试用例后手动运行 UI 才能注销? (对我来说这听起来很不可靠——特别是如果测试失败)

【问题讨论】:

【参考方案1】:

是的,有一种方法可以实现这一点,我也在测试中使用它。

您应该使用launchArguments(或最终使用launchEnvironment)与您的应用程序通信。首先,在您的setUp() 方法中,告诉您的应用它处于UI-TESTING 模式:

override func setUp() 
    super.setUp()
    continueAfterFailure = true
    app.launchArguments += ["UI-TESTING"]

然后,在您希望注销用户的每个测试中,通知您的应用在调用 XCUIApplication.launch() 方法之前应该注销:

let app = XCUIApplication()

func testWithLoggedOutUser() 
    app.launchArguments += ["logout"]
    app.launch()
    // Continue with the test

然后,在您的 AppDelegate.swift 文件中,读取参数并采取相应措施:

class AppDelegate: UIResponder, UIApplicationDelegate 
    static var isUiTestingEnabled: Bool 
        get 
            return ProcessInfo.processInfo.arguments.contains("UI-TESTING")
        
    
    var shouldLogout: Bool 
        get 
            return ProcessInfo.processInfo.arguments.contains("logout")
        
    

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
        if AppDelegate.isUiTestingEnabled 
            if shouldLogout 
                 // Call synchronous logout method from your app
                 // or delete user data here
            
        
    

我写了一篇关于在应用中设置本地状态的博文,你可以查看here。

【讨论】:

有趣的是,我设法让它完全像这样工作。只是没有调用注销方法(开发人员沟通不畅,所以我不太了解代码),我只是使用 SecItemDelete 删除所有钥匙串项。无论如何感谢您的回答!

以上是关于使用 Cucumberish 在 XCUITest 设置中重置应用程序的主要内容,如果未能解决你的问题,请参考以下文章

XCUITest 检测 UIView

XCUITest 和动态生成的视图

XCUITest - 单击后退按钮后,除了睡眠之外,我还能使用啥来在屏幕上查找项目?

XCUITest 等待可能出现的元素

在 XCUITest 中嵌入自定义视频

如何使用 XCUITest 查询 SwiftUI 表格单元格