Skip to content

Latest commit

 

History

18 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

noqa

Automated mobile testing tool for apps and games

Download for macOS

Website Docs Stars

Apple Silicon and Intel · Windows is on the way

noqa is an automated mobile testing tool for apps and games. Write tests in plain English and run them on a real device. noqa works from screenshots, so there are no locators, no code and no SDK. As teams ship more code with AI, noqa automates slow manual testing.

  • Any framework, even games — no locators — native, React Native, Flutter, Unity, Unreal, and non-native UI (maps, canvases, WebViews, ads) all test the same, with no locators or scripts.

  • CLI with automatic grounding — your coding agent runs the whole testing cycle from the terminal: it reads the screen, drives a real device, writes the test cases, and runs them until they pass. Where the screen exposes no usable element tree — a game, a canvas, a WebView — it targets by plain-language description and noqa grounds it.

    noqa action tap -d "Blue login button at the bottom"

  • Runs on real devices — plus simulators, emulators, and cloud devices.

noqa CLI grounding demo

Purely vision-based test automation

noqa works from screenshots, unlike locator-based tools (Appium · Maestro · XCUITest).

Locator-based noqa
Native apps
iOS & Android
Cross-platform apps
React Native, Flutter
Partial
Non-native UI
webviews, canvases, ads, maps
Games
Unity, Unreal, Godot
Alerts & pop-ups
permissions, system dialogs
Flaky
Natural-language tests
no code
Real devices
physical phones, not just simulators
Partial

Quick start

1. Install the app. Download noqa and keep it running — the CLI talks to it locally.

2. Create a free account.

3. Install the CLI and skill. In the app, open Settings → CLI & Agents and click Install on CLI Tool (adds noqa to your PATH) — then Install globally on Mobile Testing Skill, so your coding agent knows the commands out of the box. Restart your terminal afterward. The skill also lives here in skills/noqa-testing if you'd rather add it manually.

4. Connect a device. List devices, pick one, and connect:

noqa devices ios                       # list iOS devices & simulators (or: noqa devices android)
noqa devices connect <device-id>       # connect to one from the list

5. Get your app on the device. Install your build (Xcode, Expo, Android Studio) and bring it to the foreground:

noqa action activate-app --bundle-id com.example.app

6. Debug it in an inspect → act → verify loop.

noqa screen                                    # inspect: read the current UI as a structured element tree
noqa action tap --x 500 --y 320                # act: one step, on relative coordinates (0–1000) from the tree
noqa action tap -d "Login button"              # …or by description — grounding, when the tree has no usable target
noqa screen                                    # verify: confirm the state changed as expected

CLI

Point your coding agent at the CLI and it drives the device in a tight inspect → act → verify loop — read the screen, take one action, check the result, repeat. Two command groups make up the loop.

Reading the screen

noqa screen                 # cleaned element tree — meaningful elements with relative coordinates (0–1000)
noqa screen --full          # raw Appium accessibility tree, unfiltered
noqa screenshot ./shot.png  # save a screenshot for a visual check

Your agent reads the screen on every step, so read cost dominates. The cleaned tree keeps the meaningful elements with exact positions — far lighter than the raw tree, cheaper than a screenshot. Measured on one paywall screen:

Screen read Tokens vs noqa screen
noqa screen ~800
noqa screenshot ~1,500 ~2×
noqa screen --full ~5,600 ~7×

Actions

Every gesture targets an element two ways. noqa screen already returns each element's box, so on a screen the tree describes well you act straight on those coordinates (0–1000) — nothing to resolve, nothing to pay for:

noqa action tap --x 500 --y 320                         # tap
noqa action swipe --x1 500 --y1 800 --x2 500 --y2 200   # swipe between two points
noqa action drag --x1 300 --y1 500 --x2 700 --y2 500    # drag between two points
noqa action input --x 500 --y 640 --text "hi@noqa.ai"   # tap a field and type

When the tree gives you nothing to act on — a game, a canvas, a WebView, an ad overlay, or coordinates that didn't work — describe the element in plain language instead and noqa grounds it, working from what's rendered rather than from the tree:

noqa action tap -d "Blue login button at the bottom"    # tap
noqa action tap -d "Login button" --double              # double tap
noqa action tap -d "Login button" --duration 2          # long-press, in seconds
noqa action swipe -d "photo carousel, swipe left"       # swipe
noqa action drag -d "card onto the drop zone"           # drag
noqa action input -d "email field" --text "hi@noqa.ai"  # type into a field

App and system controls take no target:

noqa action activate-app --bundle-id com.example.app    # bring an app to the foreground
noqa action terminate-app --bundle-id com.example.app   # force-quit an app
noqa action restart-app --bundle-id com.example.app     # terminate and relaunch
noqa action background-app                              # send the current app to the background
noqa action open-url --url "https://appium.io"          # open a deep link or URL
noqa action alert --action accept                       # accept a system alert (or --action dismiss)

Full command reference: docs.noqa.ai/docs/cli.

If you want your agent to run the whole testing cycle — not just drive the device — see Generate test cases with AI.

Test cases

A test case is a title, optional tags, and one or more flows. Each flow is written in plain language — no code, no selectors.

A noqa test case
  • Title — a short name for the test.
  • Tags — optional labels to group and filter cases (smoke, regression, …).
  • Instructions — what the agent should do, step by step.
  • Expected result — what it should verify after each step (optional).

Create and manage them in the app or from the CLI:

noqa cases create myapp '{"title": "Login", "tags": ["smoke"], "flows": [{"instructions": "tap Sign in, enter credentials", "result": "home screen shows"}]}'
noqa cases list myapp                       # list cases (ID, TITLE, TAGS)
noqa cases get myapp 42                      # show a case as JSON
noqa cases update myapp 42 '{"title": "…"}'  # edit fields of a case

See Writing good test cases.

Production-ready testing

Beyond the free CLI, a subscription unlocks noqa's own agent and, for teams, the full platform.

noqa agent

Our own agent, built specifically for mobile testing rather than a general-purpose model driving a device. Hand it your test cases and it runs them autonomously on the device, returning per-step pass/fail.

  • Fast — 5–10s per action, dropping to 1–2s on screens it has already seen.
  • Cheaper per action than a frontier LLM API.
  • Reports — per-step pass/fail with video and screenshots.

Agentic QA platform

Everything in the noqa agent, scaled for teams — run the whole suite in the cloud and wire it into your workflow.

  • 1000+ cloud devices.
  • Unlimited seats, with shared test cases and builds.
  • Integrations — Slack, Jira, CI/CD, Webhooks, API, MCP server.
  • Priority support.

Full pricing → noqa.ai/pricing.

Requirements

The app

  • Mac with Apple Silicon or Intel — one universal build
  • macOS 13 or later

iOS testing — real devices & simulators

  • Xcode 16.0+ with Command Line Tools
  • Apple Developer account (for signing and provisioning)
  • A real device on iOS 15+ (trusted, visible in Finder), or an iOS Simulator

Android testing — real devices & emulators

  • Android Studio 2023.1+ (Android SDK + adb)
  • A real device on Android 6.0 (API 23)+ with USB debugging enabled, or an emulator with Google Play Services

Learn more

New to agentic testing? The guide covers it end to end:

FAQ

Which devices and platforms are supported? iOS and Android — real devices, simulators, and emulators locally, plus cloud devices. noqa drives them through Appium (XCUITest on iOS, UiAutomator2 on Android).

Which frameworks and engines are supported? All of them. noqa works purely from screenshots, so it doesn't depend on how the app is built: native, React Native, Flutter, Unity, Unreal, and non-native UI like maps, canvases, WebViews, and ads.

Do I need to integrate an SDK or change my app? No. Nothing to add or change in your app.

Do I need an account, and do I have to pay? An account is required — grounding and test cases run through noqa's servers — but a free one is enough. You only pay to run the noqa agent and use cloud features.

Does noqa work on Windows or Linux? Not yet — the app runs on macOS only, on both Apple Silicon and Intel. Windows is on the way.

Can I use it with Claude Code / Cursor / Codex? Yes, through the CLI. Any coding agent that can run shell commands drives noqa; install the noqa-testing skill so it knows the commands.

License

The contents of this repository — the noqa-testing skill and this documentation — are MIT licensed: copy, adapt, and share them freely. The noqa app, CLI, and agent themselves are proprietary.

About

Automated mobile testing tool with device CLI for apps and games - real devices iOS & Android. Supports native (swift, kotlin), react native, flutter, KMP, unity and any mobile apps and games.

Topics

Resources

Stars

173 stars

Watchers

1 watching

Forks

Contributors