Skip to content

eonist/TestRunner

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.

mit platform Lang SPM compatible Tests codebeat badge

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 and LogoutScene, 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 and LogoutScene.
  • 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:

img

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 the UITesting-target in xcode, not main target

Resources:

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