Design Patterns in XCUITest

Design Patterns in XCUITest

  • Page Object

  • Fluent Interface

  • Wait until page/element load

  • Using check() instead of grab & hope

  • Use Launch Argument to Set Up

Launch Arguments

MyAppUITest.swift
...
override func setUp() {
  super.setUp()

  let app = XCUIApplication()
  app.launchArguments.append("ui-testing")
  app.launch()
}
...

MyAppDelegate.swift
...
func setupModel() -> Model {
  let uiTesting = NSProcessInfo.processInfo().arguments.contains("ui-testing")

  let model = uiTesting ? StubModel() : NetworkModel()

  return model
}
...

NSUserDefaults

MyAppUITest.swift
...
override func setUp() {
  super.setUp()

  let app = XCUIApplication()
  app.launchArguments.appendContentsOf(["-ui-testing","YES"])
  app.launch()
}
...

MyAppDelegate.swift
...
func setupModel() -> Model {
  let defaults = NSUserDefaults.standardUserDefaults()
  let uiTesting = defaults.boolForKey("ui-testing")

  let model = uiTesting ? StubModel() : NetworkModel()

  return model
}
...

Last updated