-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Screenshot Tests
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 --scheme L10nSnapshotTests \
--erase_simulator \
--devices "iPhone 6s" --languages "nl"
It is best to test with a non-english language to make sure you catch cases where you may incorrectly depend on English localizable ui items.
dekdjekde
Please give tests a descriptive name that makes it clear what we are screenshotting. Like IntroScreen
or ClearPrivateData
.
Please name images like Settings-01
, Settings-02
, etc. This way they are grouped together and and up as files named like iPhone4s-Settings-01.png
which makes it easy to post-process them and group them.
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
app.buttons["TabTrayController.togglePrivateMode"].tap() // Switch to private mode
snapshot("PrivateBrowsingTabsEmptyState-01")
}
- You can set enviroinment variables in the
setUp()
method. Currently onlyMOZ_SKIP_WHATSNEW
andMOZ_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()
andfunc test02SettingsScreen()
.
Some random documents that I found useful:
- http://masilotti.com/xctest-documentation/
- http://masilotti.com/ui-testing-cheat-sheet/
- https://www.bignerdranch.com/blog/ui-testing-in-xcode-7-part-1-ui-testing-gotchas/
- http://stackoverflow.com/questions/34164660/how-do-i-perform-a-tap-and-drag-in-xcode-ui-test-scripts
- http://stackoverflow.com/questions/34164660/how-do-i-perform-a-tap-and-drag-in-xcode-ui-test-scripts