我尝试在我的UI测试setUp()
中设置XCUIApplication
示例的属性
let app = XCUIApplication()
app.launchEnvironment = ["testenv" : "testenvValue"]
app.launchArguments = ["anArgument"]
app.launch()
在didFinishLaunch
中,我尝试在运行UITests时在屏幕上显示这些
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if launchOptions != nil {
for (key, value) in launchOptions! {
let alertView = UIAlertView(title: key.description, message: value.description, delegate: nil, cancelButtonTitle: "ok")
alertView.show()
}
}
但我似乎找不到我设置的论点和环境。有人知道怎么弄到吗?
9条答案
按热度按时间vjhs03f71#
如果你在UI Test(Swift)中设置了
launchArguments
:然后在您的应用程序中使用以下命令阅读它们:
swift 2.x:
Swift 3.0
要设置环境变量,请分别使用
launchEnvironment
和NSProcessInfo.processInfo().environment
。8qgya5xd2#
同样有趣的是,传递给
XCUIApplication.launchArguments
的参数也可以从UserDefaults
获得。在您的XCTestCase中
您的测试目标
从这里您可以在
UserDefaults
上创建扩展,以提供方便的运行时切换。这与Xcode方案“启动时传递参数”使用的机制相同。启动参数及其对
UserDefaults
的影响在“Preferences and Settings Programming Guide(首选项和设置编程指南)”中有说明。kpbpu0083#
基于Joey C.的回答,我写了一个小的扩展来避免在应用程序中使用原始字符串。这样你就可以避免任何打字错误的问题,并获得自动完成。
这样你就可以用
更进一步,各种参数可能应该放在一个枚举中,当设置launchArguments时,可以在UITest中重用该枚举。
34gzjxbg4#
下面是launchArguments和Objective-C的例子:
斯威夫特:
o4tp2gmn5#
对于启动参数,将它们作为两个单独的参数传递:
来自here
u4vypkhs6#
记住一些细节。首先,XCUIApplication不是单例,因此,如果您调用
XCUIApplication().arguments.append("myargument")
,然后再调用XCUIApplication().launch()
,它不会发送参数。Check it here。第二,如果你在启动应用程序后修改参数,它将无法工作,它将把新的参数发送到下一次执行。
pwuypxnk7#
我只知道这在Objective-C中是如何工作的
jgzswidk8#
如果你需要将环境变量从你的schema传递给XCUITes,修改XCTestCase -> app.launchEnvironment对象,在每个测试类上,这样:
*Swift 3酒店,纽约
ckx4rj1h9#
1-创建ProcessInfo的扩展
2-修改数据源init。在本例中,我使用的是莫亚,因此我修改了提供程序init。在init中检查参数并模拟sameplData参数的响应,而不是正常地初始化REST API。
3-在UI测试中添加参数