TestRunner π
Simplifies running UI-tests
Description:
- TestRunner is a Swift package that simplifies running UI tests for iOS and macOS.
- It allows you to create scenes that can be played and receive notifications upon their completion.
- You can iterate through scenes in sequences, reuse common scenes such as
LoginScene
andLogoutScene
, and operate asynchronously.
How does it work
TestRunner allows you to:
- Create scenes that you can play and receive notifications upon their completion (asynchronously).
- Iterate through scenes in sequences.
- Reuse common scenes such as
LoginScene
andLogoutScene
. - Operate asynchronously.
Key Concepts:
- Step: A single interaction logic, usually encapsulated in an anonymous closure.
- Scene: A series of steps.
- Sequence: A series of scenes.
Demo:
Here is a QA Test prototype for debugging a playlist feature:
Installation
You can install TestRunner using Swift Package Manager. Simply add the following line to your Package.swift
file:
.package(url: "https://github.com/eonist/TestRunner.git", from: "1.0.0")
Then add TestRunner
as a dependency for your target:
.target(
name: "MyTarget",
dependencies: [
"TestRunner",
]
),
Alternatively, you can add TestRunner to your project using Xcode. Simply go to File > Swift Packages > Add Package Dependency
and enter the URL of this repository.
Example:
class SearchScene {
override run(){
let searchBar = XTElement.findFirst("SearchBar")
searchBar.search("Eminem")
let searchButton = XTElement.findFirst("SearchButton")
searchButton.tap()
onComplete()
}
}
let sequence: [SceneKind.Type] = [LoginScene.self, SearchScene.self, LogoutScene.self]
let runner: SceneRunner = .init(sequence: sequence, onComplete: {})
runner.complete { Swift.print("All scenes completed π") }
runner.app.launch()
runner.iterate() // π
Dependencies:
Warning
Add this framework via XCode SPM-package-manager to theUITesting-target
in xcode, not main target
Resources:
-
Using XCTest and XCTestCase for iOS Tests: A comprehensive guide on utilizing XCTest and XCTestCase for iOS testing.
-
Using XCTest Extension in a Swift Package: An informative post detailing the integration of XCTest extension within a Swift package.
-
Xcode UI Testing Cheat Sheet: A handy cheat sheet offering quick reference for Xcode UI testing.
Todo:
- Add example project (See TabNav-project, playlist-project, UITesting-project) πππ
- Maybe add ideas from AccessRunner project, might have advanced ways of doing things etc π
- Maybe use semaphore to make async -> sync ? π
- Clean up UITestSugar