Skip to content

Screenshot Tests

Stefan Arentz edited this page Mar 2, 2016 · 15 revisions

Running L10N Snapshots

Follow BUILDING.md first and make sure you can run the app in the simulator.

This is good for a test run with just one device and one language:

snapshot --project Client.xcodeproj --erase_simulator --devices "iPhone 6s" --languages "nl" --scheme L10nSnapshotTests

Adding accessibility identifiers

The most reliable way to find a button in a UI Test is by using the accessibilityIdentifier on elements.

Please give the accessibilityIdentifier a name that looks like ClassName.componentName.

For example, the button to toggle private mode now has a accessibilityIdentifier named "TabTrayController.togglePrivateMode". This is long, but it makes it very clear what the button is. It leaves no room for ambiguity or confusion.

Then you can simply use code like this:

func test04PrivateBrowsingTabsEmptyState() {
    let app = XCUIApplication()
    app.buttons["URLBarView.tabsButton"].tap() // Open tabs tray
    app2.buttons["TabTrayController.togglePrivateMode"] // Switch to private mode
    snapshot("PrivateBrowsingTabsEmptyState-01")
    app2.buttons["TabTrayController.togglePrivateMode"] // Switch back from private mode
    app.collectionViews.cells.elementBoundByIndex(0).tap() // Close tabs tray by selecting first tab
}

Things to know about Screenshot Tests

  • You can set enviroinment variables in the setUp() method. Currently only MOZ_SKIP_WHATSNEW and MOZ_WIPE_PROFILE exist.
  • The setUp() function is called before every test runs? IS THIS CORRECT?
  • Create separate test functions to capture managable units. For example do not combine screenshots for many parts of the app in a single test. Instead create multiple tests.
  • The order of the tests is very important. Xcode runs the tests sorted by name. This is why the tests are currently numbered like func test01Intro() and func test02SettingsScreen().
Clone this wiki locally