- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
假设我有 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/
我想为原生 iOS 应用程序创建几个测试。更准确地说,我想测试深层链接。但我不确定如何触发与 XCUITest 的深层链接,我真的不知道如何 launch()和 launcArguments ( ht
这是我第一次尝试在 AppCenter 中测试我的 Cordova iOS 应用程序。我已经阅读了文档,它似乎在 iOS 混合应用程序上进行 UI 测试,我应该使用 XCUITest 框架,所以这就是
我在 CI/CD 提供程序(如 CircleCI)上运行 UI 测试,我需要读取多个 secret 环境变量(如测试用户名和密码)。我可以很容易地设置它,但我不明白如何将它们正确地传递给测试用例。 我
我正在尝试通过命令行将值传递给我的 XCUITest。我知道可以通过以下方式为 XCTest(非 UI)执行此操作: xcodebuild -verbose test -workspace MyWor
我的应用程序因以下堆栈而崩溃 - Thread 1Queue : com.apple.main-thread (serial) #0 0x0722dd39 in ___forwarding___ ()
我在作为 ChildViewController 呈现的 ViewController 上有一个关闭按钮。我已打开此按钮的辅助功能,辅助功能标识符为 closeButton .这个按钮没有任何文本,它
我正在考虑使用 XCUITest 为我的 iOS 应用程序进行 UI 测试。看起来 XCUITest 具有广泛的功能,包括使用多个应用程序的能力。但是,多应用程序支持似乎有些受限。 似乎使用 XCUI
我是 XCUITest 的新手,遇到了它无法识别警报的问题。 我使用录音机来获取命令,但是当我尝试播放它时,它失败并显示错误: 未找到“查找:后代”匹配类型来自输入的警报的匹配项... let app
测试失败后、断言后或者即使元素未找到或不可命中,我可以在 XCUITest 中执行操作 如果失败或输入断言,应用程序将保持这种状态几个小时。像这样assert or fail 如果失败我可以让测试调用
我试图让 XCUITest 使用下面的代码与远程通知交互,但我很好奇此代码是否只会单击我的应用程序通知或收到的任何通知(取决于哪个先到达)? let springboard = XCUIApplica
让模拟器吐出位置的唯一方法是更改模拟器本身的位置。当我更改方案中的设置时,它似乎没有做任何事情。 我错过了什么吗? Xcode 版本 10.2 (10E125) 最佳答案 这应该是答案: http
某些元素在 XCUITest 中不“可见”,无法为它们断言,它们从未被发现。即使我通过调试打印 XCUIApplication() ,元素也不会显示。 最佳答案 我发现如果你设置了 isAccessb
正在尝试找到一种解决方案来自动执行 XCUITest 应用程序的任务终止... static let springboard:XCUIApplication? = XCUIApplication(bu
我正在尝试点击链接标签中的链接。使用录音机,我有点击事件的代码 let link = XCUIApplication().scrollViews.otherElements.links["link h
我需要自动化这个场景: 在第一台设备上执行某项操作(点击 UI 元素) 在第二台设备上验证某项(验证 UI 元素) 在第二台设备上执行某操作 在第一台设备上验证某项 这在 XCUITest 上可行吗?
我有一个带有 tableView 和细节 vc 的简单项目。 tableView 显示带有“cell (n)”文本的 20 行,详细 View 显示带有按下单元格的标签。我想断言,只要点击一个单元格,
我有一个包含一些项目的 Collection View 。在我的 UI 测试期间,我点击一个按钮,这将触发一个网络请求,该请求完成后,将在索引 0 处向该 Collection View 中插入一个单
是否可以在 XCUITest 中验证通知横幅已发送到屏幕? 我可以向通知添加可访问性标识符,但是当横幅出现在屏幕上时,我无法让 XCUITest 与之交互。我知道 XCUITest 在与应用程序不同的
是否有任何已知方法可以影响 XCUITest 调用测试方法的顺序?目前,以何种顺序调用哪种测试方法似乎完全是任意的。 这使得无法定义特定顺序。一般来说,Xcode 管理 XCUITest 运行的方式不
我有一个带有 Today Widget 的应用程序。所以我想对其进行一些 UI 测试。 我找到了打开今日/通知面板的方法。这看起来很简单: let statusBar = XCUIApplicatio
我是一名优秀的程序员,十分优秀!