如何访问在XCUIApplication中设置的launchEnvironment和launchArguments,在XCode中运行UItesting?
我已经尝试在XCUIApplication
实例中设置属性,在我的UItestingsetUp()
let app = XCUIApplication() app.launchEnvironment = ["testenv" : "testenvValue"] app.launchArguments = ["anArgument"] app.launch()
在didFinishLaunch
我试图在我运行我的UITest时在屏幕上显示这些
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() } }
但我似乎无法find我所设定的论据和环境。 任何人都知道如何抓住他们?
如果您在UI Test(Swift)中设置了launchArguments
:
let app = XCUIApplication() app.launchArguments.append("SNAPSHOT") app.launch()
然后在您的应用程序中阅读它们:
swift 2.x :
if NSProcessInfo.processInfo().arguments.contains("SNAPSHOT") { // Do snapshot setup }
Swift 3.0
if ProcessInfo.processInfo.arguments.contains("SNAPSHOT") { }
要设置环境variables,请分别使用launchEnvironment
和NSProcessInfo.processInfo().environment
。
build立在乔伊C.的答案,我写了一个小的扩展,以避免在应用程序中使用原始string。 这样你可以避免任何错字问题,并获得自动完成。
extension NSProcessInfo { /** Used to recognized that UITestings are running and modify the app behavior accordingly Set with: XCUIApplication().launchArguments = [ "isUITesting" ] */ var isUITesting: Bool { return arguments.contains("isUITesting") } /** Used to recognized that UITestings are taking snapshots and modify the app behavior accordingly Set with: XCUIApplication().launchArguments = [ "isTakingSnapshots" ] */ var isTakingSnapshots: Bool { return arguments.contains("isTakingSnapshots") } }
这样你可以使用
if NSProcessInfo.processInfo().isUITesting { // UITesting specific behavior, // like setting up CoreData with in memory store }
更进一步,各种论点应该可能进入一个枚举,可以在设置launchArguments UITest中重用。
下面是launchArguments和Objective-C的例子:
if ([[NSProcessInfo processInfo].arguments containsObject:@"SNAPSHOT"]) { //do snapshot; }
迅速:
let arguments = ProcessInfo.processInfo.arguments if arguments.contains("SNAPSHOT") { //do snapshot }
我只知道如何在Objective-C中工作
NSDictionary *environment = [[NSProcessInfo processInfo] environment];
对于启动参数,将它们作为两个单独的parameter passing:
let app = XCUIApplication() app.launchArguments.append("-arg") app.launchArguments.append("val") app.launch()
从这里采取。
请记住一些细节。 首先,XCUIAppliction不是单例,因此,如果调用XCUIApplication().arguments.append("myargument")
,然后调用XCUIApplication().launch()
,它将不会发送参数。 在这里检查 。
其次,如果在启动应用程序后修改参数,它将不起作用,它会将新的参数发送到下一个执行。
如果您需要将模式中的环境variables传递给XCUITes,请在每种testing类上修改XCTestCase – > app.launchEnvironment对象:
Swift 3
override func setUp(){ app.launchEnvironment = ProcessInfo.processInfo.environment }