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.
- ⚡ Fast Element Verification: Uses a fast 1.0-second element lookup timeout so missing or failed identifiers check instantly without blocking your test run.
- 🎯 Strict Appium Locators: Performs live element lookups using
By.ACCESSIBILITY_IDandBy.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>.mdor a custom.mdfile path). - ⚙️ CI/CD Ready: Exits with status code
0when all identifiers across all screens pass, and1when any identifier fails or is missing.
Prerequisites
Before using identifier-checker, make sure you have the following installed and running:
-
Python & Package Manager:
- Python 3.10+
pip(orpipx) installed on your system.
-
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
- Appium Server v2.x installed via Node/npm:
-
Running Appium Server:
- Start the Appium server in a separate terminal window before running verification:
appium
(By default, Appium listens onhttp://127.0.0.1:4723).
- Start the Appium server in a separate terminal window before running verification:
-
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 |
--wait |
Seconds to wait after app launch or screen prompt 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file identifier_checker-1.0.1.tar.gz.
File metadata
- Download URL: identifier_checker-1.0.1.tar.gz
- Upload date:
- Size: 18.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b66ffad6c740d2013c460cc575e64634d7a1bd37ee9ae36696f6cec6b39cad37
|
|
| MD5 |
50349e8a991561a9d6b1e98079d2c8d3
|
|
| BLAKE2b-256 |
4222774f292fc7bfedc815fba81bb481aefe20edcdd36adfc1800b8b36f77d7d
|
File details
Details for the file identifier_checker-1.0.1-py3-none-any.whl.
File metadata
- Download URL: identifier_checker-1.0.1-py3-none-any.whl
- Upload date:
- Size: 16.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ad63ac4aae4e534fe32dc2d5044539e731ac534169dc03eeb28538347dfee8a
|
|
| MD5 |
0f7dad58294342c7fc69106679367b53
|
|
| BLAKE2b-256 |
2a11c3610f36de282e00c21d05378ee455a58ee622e69059011b053a981b7871
|