gpt4 book ai didi

swift - XCUITest中是否可以直接开屏?

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:30 47 4
gpt4 key购买 nike

假设我有 3 个屏幕,

  1. 登录
  2. 忘记密码
  3. 帮助屏幕

默认情况下,登录屏幕会在应用启动时打开。单击“忘记密码”按钮时会显示“忘记密码”屏幕,单击“帮助”链接时会打开“帮助屏幕”。

我能否以某种方式直接打开忘记密码屏幕,而无需使用 XCUITest 单击按钮的过程?

我建议使用与传递 adb 意图以直接打开 View 相同的内容。

最佳答案

据我所知,您无法使用 XCUITest Framework 直接进入第二个屏幕。无论如何,documentation状态:

UI testing exercises your app's UI in the same way that users do without access to your app's internal methods, functions, and variables. This enables your tests to see the app the same way a user does, exposing UI problems that users encounter.

这意味着如果您的应用的用户无法直接到达第二个屏幕,为什么您的 UI 测试可以。

我知道在运行测试时等待进入第二个屏幕非常耗时,但您可以绕过为每个测试编写它。只写一次,在您的 XCTestCase 类中编写一个函数,您可以在其中实现调用第二个屏幕并在 setUp() 中调用该函数。方法。然后,每次运行测试时都会调用跳过第一个屏幕的过程,因为每次运行测试之前都会调用 setUp() 方法。

编辑

阅读您的评论后,我想到了一个 hacky 解决方案。您可以使用 Launch Environment 从您的测试中与您的应用程序通信和/或 Launch Arguments .因此,在您的 XCTestCase 类中,设置参数和环境:

class ForgotPasswordUITest: XCTestCase {
let app = XCUIApplication()

override func setUp() {
app.launchArguments += ["UI-TESTING"]
app.launchEnvironment["pageToGo"] = "forgotPassword"
app.launch()
}
}

然后,在您的 ViewController 中,编写这些计算属性:

var isUiTestingEnabled: Bool {
get {
return ProcessInfo.processInfo.arguments.contains("UI-TESTING")
}
}

var shouldShowForgotPassword: Bool {
get {
return ProcessInfo.processInfo.environment["pageToGo"] == "forgotPassword"
}
}

var shouldShowHelpScreen: Bool {
get {
return ProcessInfo.processInfo.environment["pageToGo"] == "helpScreen"
}
}

viewDidLoad() 方法中,你可以有这样的东西:

    if isUiTestingEnabled {
if shouldShowForgotPassword {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "ForgotPasswordViewController")
self.present(secondViewController, animated: true, completion: nil)
} else if shouldShowHelpScreen {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "HelpScreenViewController")
self.present(secondViewController, animated: true, completion: nil)
}
}

注意:这是一个非常肮脏的 hack,不推荐使用它来编写 UI 测试。

关于swift - XCUITest中是否可以直接开屏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49020329/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com