ViewInspector alternatives and similar libraries
Based on the "UI Testing" category.
Alternatively, view ViewInspector alternatives based on common mentions on social networks and blogs.
-
Bluepill
Bluepill is a reliable iOS testing tool that runs UI tests using multiple simulators on a single machine -
TouchVisualizer
DISCONTINUED. Lightweight touch visualization library in Swift. A single line of code and visualize your touches! -
ios-driver
Selenium server to test native, hybrid and web apps on IOS. Join us on IRC #ios-driver on freenode -
AutoMate
Swift framework containing a set of helpful XCTest extensions for writing UI automation tests -
appium
Appium is an open source test automation framework for use with native and hybrid mobile apps. -
Flawless App
tool for visual quality check of mobile app in a real-time. It compares initial design with the actual implementation right inside iOS simulator. -
UIAutomation
JavaScript library to write test scripts that exercise your app’s user interface elements while the app runs on a connected device.
WorkOS - The modern identity platform for B2B SaaS
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of ViewInspector or a related project?
README
ViewInspector 🕵️♂️ for SwiftUI
ViewInspector is a library for unit testing SwiftUI views.
It allows for traversing a view hierarchy at runtime providing direct access to the underlying View
structs.
Why?
SwiftUI view is a function of state. We could provide it with the input, but were unable to verify the output... Until now!
Helpful links
- [Inspection guide](guide.md)
- [SwiftUI API coverage](readiness.md)
Use cases
1. Search the view of a specific type or condition
Use one of the find
functions to quickly locate a specific view or assert there are none of such:
try sut.inspect().find(button: "Back")
try sut.inspect().findAll(ViewType.Text.self,
where: { try $0.attributes().isBold() })
Check out [this section](guide.md#dynamic-query-with-find) in the guide for the reference.
2. Read the inner state of the standard views
Standard SwiftUI views are no longer a black box:
let sut = Text("Completed by \(72.51, specifier: "%.1f")%").font(.caption)
let string = try sut.inspect().text().string(locale: Locale(identifier: "es"))
XCTAssertEqual(string, "Completado por 72,5%")
XCTAssertEqual(try sut.inspect().text().attributes().font(), .caption)
Each view has its own set of inspectable parameters, you can refer to the [API coverage](readiness.md) document to see what's available for a particular SwiftUI view.
3. Verify your custom view's state
Obtain a copy of your custom view with actual state and references from the hierarchy of any depth:
let sut = try view.inspect().find(CustomView.self).actualView()
XCTAssertTrue(sut.viewModel.isUserLoggedIn)
The library can operate with various types of the view's state, such as @Binding
, @State
, @ObservedObject
and @EnvironmentObject
.
4. Trigger side effects
You can simulate user interaction by programmatically triggering system-controls callbacks:
try sut.inspect().find(button: "Close").tap()
let list = try view.inspect().list()
try list[5].view(RowItemView.self).callOnAppear()
The library provides helpers for writing asynchronous tests for views with callbacks.
FAQs
Which views and modifiers are supported?
Check out the [API coverage](readiness.md). There is currently almost full support for SwiftUI v1 API, the v2 and v3 support is under active development.
Is it using private APIs?
ViewInspector is using official Swift reflection API to dissect the view structures. So it'll be production-friendly even if you could somehow ship the test target to the production.
How do I add it to my Xcode project?
Assure you're adding the framework to your unit-test target. Do NOT add it to the main build target.
Swift Package Manager
https://github.com/nalexn/ViewInspector
Carthage
github "nalexn/ViewInspector"
CocoaPods
pod 'ViewInspector'
How do I use it in my project?
Please refer to the [Inspection guide](guide.md). You can also check out my other project that harnesses the ViewInspector for testing the entire UI.
Other questions, concerns or suggestions?
Ping me on Twitter or just submit an issue or a pull request on Github.