-
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 \ # TODO Not sure if required
--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
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: