Skip to main content

identifier-checker

A universal, automated command-line tool for mobile QA engineers, SDETs, and test automation engineers working with any mobile application technology:

  • Native Android (Kotlin / Java / Jetpack Compose)
  • Native iOS (Swift / SwiftUI / UIKit)
  • React Native (Bridged Architecture)
  • React Native Turbo (New Architecture / Fabric)
  • .NET MAUI (XAML / C# Multi-platform App UI)
  • Capacitor & Ionic (HTML5 WebViews)
  • Flutter

It verifies whether accessibility and test identifiers (resource-id, content-desc, name, label, testID, AutomationProperties.AutomationId, id) are present in the runtime UI hierarchy, correctly exposed in page source attributes, and queryable by live Appium element locators across your app's screens.


Features

  • 🌐 Universal Framework Compatibility: Detects test and accessibility attributes across Native Android, Native iOS, React Native, React Native Turbo Modules, .NET MAUI, Capacitor, Ionic, and Flutter.
  • 🚀 5-Second Initial Startup Delay: Automatically pauses for 5 seconds on initial app launch to allow splash screens, heavy SDKs, and remote data to finish loading.
  • Ultra-Fast Missing Element Lookup: Uses a 0.5-second lookup timeout for missing identifiers, failing missing elements twice as fast.
  • 🎯 Strict Appium Locators: Performs live element lookups using By.ACCESSIBILITY_ID and By.ID (no slow XPath overhead).
  • 📱 Screen-Wise Verification: Group your expected identifiers screen-by-screen in a simple JSON file.
  • ⏸️ Interactive Screen Navigation: Verifies the launch screen automatically, then prompts you to navigate to the next screen on your device/emulator before pressing ENTER.
  • 📝 Markdown Summary Reports: Prints a clean terminal summary table and saves a formatted Markdown report (id_report_<timestamp>.md or a custom .md file path).
  • ⚙️ CI/CD Ready: Exits with status code 0 when all identifiers across all screens pass, and 1 when any identifier fails or is missing.

Prerequisites

Before using identifier-checker, make sure you have the following installed and running:

  1. Python & Package Manager:

    • Python 3.10+
    • pip (or pipx) installed on your system.
  2. Appium Server:

    • Appium Server v2.x installed via Node/npm:
      npm install -g appium
      
    • Install drivers for your target platform:
      appium driver install uiautomator2   # For Android
      appium driver install xcuitest       # For iOS
      
  3. Running Appium Server:

    • Start the Appium server in a separate terminal window before running verification:
      appium
      
      (By default, Appium listens on http://127.0.0.1:4723).
  4. Target Device:

    • An active Android Emulator / Real Device (with USB debugging enabled) or iOS Simulator.

Technology Identifier Attribute Mappings

Tech Stack Identifier Code Syntax Appium Page Source Attribute Live Lookup Locator Strategy
Android Native android:id or contentDescription resource-id, content-desc By.ID, By.ACCESSIBILITY_ID
iOS Native accessibilityIdentifier or accessibilityLabel name, label By.ACCESSIBILITY_ID, By.ID
React Native / Turbo testID="my_btn" or accessibilityLabel="my_btn" resource-id / name / content-desc By.ACCESSIBILITY_ID, By.ID
.NET MAUI AutomationProperties.AutomationId="my_btn" resource-id / name / content-desc By.ID, By.ACCESSIBILITY_ID
Capacitor / Ionic id="my_btn" or data-testid="my_btn" id, name, data-testid, content-desc By.ID, By.ACCESSIBILITY_ID
Flutter Semantics(identifier: 'my_btn') resource-id, content-desc, name By.ACCESSIBILITY_ID, By.ID

Step-by-Step User Guide

Step 1: Install identifier-checker

Install using python3 -m pip (or pipx for global CLI tools):

python3 -m pip install identifier-checker

(Or via pipx):

pipx install identifier-checker

Step 2: Create Your expected_ids.json File

Create a JSON file (e.g. expected_ids.json) listing your expected identifiers grouped by screen name:

{
  "screens": {
    "home_screen": [
      "app_drawer",
      "home_core_card",
      "recent_activity_$index",
      "truvideo_sdk",
      "view_all_recent_activity"
    ],
    "all_video_requests_screen": [
      "back_button",
      "status_$index",
      "toggle_stream",
      "video_request_item_$index",
      "video_request_list_add_fab_button",
      "video_requests_id_$index",
      "video_requests_type_$index"
    ]
  }
}

Step 3: Open Terminal and cd to Your JSON File Location

Open your terminal and navigate to the folder where you placed your expected_ids.json file:

cd /path/to/your/json/folder

Step 4: Run the Verification Command

Option A: Verify an Installed Android App (via Package Name)

You only need to pass --app-package. Appium will automatically open your installed app's launch screen:

identifier-checker \
  --ids expected_ids.json \
  --app-package com.example.myapp

Option B: Save Report to a Custom File Path

Specify a direct Markdown file path using --output:

identifier-checker \
  --ids expected_ids.json \
  --app-package com.example.myapp \
  --output ~/Desktop/my_verification_report.md

Option C: Verify via APK or IPA Binary File

identifier-checker \
  --ids expected_ids.json \
  --app /path/to/your_app.apk

Command Line Options Reference

Argument Description Default
--ids Path to JSON file containing screen-wise expected identifiers. Required
--app-package Android app package name (auto-launches installed app). from config
--app Path to APK or IPA application binary file. from config
--app-activity Android main activity name (optional). Auto-resolved
--platform Target platform (android or ios). android
--device-name Target device or emulator name. emulator-5554
--appium-url Appium server endpoint URL. http://127.0.0.1:4723
--output Output directory OR custom .md file path. reports
--startup-delay Seconds to wait on initial app startup for launch screen. 5.0
--wait Seconds to wait after screen transition for UI to settle. 1.0
--implicit-wait Timeout in seconds for element lookups. 5.0
--no-reset Do not reset application state between sessions. True

Exit Codes

Exit Code Meaning
0 Success: All expected identifiers across all screens passed exact match and live find checks.
1 Failure: One or more identifiers were missing, merged, failed live lookup, or a setup error occurred.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

identifier_checker-1.0.3.tar.gz (19.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

identifier_checker-1.0.3-py3-none-any.whl (17.5 kB view details)

Uploaded Python 3

File details

Details for the file identifier_checker-1.0.3.tar.gz.

File metadata

  • Download URL: identifier_checker-1.0.3.tar.gz
  • Upload date:
  • Size: 19.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for identifier_checker-1.0.3.tar.gz
Algorithm Hash digest
SHA256 2313e803a452477ce61f6057c37f842ea81bdd718a8f3acf5ea65e055951b7e6
MD5 acb6085ef6f54b763895141acc9ec2f0
BLAKE2b-256 c64ef7bfd7d49842e387a38081ce8fb72d67b79690465dbf8d91809b125689a8

See more details on using hashes here.

File details

Details for the file identifier_checker-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for identifier_checker-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 982c13eb3081908d55181874a762b1eb207c278caf369f998387b6b2da64447c
MD5 1f807e4a284ac69f28ea1bbe3281316e
BLAKE2b-256 e18a24f247aa0e81c4ea158cc32a4fbe83d1e955fcdf74c98c382d18f82a1ab0

See more details on using hashes here.

Release history Release notifications | RSS feed

1.1.1

2 files

1.1.0

2 files

This release

1.0.3 This release

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page